diff --git a/README.md b/README.md index bbcd24c..47285c7 100644 --- a/README.md +++ b/README.md @@ -3,22 +3,57 @@ Данный проект содержит Ansible playbook для автоматизированного развертывания и настройки серверной инфраструктуры, включая базовую настройку контейнеров, установку Docker и развертывание различных сервисов. ## 🏗️ Структура проекта -/opt/servers/Olimp/ -├── olimp-deploy.yml # Основной плейбук -├── inventories/ -│ └── hosts # Файл инвентаризации -├── group_vars/ -│ └── all.yml # Общие переменные для всех хостов -├── roles/ -│ ├── base_setup/ # Базовая настройка хостов -│ ├── docker/ # Установка Docker и Docker Compose -│ ├── npm/ # Nginx Proxy Manager -│ ├── heimdall/ # Heimdall - дашборд приложений -│ ├── mealie/ # Mealie - менеджер рецептов -│ └── bookstack/ # Bookstack - система документации -└── README.md +```mermaid +flowchart TD + subgraph Gitea["🗄️ Gitea (192.168.1.214:3001)"] + G[Репозиторий: zailon/olimp] + end -text + 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 +``` ## 🎯 Инвентаризация @@ -27,6 +62,7 @@ text [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 @@ -37,11 +73,12 @@ Python установлен на целевых хостах Права sudo для пользователя, выполняющего развертывание 📦 Установка зависимостей -bash +```bash # Установка необходимых коллекций Ansible ansible-galaxy collection install community.docker +``` 🚀 Основной плейбук: olimp-deploy.yml -yaml +```yaml --- - hosts: all roles: @@ -58,12 +95,14 @@ yaml - { role: docker, tags: deploy_docker } - { role: mealie, tags: deploy_mealie } - { role: bookstack, tags: deploy_bookstack } +``` 🎮 Запуск плейбука Полное развертывание -bash +```bash ansible-playbook -i inventories/hosts olimp-deploy.yml +``` Выборочное развертывание по тегам -bash +```bash # Базовая настройка всех хостов ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_base @@ -75,6 +114,7 @@ ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_mealie --li 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 @@ -211,7 +251,7 @@ Web-интерфейс: http://data_ip:45131 ⚙️ Переменные конфигурации Файл group_vars/all.yml содержит все общие переменные: -yaml +```yaml # Общие настройки для всех хостов timezone: Asia/Yekaterinburg system_locale: ru_RU.UTF-8 @@ -258,6 +298,7 @@ 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 @@ -279,14 +320,15 @@ Bookstack - порт 45131 📊 Мониторинг и логи Проверка статуса сервисов -bash +```bash # На хосте gateway docker ps --filter name=npm --filter name=heimdall # На хосте data docker ps --filter name=mealie --filter name=bookstack +``` Просмотр логов -bash +```bash # Просмотр логов конкретного сервиса docker logs mealie -f --tail 50 docker logs bookstack-mnemo -f --tail 50 @@ -294,6 +336,7 @@ docker logs bookstack-mnemo -f --tail 50 # Просмотр логов через docker compose cd /mnt/mealie && docker compose logs cd /mnt/bookstack && docker compose logs +``` 💾 Резервное копирование Данные всех сервисов сохраняются в смонтированных директориях: @@ -303,12 +346,13 @@ Bookstack: /mnt/bookstack/config, /mnt/bookstack/uploads, /mnt/bookstack/db Для резервного копирования достаточно архивировать эти директории. -bash +```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 +```bash # Обновление всех сервисов на хосте cd /path/to/service docker compose pull @@ -316,9 +360,10 @@ docker compose up -d # Или через Ansible ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_mealie,deploy_bookstack --limit data +``` 🛠️ Устранение неисправностей Проверка подключения -bash +```bash ansible -i inventories/hosts all -m ping Проверка синтаксиса плейбука bash @@ -329,6 +374,7 @@ 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 @@ -336,9 +382,10 @@ ansible -i inventories/hosts all -m debug -a "var=hostvars[inventory_hostname]" Настройте брандмауэр для ограничения доступа к портам -bash +```bash # Использование Ansible Vault для шифрования секретов ansible-vault encrypt group_vars/secrets.yml +``` 🚀 Дополнительные возможности Проект может быть расширен добавлением новых ролей для: