olimp/README.md

401 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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<br/>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)
Резервного копирования
Централизованного логирования
Автоматического обновления контейнеров
📝 Лицензия
[Указать лицензию проекта]