Обновить README.md
This commit is contained in:
parent
a2b96b5e2d
commit
7b518315de
99
README.md
99
README.md
@ -3,22 +3,57 @@
|
|||||||
Данный проект содержит Ansible playbook для автоматизированного развертывания и настройки серверной инфраструктуры, включая базовую настройку контейнеров, установку Docker и развертывание различных сервисов.
|
Данный проект содержит Ansible playbook для автоматизированного развертывания и настройки серверной инфраструктуры, включая базовую настройку контейнеров, установку Docker и развертывание различных сервисов.
|
||||||
|
|
||||||
## 🏗️ Структура проекта
|
## 🏗️ Структура проекта
|
||||||
/opt/servers/Olimp/
|
```mermaid
|
||||||
├── olimp-deploy.yml # Основной плейбук
|
flowchart TD
|
||||||
├── inventories/
|
subgraph Gitea["🗄️ Gitea (192.168.1.214:3001)"]
|
||||||
│ └── hosts # Файл инвентаризации
|
G[Репозиторий: zailon/olimp]
|
||||||
├── group_vars/
|
end
|
||||||
│ └── all.yml # Общие переменные для всех хостов
|
|
||||||
├── roles/
|
|
||||||
│ ├── base_setup/ # Базовая настройка хостов
|
|
||||||
│ ├── docker/ # Установка Docker и Docker Compose
|
|
||||||
│ ├── npm/ # Nginx Proxy Manager
|
|
||||||
│ ├── heimdall/ # Heimdall - дашборд приложений
|
|
||||||
│ ├── mealie/ # Mealie - менеджер рецептов
|
|
||||||
│ └── bookstack/ # Bookstack - система документации
|
|
||||||
└── README.md
|
|
||||||
|
|
||||||
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<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
|
||||||
|
```
|
||||||
|
|
||||||
## 🎯 Инвентаризация
|
## 🎯 Инвентаризация
|
||||||
|
|
||||||
@ -27,6 +62,7 @@ text
|
|||||||
[infra]
|
[infra]
|
||||||
gateway ansible_host=192.168.1.221 int_ip=192.168.1.221
|
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
|
data ansible_host=192.168.1.222 int_ip=192.168.1.222
|
||||||
|
```
|
||||||
📋 Предварительные требования
|
📋 Предварительные требования
|
||||||
Целевые хосты должны быть доступны по SSH
|
Целевые хосты должны быть доступны по SSH
|
||||||
|
|
||||||
@ -37,11 +73,12 @@ Python установлен на целевых хостах
|
|||||||
Права sudo для пользователя, выполняющего развертывание
|
Права sudo для пользователя, выполняющего развертывание
|
||||||
|
|
||||||
📦 Установка зависимостей
|
📦 Установка зависимостей
|
||||||
bash
|
```bash
|
||||||
# Установка необходимых коллекций Ansible
|
# Установка необходимых коллекций Ansible
|
||||||
ansible-galaxy collection install community.docker
|
ansible-galaxy collection install community.docker
|
||||||
|
```
|
||||||
🚀 Основной плейбук: olimp-deploy.yml
|
🚀 Основной плейбук: olimp-deploy.yml
|
||||||
yaml
|
```yaml
|
||||||
---
|
---
|
||||||
- hosts: all
|
- hosts: all
|
||||||
roles:
|
roles:
|
||||||
@ -58,12 +95,14 @@ yaml
|
|||||||
- { role: docker, tags: deploy_docker }
|
- { role: docker, tags: deploy_docker }
|
||||||
- { role: mealie, tags: deploy_mealie }
|
- { role: mealie, tags: deploy_mealie }
|
||||||
- { role: bookstack, tags: deploy_bookstack }
|
- { role: bookstack, tags: deploy_bookstack }
|
||||||
|
```
|
||||||
🎮 Запуск плейбука
|
🎮 Запуск плейбука
|
||||||
Полное развертывание
|
Полное развертывание
|
||||||
bash
|
```bash
|
||||||
ansible-playbook -i inventories/hosts olimp-deploy.yml
|
ansible-playbook -i inventories/hosts olimp-deploy.yml
|
||||||
|
```
|
||||||
Выборочное развертывание по тегам
|
Выборочное развертывание по тегам
|
||||||
bash
|
```bash
|
||||||
# Базовая настройка всех хостов
|
# Базовая настройка всех хостов
|
||||||
ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_base
|
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_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_npm --limit gateway
|
||||||
ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_heimdall --limit gateway
|
ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_heimdall --limit gateway
|
||||||
|
```
|
||||||
🔧 Детальное описание ролей
|
🔧 Детальное описание ролей
|
||||||
Роль: base_setup
|
Роль: base_setup
|
||||||
Тег: deploy_base
|
Тег: deploy_base
|
||||||
@ -211,7 +251,7 @@ Web-интерфейс: http://data_ip:45131
|
|||||||
⚙️ Переменные конфигурации
|
⚙️ Переменные конфигурации
|
||||||
Файл group_vars/all.yml содержит все общие переменные:
|
Файл group_vars/all.yml содержит все общие переменные:
|
||||||
|
|
||||||
yaml
|
```yaml
|
||||||
# Общие настройки для всех хостов
|
# Общие настройки для всех хостов
|
||||||
timezone: Asia/Yekaterinburg
|
timezone: Asia/Yekaterinburg
|
||||||
system_locale: ru_RU.UTF-8
|
system_locale: ru_RU.UTF-8
|
||||||
@ -258,6 +298,7 @@ bookstack_db_dir: "/mnt/bookstack/db"
|
|||||||
bookstack_port: "45131"
|
bookstack_port: "45131"
|
||||||
bookstack_db_password: "secure_password_123"
|
bookstack_db_password: "secure_password_123"
|
||||||
bookstack_db_root_password: "secure_root_password_123"
|
bookstack_db_root_password: "secure_root_password_123"
|
||||||
|
```
|
||||||
🏛️ Архитектура решения
|
🏛️ Архитектура решения
|
||||||
Хост Gateway (192.168.1.221)
|
Хост Gateway (192.168.1.221)
|
||||||
Nginx Proxy Manager - порты 80, 443, 81
|
Nginx Proxy Manager - порты 80, 443, 81
|
||||||
@ -279,14 +320,15 @@ Bookstack - порт 45131
|
|||||||
|
|
||||||
📊 Мониторинг и логи
|
📊 Мониторинг и логи
|
||||||
Проверка статуса сервисов
|
Проверка статуса сервисов
|
||||||
bash
|
```bash
|
||||||
# На хосте gateway
|
# На хосте gateway
|
||||||
docker ps --filter name=npm --filter name=heimdall
|
docker ps --filter name=npm --filter name=heimdall
|
||||||
|
|
||||||
# На хосте data
|
# На хосте data
|
||||||
docker ps --filter name=mealie --filter name=bookstack
|
docker ps --filter name=mealie --filter name=bookstack
|
||||||
|
```
|
||||||
Просмотр логов
|
Просмотр логов
|
||||||
bash
|
```bash
|
||||||
# Просмотр логов конкретного сервиса
|
# Просмотр логов конкретного сервиса
|
||||||
docker logs mealie -f --tail 50
|
docker logs mealie -f --tail 50
|
||||||
docker logs bookstack-mnemo -f --tail 50
|
docker logs bookstack-mnemo -f --tail 50
|
||||||
@ -294,6 +336,7 @@ docker logs bookstack-mnemo -f --tail 50
|
|||||||
# Просмотр логов через docker compose
|
# Просмотр логов через docker compose
|
||||||
cd /mnt/mealie && docker compose logs
|
cd /mnt/mealie && docker compose logs
|
||||||
cd /mnt/bookstack && 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 mealie_backup_$(date +%Y%m%d).tar.gz /mnt/mealie/data
|
||||||
tar -czf bookstack_backup_$(date +%Y%m%d).tar.gz /mnt/bookstack
|
tar -czf bookstack_backup_$(date +%Y%m%d).tar.gz /mnt/bookstack
|
||||||
|
```
|
||||||
🔄 Обновление сервисов
|
🔄 Обновление сервисов
|
||||||
bash
|
```bash
|
||||||
# Обновление всех сервисов на хосте
|
# Обновление всех сервисов на хосте
|
||||||
cd /path/to/service
|
cd /path/to/service
|
||||||
docker compose pull
|
docker compose pull
|
||||||
@ -316,9 +360,10 @@ docker compose up -d
|
|||||||
|
|
||||||
# Или через Ansible
|
# Или через Ansible
|
||||||
ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_mealie,deploy_bookstack --limit data
|
ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_mealie,deploy_bookstack --limit data
|
||||||
|
```
|
||||||
🛠️ Устранение неисправностей
|
🛠️ Устранение неисправностей
|
||||||
Проверка подключения
|
Проверка подключения
|
||||||
bash
|
```bash
|
||||||
ansible -i inventories/hosts all -m ping
|
ansible -i inventories/hosts all -m ping
|
||||||
Проверка синтаксиса плейбука
|
Проверка синтаксиса плейбука
|
||||||
bash
|
bash
|
||||||
@ -329,6 +374,7 @@ ansible-playbook -i inventories/hosts olimp-deploy.yml --tags deploy_mealie -vvv
|
|||||||
Проверка переменных
|
Проверка переменных
|
||||||
bash
|
bash
|
||||||
ansible -i inventories/hosts all -m debug -a "var=hostvars[inventory_hostname]"
|
ansible -i inventories/hosts all -m debug -a "var=hostvars[inventory_hostname]"
|
||||||
|
```
|
||||||
🔒 Безопасность
|
🔒 Безопасность
|
||||||
Все пароли и чувствительные данные должны храниться в зашифрованном виде с помощью Ansible Vault
|
Все пароли и чувствительные данные должны храниться в зашифрованном виде с помощью Ansible Vault
|
||||||
|
|
||||||
@ -336,9 +382,10 @@ ansible -i inventories/hosts all -m debug -a "var=hostvars[inventory_hostname]"
|
|||||||
|
|
||||||
Настройте брандмауэр для ограничения доступа к портам
|
Настройте брандмауэр для ограничения доступа к портам
|
||||||
|
|
||||||
bash
|
```bash
|
||||||
# Использование Ansible Vault для шифрования секретов
|
# Использование Ansible Vault для шифрования секретов
|
||||||
ansible-vault encrypt group_vars/secrets.yml
|
ansible-vault encrypt group_vars/secrets.yml
|
||||||
|
```
|
||||||
🚀 Дополнительные возможности
|
🚀 Дополнительные возможности
|
||||||
Проект может быть расширен добавлением новых ролей для:
|
Проект может быть расширен добавлением новых ролей для:
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user