Каждая роль — отдельный git-репозиторий в ansible/roles/<name>/. Описание здесь — навигатор; источник правды — defaults/main.yml и tasks/main.yml каждой роли.
sm2c-cloud-* — деплой сервисов (swarm-стек или compose-стек) на cloud-хост (firefly).sm2c-cloud (без суффикса) — host-bootstrap (OS, firewall, swarm manager, базовые пакеты, time-sync).sm2c-zabbix-* — управление объектами внутри Zabbix через API (хосты, web-services, SLA).sm2c_cloud_<role>_* (skip_deploy, skip_configure, remove_stack).| Роль | Назначение | Playbook |
|---|---|---|
sm2c-cloud |
OS bootstrap, firewalld, swarm-manager init, time-sync, базовые пакеты | system-basic.yml, system-swarm-manager-bootstrap.yml |
sm2c-cloud-amneziawg |
AmneziaWG VPN (DKMS-модуль, конфиг сервер/клиент) | system-amneziawg-bootstrap.yml |
sm2c-customize |
Кастомизация хоста (motd, prompt, fish-конфиг и т.п.) | system-recustomize.yml |
sm2c-cloud-llm |
LLM gateway: llama-swap (hot-swap proxy для llama-server) + ollama. Host-services (не Docker). На firefly. С 2026-05-02 включает install-fcc.yml — раскатывает free-claude-code compose-стек для Claude Code CLI. | service-llm-bootstrap.yml |
| Роль | Сервис | Сеть | Volume | Playbook |
|---|---|---|---|---|
sm2c-cloud-traefik |
traefik | net_forgain |
/mnt/swarm/traefik_data |
system-traefik-bootstrap.yml |
sm2c-cloud-portainer |
portainer | net_forgain |
/mnt/swarm/portainer_data |
system-portainer-bootstarp.yml |
sm2c-cloud-wiki |
wiki | net_forgain |
/mnt/swarm/wiki_data |
service-wiki-bootstrap.yml |
sm2c-cloud-openproject |
openproject | net_forgain |
/mnt/swarm/openproject_data |
service-openproject-bootstrap.yml |
sm2c-cloud-owncloud |
owncloud | net_forgain |
/mnt/swarm/owncloud_data |
service-owncloud-bootstrap.yml |
sm2c-cloud-jumpserver |
jumpserver | net_forgain |
/mnt/swarm/jumpserver_data |
service-jumpserver-bootstrap.yml |
sm2c-cloud-openvas |
openvas | net_forgain |
/mnt/swarm/openvas_data |
service-openvas-bootstrap.yml |
sm2c-cloud-i2p |
i2p | net_forgain |
/mnt/swarm/i2p_data |
service-i2p-bootstrap.yml |
/home/compose/pro-4gain-<name>/ конвенция, общий traefik в swarm подхватывает через file-provider в /mnt/swarm/traefik_data/custom/<name>.yml.
| Роль | Сервис | Compose-папка | Playbook |
|---|---|---|---|
sm2c-cloud-zabbix |
zabbix server + grafana | /home/compose/pro-4gain-zabbix |
service-zabbix-bootstrap.yml |
sm2c-cloud-netbox |
netbox | /home/compose/pro-4gain-netbox |
service-netbox-bootstrap.yml |
sm2c-cloud-semaphore |
semaphore | /home/compose/pro-4gain-semaphore |
service-semaphore-bootstrap.yml |
sm2c-cloud-mail |
/home/compose/pro-4gain-mail |
service-mail-bootstrap.yml |
|
sm2c-cloud-gitlab |
gitlab | /mnt/compose/gitlab/data/gitlab (legacy) |
service-gitlab-bootstrap.yml |
sm2c-cloud-inventory |
inventory dashboard | /home/compose/pro-4gain-inventory |
service-inventory-bootstrap.yml |
| Роль | Назначение |
|---|---|
sm2c-cloud-zabbix-agent |
Установка zabbix-agent2 (active mode) на cloud + cloud_guests + proxmox. Через command: dnf (не dnf модуль) — на EL8 c python 3.11 binding'и python3-dnf отсутствуют. |
sm2c-cloud-zabbix-proxy |
Внешний zabbix-proxy на nugush для web-checks (NAT-hairpinning). PSK-аутентификация. Исключает epel.exclude='zabbix*' чтобы EPEL 6.0.45 не перебивал 7.0. |
sm2c-zabbix-host |
Регистрация хостов в Zabbix через API (community.zabbix.zabbix_host). Читает zbx_host: из host_vars/<host>.yml (был zabbix: — переименован, конфликт с переменной стека). |
sm2c-zabbix-web-service |
Synthetic web-host'ы для каждого web_services[] элемента из group_vars/all.yml. monitored_by: proxy + proxy: nugush для всех web-checks. Кастомный template forGain Website by HTTP. |
| Роль | Назначение |
|---|---|
sm2c-inventory-collect |
Ставит на хост collect.sh (DMI/CPU/DIMM с part-номерами/SMART/IPMI/lspci/nvidia-smi/proxmox-VM) → push JSON в inventory dashboard. Запускается hourly из APScheduler контейнера. Поддерживает aacraid pd-probe (Adaptec) и passthrough_owner для VM с vfio-pci. |
_old/)Не используются, оставлены для истории/возможного восстановления.
| Роль | Причина архивации |
|---|---|
sm2c-cloud-elk |
ELK-стек был отключён, мониторинг переехал на Zabbix. |
sm2c-cloud-filebeat |
Часть ELK-пайплайна, тоже не используется. |
sm2c-cloud-elink |
Замещён AmneziaWG (sm2c-cloud-amneziawg). |
sm2c-cloud-suricata, sm2c-cloud-zeek, sm2c-cloud-scirius |
NIDS-стек, не разворачивается сейчас. |
sm2c-cloud-phpipam |
Замещён NetBox. |
sm2c-cloud-paperless-ngx |
Не используется. |
sm2c-system-ngfw |
Не используется. |
nc13-stratum-resty |
nc13/resty устаревшая схема. |
Эти стеки задеплоены руками на firefly в /home/compose/pro-4gain-*/, ансибл-ролей пока нет:
mail — mail.4gain.progitlab — gitlab.4gain.pro + registry + pageswww-tenants — мульти-тенантный www (4gain.pro, tatarnikov.org, estim.tech, nc13.ru)llama-swap + ollama — LLM-инструменты (запущены через systemd на firefly:8089)lo-1c-analytics, lo-voicebot, tgUserStoryReport — отдельные приложенияПри добавлении роли — копировать паттерн sm2c-cloud-netbox 1:1 (compose-стиль с name: в docker-compose.yml).
Naming в ansible/playbooks/:
system-* — host-уровень (bootstrap OS, swarm, traefik, portainer, amneziawg)service-* — деплой одного приложенияsecurity-* — управление пользователями/доступомdiagnostic-* — read-only проверкиЗапускать ВСЕГДА из ansible/playbooks/ (там лежит ansible.cfg с roles_path = ../roles/, inventory = ../inventory/hosts.yml):
cd ansible/playbooks
ansible-playbook -c ssh service-<name>-bootstrap.yml
ansible-playbook -c ssh service-<name>-bootstrap.yml --check --diff # dry-run
ansible-playbook -c ssh <playbook>.yml --limit firefly.e1.4gain.pro --tags <tag>
-c ssh принципиально (а не paramiko из ansible.cfg) — иначе ProxyJump через duck.4gain.pro:21150 не работает.
Changelog
sm2c-cloud-i2p реализован, переехал из «Прочее» в swarm-стеки (claude/forGain)