mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 11:04:43 +02:00
- postfix_relay: switch Brevo → Gmail SMTP (smtp.gmail.com:587, App Password) - smtp_generic_maps: réécriture expéditeur root@lab.local → aliyesilkaya93@gmail.com - nftables: suppression DNAT/NAT Conan Exiles (ports 7777/7778/27015) - gateway handler: reloaded → restarted (flush complet des règles nft) - hermes_agent: pip → uv pour installation qdrant-client (venv sans pip binaire) - CLAUDE.md: corrections funk-cluster, hermes-switch, RAID5, postfix - docs: admin/infra/email.md — procédure complète relay Gmail Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
178 lines
4.6 KiB
YAML
178 lines
4.6 KiB
YAML
---
|
|
# --- Dépendances système ---
|
|
|
|
- name: Install Hermes Agent dependencies
|
|
ansible.builtin.dnf:
|
|
name:
|
|
- curl
|
|
- git
|
|
- tar
|
|
state: present
|
|
|
|
# --- Utilisateur système ---
|
|
|
|
- name: Create hermes system user
|
|
ansible.builtin.user:
|
|
name: "{{ hermes_user }}"
|
|
home: "{{ hermes_home }}"
|
|
shell: /bin/bash
|
|
system: false
|
|
create_home: true
|
|
state: present
|
|
|
|
# --- Environnement shell utilisateur ---
|
|
|
|
- name: Set HERMES_HOME in hermes user bashrc
|
|
ansible.builtin.lineinfile:
|
|
path: "{{ hermes_home }}/.bashrc"
|
|
line: "export HERMES_HOME={{ hermes_data_dir }}"
|
|
create: true
|
|
owner: "{{ hermes_user }}"
|
|
group: "{{ hermes_user }}"
|
|
mode: '0644'
|
|
|
|
- name: Add hermes venv to PATH in bashrc
|
|
ansible.builtin.lineinfile:
|
|
path: "{{ hermes_home }}/.bashrc"
|
|
line: "export PATH={{ hermes_data_dir }}/hermes-agent/venv/bin:$PATH"
|
|
create: true
|
|
owner: "{{ hermes_user }}"
|
|
group: "{{ hermes_user }}"
|
|
mode: '0644'
|
|
|
|
# --- Répertoire données (RAID5) ---
|
|
|
|
- name: Create HERMES_HOME on RAID5
|
|
ansible.builtin.file:
|
|
path: "{{ hermes_data_dir }}"
|
|
state: directory
|
|
owner: "{{ hermes_user }}"
|
|
group: "{{ hermes_user }}"
|
|
mode: '0750'
|
|
|
|
# --- Installation ---
|
|
|
|
- name: Check if hermes binary is already installed
|
|
ansible.builtin.stat:
|
|
path: "{{ hermes_home }}/.local/bin/hermes"
|
|
register: hermes_binary
|
|
|
|
- name: Install Hermes Agent via installer script
|
|
ansible.builtin.shell:
|
|
cmd: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
|
|
executable: /bin/bash
|
|
become: true
|
|
become_user: "{{ hermes_user }}"
|
|
environment:
|
|
HOME: "{{ hermes_home }}"
|
|
HERMES_HOME: "{{ hermes_data_dir }}"
|
|
when: not hermes_binary.stat.exists
|
|
register: hermes_install_result
|
|
|
|
- name: Show installer output
|
|
ansible.builtin.debug:
|
|
var: hermes_install_result.stdout_lines
|
|
when: hermes_install_result is changed
|
|
|
|
# --- Packages Python pour les skills ---
|
|
|
|
- name: Install Python packages for Hermes skills (via uv)
|
|
ansible.builtin.command:
|
|
cmd: >
|
|
{{ hermes_home }}/.local/bin/uv pip install qdrant-client>=1.12.0
|
|
--python {{ hermes_home }}/.hermes/hermes-agent/venv/bin/python
|
|
environment:
|
|
UV_CACHE_DIR: /tmp/uv-cache
|
|
become: true
|
|
become_user: root
|
|
when: hermes_binary.stat.exists
|
|
changed_when: false
|
|
|
|
# --- Configuration ---
|
|
|
|
- name: Ensure LM_BASE_URL in .env points to LiteLLM
|
|
ansible.builtin.lineinfile:
|
|
path: "{{ hermes_data_dir }}/.env"
|
|
regexp: '^LM_BASE_URL='
|
|
line: "LM_BASE_URL={{ hermes_lm_base_url }}"
|
|
create: false
|
|
notify: Restart hermes-agent
|
|
when: hermes_binary.stat.exists
|
|
|
|
- name: Ensure LM_API_KEY in .env is correct
|
|
ansible.builtin.lineinfile:
|
|
path: "{{ hermes_data_dir }}/.env"
|
|
regexp: '^LM_API_KEY='
|
|
line: "LM_API_KEY={{ hermes_lm_api_key }}"
|
|
create: false
|
|
notify: Restart hermes-agent
|
|
when: hermes_binary.stat.exists
|
|
|
|
- name: Deploy Hermes config.yaml
|
|
ansible.builtin.template:
|
|
src: config.yaml.j2
|
|
dest: "{{ hermes_data_dir }}/config.yaml"
|
|
owner: "{{ hermes_user }}"
|
|
group: "{{ hermes_user }}"
|
|
mode: '0640'
|
|
notify: Restart hermes-agent
|
|
|
|
# --- Service systemd ---
|
|
|
|
- name: Deploy hermes-agent systemd service
|
|
ansible.builtin.template:
|
|
src: hermes-agent.service.j2
|
|
dest: /etc/systemd/system/hermes-agent.service
|
|
mode: '0644'
|
|
notify:
|
|
- Reload systemd
|
|
- Restart hermes-agent
|
|
|
|
- name: Enable and start hermes-agent
|
|
ansible.builtin.systemd:
|
|
name: hermes-agent
|
|
enabled: true
|
|
daemon_reload: true
|
|
state: started
|
|
|
|
# --- Dashboard systemd ---
|
|
|
|
- name: Deploy hermes-dashboard systemd service
|
|
ansible.builtin.template:
|
|
src: hermes-dashboard.service.j2
|
|
dest: /etc/systemd/system/hermes-dashboard.service
|
|
mode: '0644'
|
|
notify:
|
|
- Reload systemd
|
|
- Restart hermes-dashboard
|
|
|
|
- name: Enable and start hermes-dashboard
|
|
ansible.builtin.systemd:
|
|
name: hermes-dashboard
|
|
enabled: true
|
|
daemon_reload: true
|
|
state: started
|
|
|
|
# --- Wrapper global ---
|
|
|
|
- name: Deploy hermes global wrapper (/usr/local/bin/hermes)
|
|
ansible.builtin.copy:
|
|
dest: /usr/local/bin/hermes
|
|
mode: '0755'
|
|
content: |
|
|
#!/bin/bash
|
|
exec sudo -u {{ hermes_user }} \
|
|
HOME={{ hermes_home }} \
|
|
HERMES_HOME={{ hermes_data_dir }} \
|
|
{{ hermes_home }}/.hermes/hermes-agent/venv/bin/hermes "$@"
|
|
|
|
# --- Firewall ---
|
|
|
|
- name: Open Hermes gateway port in firewall
|
|
ansible.posix.firewalld:
|
|
port: "{{ hermes_gateway_port }}/tcp"
|
|
permanent: true
|
|
state: enabled
|
|
immediate: true
|
|
when: ansible_facts.services['firewalld.service'] is defined
|
|
and ansible_facts.services['firewalld.service']['state'] == 'running'
|