Update 5 files

- /roles/gateway/handlers/main.yml
- /roles/gateway/tasks/main.yml
- /group_vars/gateway_servers.yml
- /group_vars/gateway_servers.bkp
- /README.md
This commit is contained in:
Administrator 2025-10-16 05:26:49 +00:00
parent 54728922f5
commit 765dfc1d88
4 changed files with 340 additions and 177 deletions

419
README.md
View File

@ -1,93 +1,354 @@
# Деплой инфраструктуры Olimp # Ansible Playbook для развертывания инфраструктуры Olimp
## Структура проекта Данный проект содержит Ansible playbook для автоматизированного развертывания и настройки серверной инфраструктуры, включая базовую настройку контейнеров, установку Docker и развертывание различных сервисов.
Infra/
├── inventories/ # Конфигурация хостов ## 🏗️ Структура проекта
├── group_vars/ # Переменные по группам /opt/servers/Olimp/
├── roles/ # Ansible роли
├── olimp-deploy.yml # Основной плейбук ├── olimp-deploy.yml # Основной плейбук
├── vault.yml # Секреты (зашифровано)
└── README.md # Документация
Infra/
├── inventories/ ├── inventories/
└── hosts.yml │ └── hosts # Файл инвентаризации
├── group_vars/ ├── group_vars/
│ ├── all.yml │ └── all.yml # Общие переменные для всех хостов
│ └── gateway.yml
├── roles/ ├── roles/
│ ├── proxmox_lxc/ │ ├── base_setup/ # Базовая настройка хостов
│ │ └── tasks/ │ ├── docker/ # Установка Docker и Docker Compose
│ │ └── main.yml │ ├── npm/ # Nginx Proxy Manager
│ ├── base_setup/ │ ├── heimdall/ # Heimdall - дашборд приложений
│ │ ├── tasks/ │ ├── mealie/ # Mealie - менеджер рецептов
│ │ │ ├── main.yml │ └── bookstack/ # Bookstack - система документации
│ │ │ └── ssh.yml
│ │ └── handlers/
│ │ └── main.yml
│ ├── docker/
│ │ └── tasks/
│ │ └── main.yml
│ ├── heimdall/
│ │ └── tasks/
│ │ └── main.yml
│ └── npm/
│ └── tasks/
│ └── main.yml
├── olimp-deploy.yml
├── vault.yml
└── README.md └── README.md
## Использование
### Запуск полного деплоя:
```bash
ansible-playbook -i inventories/hosts.yml olimp-deploy.yml --ask-vault-pass
Запуск отдельных компонентов:
bash
# Только создание контейнера
ansible-playbook -i inventories/hosts.yml olimp-deploy.yml --tags create_lxc --ask-vault-pass
# Только базовая настройка
ansible-playbook -i inventories/hosts.yml olimp-deploy.yml --tags base_setup
# Только установка Docker
ansible-playbook -i inventories/hosts.yml olimp-deploy.yml --tags docker
# Только Heimdall
ansible-playbook -i inventories/hosts.yml olimp-deploy.yml --tags heimdall
Роли
proxmox_lxc - Создание LXC контейнеров в Proxmox
base_setup - Базовая настройка ОС
docker - Установка Docker
heimdall - Развертывание Heimdall
Порядок развертывания
Создание LXC контейнеров
Базовая настройка ОС
Установка Docker
Развертывание сервисов
text text
## 🚀 КАК ЗАПУСТИТЬ: ## 🎯 Инвентаризация
1. **Создайте структуру каталогов** в GitLab репозитории Файл `inventories/hosts`:
2. **Добавьте все файлы** в соответствующие каталоги ```ini
3. **Зашифруйте vault.yml:** [infra]
```bash gateway ansible_host=192.168.1.221 int_ip=192.168.1.221
ansible-vault encrypt vault.yml 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 bash
ansible-playbook -i inventories/hosts.yml olimp-deploy.yml --ask-vault-pass --check # Пример резервного копирования
Запустите деплой: 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 bash
ansible-playbook -i inventories/hosts.yml olimp-deploy.yml --ask-vault-pass # Использование Ansible Vault для шифрования секретов
ansible-vault encrypt group_vars/secrets.yml
🚀 Дополнительные возможности
Проект может быть расширен добавлением новых ролей для:
Мониторинга (Prometheus, Grafana)
Резервного копирования
Централизованного логирования
Автоматического обновления контейнеров
📝 Лицензия
[Указать лицензию проекта]

View File

@ -1,5 +0,0 @@
---
- name: restart docker
systemd:
name: docker
state: restarted

View File

@ -1,93 +0,0 @@
---
- name: Install system dependencies
apt:
pkg:
- aptitude
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
- python3-pip
- virtualenv
- python3-setuptools
state: latest
update_cache: true
- name: Add Docker GPG apt Key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker Repository
apt_repository:
repo: deb https://download.docker.com/linux/ubuntu noble stable
state: present
- name: Install Docker CE
apt:
name: docker-ce
state: latest
update_cache: true
- name: Install Docker Python module
pip:
name: docker
- name: Configure Docker for LXC compatibility
copy:
content: |
{
"storage-driver": "vfs"
}
dest: /etc/docker/daemon.json
notify: restart docker
- name: Ensure Docker daemon is running
systemd:
name: docker
state: started
enabled: yes
- name: Create directories for services
file:
path: "{{ item.path }}"
state: directory
mode: '0755'
loop:
- { path: "{{ heimdall.config_dir }}" }
- { path: "{{ npm.data_dir }}" }
- { path: "{{ npm.letsencrypt_dir }}" }
- name: Pull Docker images
community.docker.docker_image:
name: "{{ item.image }}"
source: pull
loop:
- { image: "{{ heimdall.image }}" }
- { image: "{{ npm.image }}" }
- name: Deploy Heimdall container
community.docker.docker_container:
name: heimdall
image: "{{ heimdall.image }}"
state: started
restart_policy: unless-stopped
ports:
- "{{ heimdall.port }}"
volumes:
- "{{ heimdall.config_dir }}:/config"
env:
PUID: "{{ heimdall.user_id }}"
PGID: "{{ heimdall.group_id }}"
TZ: "{{ heimdall.timezone }}"
- name: Deploy NPM container
community.docker.docker_container:
name: npm
image: "{{ npm.image }}"
state: started
restart_policy: unless-stopped
ports: "{{ npm.ports }}"
volumes:
- "{{ npm.data_dir }}:/data"
- "{{ npm.letsencrypt_dir }}:/etc/letsencrypt"