Docs/docs/09-ansible.md
Administrator 0d8e11aa30 Update 3 files
- /README.md
- /docs/08-monitoring.md
- /docs/09-ansible.md
2026-03-20 16:18:15 +05:00

9.5 KiB
Raw Blame History

09. Управление конфигурацией (Ansible)

Обзор

Для автоматизации развёртывания и поддержки инфраструктуры используется Ansible. Управляющий хост — ansible (192.168.1.210). Все конфигурации хранятся в репозитории, секреты зашифрованы с помощью Ansible Vault.

Структура репозитория

ansible/
├── inventory/
│   └── hosts                     # файл инвентаря
├── group_vars/
│   ├── all.yml                   # общие переменные (несекретные)
│   └── vault.yml                 # зашифрованные секреты
├── roles/
│   ├── base_setup/               # базовая настройка всех хостов
│   ├── system_cleanup/           # удаление ненужных пакетов
│   ├── docker/                   # установка Docker, настройка мониторинга
│   ├── npm/                      # Nginx Proxy Manager
│   ├── heimdall/                 # Heimdall дашборд
│   ├── mealie/                   # Mealie
│   ├── bookstack/                # BookStack
│   ├── bitwarden/                # Bitwarden (Vaultwarden)
│   ├── ampache/                  # Ampache
│   ├── audiobookshelf/           # Audiobookshelf
│   ├── calibre-web/              # Calibre-web
│   ├── jellyfin/                 # Jellyfin
│   ├── flibusta/                 # Flibusta
│   ├── immich/                   # Immich
│   ├── mumble/                   # Mumble
│   ├── teamspeak/                # TeamSpeak
│   ├── minecraft/                # Minecraft (закомментирована)
│   ├── meshcentral/              # MeshCentral
│   ├── grafana/                  # Grafana
│   ├── loki/                     # Loki
│   ├── gitlab/                   # GitLab
│   ├── torrserver/               # TorrServer
│   ├── qbittorrent/              # qBittorrent
│   ├── promtail/                 # Promtail (сбор логов)
│   ├── cadvisor/                 # cAdvisor (закомментирована)
│   ├── proxmox_base_setup/       # настройка Proxmox хоста
│   └── proxmox_monitoring/       # настройка Proxmox VE Exporter
└── olimp-deploy.yml              # основной playbook

Инвентарь (inventory/hosts)

Хосты сгруппированы по ролям:

[infra]
proxmox         ansible_host=192.168.1.200 int_ip=192.168.1.200
gateway         ansible_host=192.168.1.201 int_ip=192.168.1.201
data            ansible_host=192.168.1.202 int_ip=192.168.1.202
media           ansible_host=192.168.1.203 int_ip=192.168.1.203
photo           ansible_host=192.168.1.204 int_ip=192.168.1.204
talk            ansible_host=192.168.1.206 int_ip=192.168.1.206
games           ansible_host=192.168.1.207 int_ip=192.168.1.207
manage          ansible_host=192.168.1.208 int_ip=192.168.1.208
git             ansible_host=192.168.1.209 int_ip=192.168.1.209
ansible         ansible_host=192.168.1.210 int_ip=192.168.1.210
torrent         ansible_host=192.168.1.211 int_ip=192.168.1.211
test            ansible_host=192.168.1.212 int_ip=192.168.1.212

[pve-server]
proxmox

[gateway-server]
gateway

[data-server]
data

[media-server]
media

[photo-server]
photo

[talk-server]
talk

[games-server]
games
test

[manage-server]
manage

[git-server]
git

[ansible-server]
ansible

[torrent-server]
torrent

Playbook (olimp-deploy.yml)

Основной playbook запускает роли для каждой группы хостов с тегами для выборочного применения.

- hosts: all:!pve-server
  roles:
    - {role: base_setup,              tags: deploy_base}
    - {role: system_cleanup,          tags: deploy_cleanup}
    - {role: promtail,                tags: deploy_promtail}

- hosts: pve-server
  roles:
    - { role: proxmox_base_setup,     tags: deploy_proxmox_base }
    - { role: proxmox_monitoring,     tags: deploy_proxmox_monitoring }

- hosts: gateway-server
  roles:
    - { role: docker,                 tags: deploy_docker }
    - { role: npm,                    tags: deploy_npm }
    - { role: heimdall,               tags: deploy_heimdall }

- hosts: data-server
  roles:
    - { role: docker,                 tags: deploy_docker }
    - { role: mealie,                 tags: deploy_mealie }
    - { role: bookstack,              tags: deploy_bookstack }
    - { role: bitwarden,              tags: deploy_bitwarden }

# ... остальные группы аналогично

Переменные

Общие переменные (group_vars/all.yml)

Содержат несекретные настройки:

  • временная зона, локали
  • список IP-адресов всех серверов
  • порты для мониторинга
  • пути к каталогам для сервисов
  • публичные SSH-ключи
  • списки пакетов для установки

Пример:

timezone: Asia/Yekaterinburg
system_locale: ru_RU.UTF-8

server_ips:
  olimp:      "192.168.1.200"
  gateway:    "192.168.1.201"
  # ... остальные

monitoring_ports:
  node_exporter: 9100
  cadvisor: 8080
  loki: 3100
  promtail: 9080

base_packages:
  - curl
  - wget
  - htop
  - git
  # ...

Секреты (group_vars/vault.yml)

Все пароли, токены и другие чувствительные данные хранятся в зашифрованном файле vault.yml. Шифрование выполняется командой:

ansible-vault encrypt group_vars/vault.yml

Пример содержимого (незашифрованный вид):

vault_bitwarden_admin_token: "super_secret_token"
vault_bitwarden_smtp_password: "smtp_password"
vault_mealie_db_password: "mealie_db_pass"
vault_immich_db_password: "immich_db_pass"
vault_mumble_server_password: "mumble_pass"
vault_mumble_superuser_password: "mumble_super_pass"
vault_matrix_postgres_password: "matrix_db_pass"
vault_matrix_synapse_secret: "synapse_secret"
vault_matrix_macaroon_secret: "macaroon_secret"
vault_matrix_form_secret: "form_secret"
vault_samba_password_qb: "qb_samba_pass"
grafana_admin_password: "strong_grafana_pass"
# ... и другие

Запуск плейбуков

Для применения конфигурации используется команда:

ansible-playbook -i inventory/hosts olimp-deploy.yml --ask-vault-pass

Для запуска только определённых тегов:

ansible-playbook -i inventory/hosts olimp-deploy.yml --tags deploy_docker --ask-vault-pass

Пример роли (docker)

Роль docker выполняет установку Docker и настройку мониторинга. Ключевые задачи:

  • Установка зависимостей (apt-transport-https, ca-certificates, curl, gnupg, lsb-release)
  • Добавление GPG-ключа Docker и репозитория
  • Установка docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin
  • Запуск и включение службы Docker
  • Развёртывание скрипта docker_metrics.sh для сбора метрик в Node Exporter
  • Создание systemd-таймера для регулярного сбора метрик
  • Обновление runc до версии 1.2.4 (если требуется)

Проблемы и рекомендации

🔴 Хранение паролей в открытом виде в all.yml

На момент аудита некоторые пароли (например, grafana_admin_password) находились в all.yml в открытом виде. Немедленно перенести их в vault.yml и зашифровать.

🟡 Использование тегов и ролей

Некоторые роли закомментированы (например, cadvisor, minecraft). Если они не используются, следует удалить их из плейбука, чтобы избежать путаницы.

🟢 Версионирование и резервное копирование

Рекомендуется хранить репозиторий Ansible в Git (локальном или на GitLab) и регулярно делать резервные копии vault.yml с паролем.

🟠 Управление SSH-ключами

В all.yml заданы публичные ключи. Необходимо убедиться, что на всех хостах нет лишних ключей, а вход по паролю отключён.


Связанные разделы: