# Ansible Playbook для развертывания инфраструктуры Olimp Данный проект содержит Ansible playbook для автоматизированного развертывания и настройки серверной инфраструктуры, включая базовую настройку контейнеров, установку Docker и развертывание различных сервисов. ## 🏗️ Структура проекта ```mermaid flowchart TD subgraph Gitea["🗄️ Gitea (192.168.1.214:3001)"] G[Репозиторий: zailon/olimp] end subgraph AnsibleHost["🖥️ Ansible Host (192.168.1.210)"] direction TB A[/opt/servers/Olimp/] A --> P[olimp-deploy.yml] A --> I[inventories/hosts] A --> V[group_vars/all.yml] A --> R[roles/] R --> R1[base_setup/] R --> R2[docker/] R --> R3[npm/] R --> R4[heimdall/] R --> R5[mealie/] R --> R6[bookstack/] A --> M[README.md] end subgraph Targets["🎯 Целевые хосты"] T1[gateway:201] T2[media:203] T3[photo:204] T4[talk:206] T5[Прочие LXC/VM] end G -->|git pull via SSH
port 2221| AnsibleHost P -->|ansible-playbook -i inventories/hosts| Targets R1 --> T1 & T2 & T3 & T4 & T5 R2 --> T1 & T2 & T3 & T4 & T5 R3 --> T1 R4 --> T1 R5 --> T3 R6 --> T4 classDef gitea fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef ansible fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px classDef target fill:#fff3e0,stroke:#ef6c00,stroke-width:2px class G gitea class A,P,I,V,R,R1,R2,R3,R4,R5,R6,M ansible class T1,T2,T3,T4,T5 target ``` ## 🎯 Инвентаризация Файл `inventories/hosts`: ```ini [infra] gateway ansible_host=192.168.1.221 int_ip=192.168.1.221 data ansible_host=192.168.1.222 int_ip=192.168.1.222 ``` 📋 Предварительные требования Целевые хосты должны быть доступны по SSH Ansible установлен на управляющей машине Python установлен на целевых хостах Права sudo для пользователя, выполняющего развертывание 📦 Установка зависимостей ```bash # Установка необходимых коллекций Ansible ansible-galaxy collection install community.docker ``` 🚀 Основной плейбук: olimp-deploy.yml ```yaml --- - hosts: all roles: - { role: base_setup, tags: deploy_base } - hosts: gateway roles: - { role: docker, tags: deploy_docker } - { role: npm, tags: deploy_npm } - { role: heimdall, tags: deploy_heimdall } - hosts: data roles: - { role: docker, tags: deploy_docker } - { role: mealie, tags: deploy_mealie } - { role: bookstack, tags: deploy_bookstack } ``` 🎮 Запуск плейбука Полное развертывание ```bash ansible-playbook -i inventories/hosts olimp-deploy.yml ``` Выборочное развертывание по тегам ```bash # Базовая настройка всех хостов ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_base # Установка Docker на конкретный хост ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_docker --limit data # Установка конкретного сервиса ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_mealie --limit data ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_bookstack --limit data ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_npm --limit gateway ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_heimdall --limit gateway ``` 🔧 Детальное описание ролей Роль: base_setup Тег: deploy_base Назначение: Базовая настройка всех хостов инфраструктуры. Задачи: Update and upgrade apt packages - обновление пакетов и кэша apt Install base packages - установка базовых пакетов из переменной base_packages Configure timezone - настройка часового пояса из переменной timezone Configure locale - настройка локали из переменной system_locale Set default locale - установка системной локали Install Python requests library - установка библиотеки Python3 requests для работы модулей Ansible Источник переменных: group_vars/all.yml Роль: docker Тег: deploy_docker Назначение: Установка Docker и Docker Compose на целевые хосты. Задачи: Install Docker dependencies - установка зависимостей Docker Add Docker GPG key - добавление GPG ключа Docker Add Docker repository - добавление официального репозитория Docker Install Docker - установка Docker CE и компонентов Install Docker Compose - установка Docker Compose Plugin Start and enable Docker service - запуск и включение службы Docker Verify Docker installation - проверка установки Docker и Docker Compose Особенности: Использует официальные репозитории Docker для установки последних версий. Роль: npm (Nginx Proxy Manager) Тег: deploy_npm Назначение: Установка Nginx Proxy Manager на хост gateway. Задачи: Create directories for NPM - создание директорий для данных NPM Deploy NPM docker-compose.yml - развертывание docker-compose файла из шаблона Start NPM container - запуск контейнера NPM Check NPM container status - проверка статуса контейнера Порты: 80, 443, 81 Web-интерфейс: http://gateway_ip:81 Источник переменных: group_vars/all.yml - npm_base_dir, npm_data_dir, npm_letsencrypt_dir Роль: heimdall Тег: deploy_heimdall Назначение: Установка Heimdall - дашборда для быстрого доступа к приложениям. Задачи: Create directories for Heimdall - создание директорий для данных Heimdall Deploy Heimdall docker-compose.yml - развертывание docker-compose файла Start Heimdall container - запуск контейнера Heimdall Check Heimdall container status - проверка статуса контейнера Порт: 45131 Web-интерфейс: http://gateway_ip:45131 Источник переменных: group_vars/all.yml - heimdall_base_dir, heimdall_config_dir, heimdall_port Роль: mealie Тег: deploy_mealie Назначение: Установка Mealie - менеджера рецептов на хост data. Задачи: Create Mealie directory structure - создание директорий в /mnt/mealie Set proper ownership for Mealie data directory - установка прав владельца для директории данных Deploy Mealie docker-compose.yml - развертывание docker-compose файла Pull Mealie Docker image - загрузка образа Mealie Start Mealie container - запуск контейнера Mealie Check Mealie container status - проверка статуса контейнера Порт: 45132 Web-интерфейс: http://data_ip:45132 Использует: SQLite базу данных по умолчанию Источник переменных: group_vars/all.yml - mealie_base_dir, mealie_data_dir, mealie_port Роль: bookstack Тег: deploy_bookstack Назначение: Установка Bookstack - системы для ведения документации на хост data. Задачи: Create Bookstack directory structure - создание директорий в /mnt/bookstack Deploy Bookstack docker-compose.yml - развертывание docker-compose файла Start Bookstack services - запуск контейнеров Bookstack и MariaDB Check Bookstack container status - проверка статуса контейнеров Порт: 45131 Web-интерфейс: http://data_ip:45131 Использует: MariaDB базу данных Особенности: Сохраняет существующие данные из /mnt/bookstack Источник переменных: group_vars/all.yml - bookstack_base_dir, bookstack_config_dir, bookstack_uploads_dir, bookstack_db_dir, bookstack_port ⚙️ Переменные конфигурации Файл group_vars/all.yml содержит все общие переменные: ```yaml # Общие настройки для всех хостов timezone: Asia/Yekaterinburg system_locale: ru_RU.UTF-8 # Базовые пакеты для установки на всех хостах base_packages: - curl - wget - gnupg - ca-certificates - software-properties-common - tree - htop - nano - git - apt-transport-https - net-tools - dnsutils - iputils-ping - traceroute # Настройки Docker сервисов # NPM (Nginx Proxy Manager) npm_base_dir: "/opt/npm" npm_data_dir: "/opt/npm/data" npm_letsencrypt_dir: "/opt/npm/letsencrypt" # Heimdall heimdall_base_dir: "/opt/heimdall" heimdall_config_dir: "/opt/heimdall/config" heimdall_port: "45131" # Mealie mealie_base_dir: "/mnt/mealie" mealie_data_dir: "/mnt/mealie/data" mealie_port: "45132" # Bookstack bookstack_base_dir: "/mnt/bookstack" bookstack_config_dir: "/mnt/bookstack/config" bookstack_uploads_dir: "/mnt/bookstack/uploads" bookstack_db_dir: "/mnt/bookstack/db" bookstack_port: "45131" bookstack_db_password: "secure_password_123" bookstack_db_root_password: "secure_root_password_123" ``` 🏛️ Архитектура решения Хост Gateway (192.168.1.221) Nginx Proxy Manager - порты 80, 443, 81 Обратный прокси для управления доменами и SSL Heimdall - порт 45131 Дашборд для быстрого доступа ко всем сервисам Хост Data (192.168.1.222) Mealie - порт 45132 Менеджер рецептов с возможностью импорта и организации Bookstack - порт 45131 Система документации с поддержкой книг, глав и страниц 📊 Мониторинг и логи Проверка статуса сервисов ```bash # На хосте gateway docker ps --filter name=npm --filter name=heimdall # На хосте data docker ps --filter name=mealie --filter name=bookstack ``` Просмотр логов ```bash # Просмотр логов конкретного сервиса docker logs mealie -f --tail 50 docker logs bookstack-mnemo -f --tail 50 # Просмотр логов через docker compose cd /mnt/mealie && docker compose logs cd /mnt/bookstack && docker compose logs ``` 💾 Резервное копирование Данные всех сервисов сохраняются в смонтированных директориях: Mealie: /mnt/mealie/data Bookstack: /mnt/bookstack/config, /mnt/bookstack/uploads, /mnt/bookstack/db Для резервного копирования достаточно архивировать эти директории. ```bash # Пример резервного копирования tar -czf mealie_backup_$(date +%Y%m%d).tar.gz /mnt/mealie/data tar -czf bookstack_backup_$(date +%Y%m%d).tar.gz /mnt/bookstack ``` 🔄 Обновление сервисов ```bash # Обновление всех сервисов на хосте cd /path/to/service docker compose pull docker compose up -d # Или через Ansible ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_mealie,deploy_bookstack --limit data ``` 🛠️ Устранение неисправностей Проверка подключения ```bash ansible -i inventories/hosts all -m ping Проверка синтаксиса плейбука bash ansible-playbook -i inventories/hosts olimp-deploy.yml --syntax-check Запуск в режиме отладки bash ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_mealie -vvv Проверка переменных bash ansible -i inventories/hosts all -m debug -a "var=hostvars[inventory_hostname]" ``` 🔒 Безопасность Все пароли и чувствительные данные должны храниться в зашифрованном виде с помощью Ansible Vault Регулярно обновляйте образы контейнеров для получения исправлений безопасности Настройте брандмауэр для ограничения доступа к портам ```bash # Использование Ansible Vault для шифрования секретов ansible-vault encrypt group_vars/secrets.yml ``` 🚀 Дополнительные возможности Проект может быть расширен добавлением новых ролей для: Мониторинга (Prometheus, Grafana) Резервного копирования Централизованного логирования Автоматического обновления контейнеров 📝 Лицензия [Указать лицензию проекта]