olimp/README.md

14 KiB
Raw Blame History

Ansible Playbook для развертывания инфраструктуры Olimp

Данный проект содержит Ansible playbook для автоматизированного развертывания и настройки серверной инфраструктуры, включая базовую настройку контейнеров, установку Docker и развертывание различных сервисов.

🏗️ Структура проекта

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:

[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 для пользователя, выполняющего развертывание

📦 Установка зависимостей

# Установка необходимых коллекций Ansible
ansible-galaxy collection install community.docker

🚀 Основной плейбук: olimp-deploy.yml

---
- 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 }

🎮 Запуск плейбука Полное развертывание

ansible-playbook -i inventories/hosts olimp-deploy.yml

Выборочное развертывание по тегам

# Базовая настройка всех хостов
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 содержит все общие переменные:

# Общие настройки для всех хостов
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

Система документации с поддержкой книг, глав и страниц

📊 Мониторинг и логи Проверка статуса сервисов

# На хосте gateway
docker ps --filter name=npm --filter name=heimdall

# На хосте data
docker ps --filter name=mealie --filter name=bookstack

Просмотр логов

# Просмотр логов конкретного сервиса
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

Для резервного копирования достаточно архивировать эти директории.

# Пример резервного копирования
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

🔄 Обновление сервисов

# Обновление всех сервисов на хосте
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

🛠️ Устранение неисправностей Проверка подключения

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

Регулярно обновляйте образы контейнеров для получения исправлений безопасности

Настройте брандмауэр для ограничения доступа к портам

# Использование Ansible Vault для шифрования секретов
ansible-vault encrypt group_vars/secrets.yml

🚀 Дополнительные возможности Проект может быть расширен добавлением новых ролей для:

Мониторинга (Prometheus, Grafana)

Резервного копирования

Централизованного логирования

Автоматического обновления контейнеров

📝 Лицензия [Указать лицензию проекта]