Add ansible/webserver-automation/ansible.md
This commit is contained in:
781
ansible/webserver-automation/ansible.md
Normal file
781
ansible/webserver-automation/ansible.md
Normal file
@@ -0,0 +1,781 @@
|
||||
# 📘 Ansible Web Server Automation - Полная Инструкция
|
||||
|
||||
## 🎯 Содержание
|
||||
|
||||
1. [Требования](#требования)
|
||||
2. [Установка Ansible](#установка-ansible)
|
||||
3. [Настройка SSH](#настройка-ssh)
|
||||
4. [Клонирование проекта](#клонирование-проекта)
|
||||
5. [Настройка inventory](#настройка-inventory)
|
||||
6. [Настройка переменных](#настройка-переменных)
|
||||
7. [Тестирование подключения](#тестирование-подключения)
|
||||
8. [Запуск playbook](#запуск-playbook)
|
||||
9. [Проверка результата](#проверка-результата)
|
||||
10. [Деплой приложения](#деплой-приложения)
|
||||
11. [Troubleshooting](#troubleshooting)
|
||||
|
||||
---
|
||||
|
||||
## 1. Требования
|
||||
|
||||
### Управляющая машина (ваш компьютер)
|
||||
- Ubuntu 20.04+ / Debian 11+ / macOS / Windows WSL2
|
||||
- Python 3.6+
|
||||
- Git
|
||||
- SSH client
|
||||
|
||||
### Целевые серверы
|
||||
- Ubuntu 20.04 / 22.04 (рекомендуется)
|
||||
- Debian 10 / 11
|
||||
- Минимум 1GB RAM, 10GB диск
|
||||
- SSH доступ
|
||||
- Sudo права
|
||||
|
||||
---
|
||||
|
||||
## 2. Установка Ansible
|
||||
|
||||
### Ubuntu / Debian
|
||||
|
||||
```bash
|
||||
# Обновить систему
|
||||
sudo apt update
|
||||
sudo apt upgrade -y
|
||||
|
||||
# Установить зависимости
|
||||
sudo apt install -y software-properties-common
|
||||
|
||||
# Добавить PPA репозиторий Ansible (опционально, для последней версии)
|
||||
sudo add-apt-repository --yes --update ppa:ansible/ansible
|
||||
|
||||
# Установить Ansible
|
||||
sudo apt install -y ansible
|
||||
|
||||
# Проверить установку
|
||||
ansible --version
|
||||
```
|
||||
|
||||
Должно показать:
|
||||
```
|
||||
ansible [core 2.14.x]
|
||||
python version = 3.x.x
|
||||
jinja version = 3.x.x
|
||||
```
|
||||
|
||||
### macOS
|
||||
|
||||
```bash
|
||||
# Установить Homebrew (если нет)
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
|
||||
# Установить Ansible
|
||||
brew install ansible
|
||||
|
||||
# Проверить
|
||||
ansible --version
|
||||
```
|
||||
|
||||
### Windows WSL2
|
||||
|
||||
```bash
|
||||
# Открыть Ubuntu в WSL2
|
||||
wsl
|
||||
|
||||
# Следовать инструкциям для Ubuntu выше
|
||||
sudo apt update
|
||||
sudo apt install -y ansible
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Настройка SSH
|
||||
|
||||
### 3.1 Генерация SSH ключа
|
||||
|
||||
На управляющей машине:
|
||||
|
||||
```bash
|
||||
# Генерировать SSH ключ (если нет)
|
||||
ssh-keygen -t ed25519 -C "your_email@example.com"
|
||||
|
||||
# Или RSA (более совместимый)
|
||||
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
|
||||
|
||||
# Нажать Enter для defaults
|
||||
# Ключи сохранятся в ~/.ssh/id_ed25519 (или id_rsa)
|
||||
```
|
||||
|
||||
### 3.2 Копирование ключа на сервер
|
||||
|
||||
```bash
|
||||
# Скопировать ключ на целевой сервер
|
||||
ssh-copy-id ubuntu@192.168.1.10
|
||||
|
||||
# Или вручную
|
||||
cat ~/.ssh/id_ed25519.pub | ssh ubuntu@192.168.1.10 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
|
||||
```
|
||||
|
||||
### 3.3 Тест SSH подключения
|
||||
|
||||
```bash
|
||||
# Подключиться без пароля
|
||||
ssh ubuntu@192.168.1.10
|
||||
|
||||
# Если успешно - можно продолжать!
|
||||
exit
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Клонирование проекта
|
||||
|
||||
```bash
|
||||
# Клонировать репозиторий
|
||||
git clone http://git.thedevops.dev/admin/k3s-gitops.git
|
||||
|
||||
# Перейти в директорию проекта
|
||||
cd k3s-gitops/ansible/webserver-automation
|
||||
|
||||
# Проверить структуру
|
||||
tree
|
||||
```
|
||||
|
||||
Должна быть структура:
|
||||
```
|
||||
ansible/webserver-automation/
|
||||
├── README.md
|
||||
├── ansible.cfg
|
||||
├── inventory/
|
||||
│ └── production
|
||||
├── group_vars/
|
||||
│ ├── all.yml
|
||||
│ └── webservers.yml
|
||||
├── playbooks/
|
||||
│ ├── site.yml
|
||||
│ └── deploy.yml
|
||||
└── roles/
|
||||
├── common/
|
||||
├── nginx/
|
||||
└── firewall/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Настройка Inventory
|
||||
|
||||
### 5.1 Редактировать production inventory
|
||||
|
||||
```bash
|
||||
# Открыть файл
|
||||
vim inventory/production
|
||||
```
|
||||
|
||||
### 5.2 Заменить на свои данные
|
||||
|
||||
```ini
|
||||
# Production Inventory
|
||||
# Замените IP адреса на свои!
|
||||
|
||||
[webservers]
|
||||
web1.example.com ansible_host=192.168.1.10
|
||||
web2.example.com ansible_host=192.168.1.11
|
||||
|
||||
[all:vars]
|
||||
ansible_user=ubuntu # Ваш SSH пользователь
|
||||
ansible_ssh_private_key_file=~/.ssh/id_rsa # Путь к SSH ключу
|
||||
ansible_python_interpreter=/usr/bin/python3
|
||||
environment=production
|
||||
```
|
||||
|
||||
### 5.3 Простой пример (один сервер)
|
||||
|
||||
```ini
|
||||
[webservers]
|
||||
web1 ansible_host=192.168.1.10
|
||||
|
||||
[all:vars]
|
||||
ansible_user=ubuntu
|
||||
ansible_ssh_private_key_file=~/.ssh/id_ed25519
|
||||
environment=production
|
||||
```
|
||||
|
||||
### 5.4 Для Vagrant / локального тестирования
|
||||
|
||||
```ini
|
||||
[webservers]
|
||||
localhost ansible_connection=local
|
||||
|
||||
[all:vars]
|
||||
ansible_user=vagrant
|
||||
environment=development
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Настройка переменных
|
||||
|
||||
### 6.1 Общие переменные
|
||||
|
||||
```bash
|
||||
# Открыть файл
|
||||
vim group_vars/all.yml
|
||||
```
|
||||
|
||||
Настройте базовые параметры:
|
||||
|
||||
```yaml
|
||||
---
|
||||
# Система
|
||||
timezone: "Europe/Vilnius" # Ваш timezone
|
||||
|
||||
# Пользователи
|
||||
admin_users:
|
||||
- name: admin
|
||||
groups: sudo
|
||||
shell: /bin/bash
|
||||
- name: deploy
|
||||
groups: www-data
|
||||
shell: /bin/bash
|
||||
|
||||
# Пакеты
|
||||
common_packages:
|
||||
- curl
|
||||
- wget
|
||||
- git
|
||||
- vim
|
||||
- htop
|
||||
- ufw
|
||||
|
||||
# SSH
|
||||
ssh_port: 22
|
||||
ssh_password_authentication: false
|
||||
|
||||
# Firewall
|
||||
firewall_allowed_tcp_ports:
|
||||
- 22 # SSH
|
||||
- 80 # HTTP
|
||||
- 443 # HTTPS
|
||||
```
|
||||
|
||||
### 6.2 Переменные веб-сервера
|
||||
|
||||
```bash
|
||||
# Открыть файл
|
||||
vim group_vars/webservers.yml
|
||||
```
|
||||
|
||||
Настройте параметры приложения:
|
||||
|
||||
```yaml
|
||||
---
|
||||
# Nginx
|
||||
nginx_port: 80
|
||||
nginx_ssl_port: 443
|
||||
|
||||
# Приложение
|
||||
app_name: "myapp" # Имя вашего приложения
|
||||
app_user: "webapp"
|
||||
app_group: "www-data"
|
||||
app_dir: "/var/www/{{ app_name }}"
|
||||
|
||||
# Домен
|
||||
domain_name: "example.com" # Ваш домен
|
||||
server_name: "{{ inventory_hostname }}"
|
||||
|
||||
# SSL (отключить если нет сертификата)
|
||||
ssl_enabled: false
|
||||
|
||||
# Логи
|
||||
access_log: "/var/log/nginx/{{ app_name }}_access.log"
|
||||
error_log: "/var/log/nginx/{{ app_name }}_error.log"
|
||||
|
||||
# Performance
|
||||
client_max_body_size: "100M"
|
||||
gzip_enabled: true
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Тестирование подключения
|
||||
|
||||
### 7.1 Проверить синтаксис inventory
|
||||
|
||||
```bash
|
||||
ansible-inventory -i inventory/production --list
|
||||
```
|
||||
|
||||
### 7.2 Ping тест
|
||||
|
||||
```bash
|
||||
# Проверить подключение ко всем хостам
|
||||
ansible -i inventory/production all -m ping
|
||||
|
||||
# Ожидаемый результат:
|
||||
# web1 | SUCCESS => {
|
||||
# "changed": false,
|
||||
# "ping": "pong"
|
||||
# }
|
||||
```
|
||||
|
||||
### 7.3 Проверить доступ sudo
|
||||
|
||||
```bash
|
||||
ansible -i inventory/production all -m shell -a "whoami" --become
|
||||
```
|
||||
|
||||
Должно показать: `root`
|
||||
|
||||
### 7.4 Собрать факты о системе
|
||||
|
||||
```bash
|
||||
ansible -i inventory/production all -m setup
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Запуск Playbook
|
||||
|
||||
### 8.1 Синтаксис проверка
|
||||
|
||||
```bash
|
||||
# Проверить синтаксис playbook
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --syntax-check
|
||||
|
||||
# Должно показать:
|
||||
# playbook: playbooks/site.yml
|
||||
```
|
||||
|
||||
### 8.2 Dry Run (тест без изменений)
|
||||
|
||||
```bash
|
||||
# Запустить в режиме проверки
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --check
|
||||
|
||||
# Покажет что будет изменено, но не применит изменения
|
||||
```
|
||||
|
||||
### 8.3 Список задач
|
||||
|
||||
```bash
|
||||
# Посмотреть все задачи
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --list-tasks
|
||||
```
|
||||
|
||||
### 8.4 Полный запуск
|
||||
|
||||
```bash
|
||||
# Запустить полную установку
|
||||
ansible-playbook -i inventory/production playbooks/site.yml
|
||||
|
||||
# С verbose output (для отладки)
|
||||
ansible-playbook -i inventory/production playbooks/site.yml -v
|
||||
|
||||
# Очень подробный вывод
|
||||
ansible-playbook -i inventory/production playbooks/site.yml -vvv
|
||||
```
|
||||
|
||||
### 8.5 Ход выполнения
|
||||
|
||||
Вы увидите примерно такой вывод:
|
||||
|
||||
```
|
||||
PLAY [Setup all servers] *********************************************
|
||||
|
||||
TASK [Gathering Facts] ***********************************************
|
||||
ok: [web1]
|
||||
|
||||
TASK [Display deployment information] ********************************
|
||||
ok: [web1] => {
|
||||
"msg": "Deploying to: web1\nEnvironment: production\n..."
|
||||
}
|
||||
|
||||
PLAY [Configure common settings] *************************************
|
||||
|
||||
TASK [common : Update apt cache] *************************************
|
||||
changed: [web1]
|
||||
|
||||
TASK [common : Install common packages] ******************************
|
||||
changed: [web1]
|
||||
|
||||
...
|
||||
|
||||
PLAY RECAP ***********************************************************
|
||||
web1 : ok=25 changed=15 unreachable=0 failed=0
|
||||
```
|
||||
|
||||
### 8.6 Запуск конкретных тегов
|
||||
|
||||
```bash
|
||||
# Только обновить пакеты
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --tags packages
|
||||
|
||||
# Только настроить firewall
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --tags firewall
|
||||
|
||||
# Только nginx
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --tags nginx
|
||||
|
||||
# Несколько тегов
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --tags "packages,nginx"
|
||||
```
|
||||
|
||||
### 8.7 Ограничить выполнение на один хост
|
||||
|
||||
```bash
|
||||
# Только для web1
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --limit web1
|
||||
|
||||
# Для нескольких хостов
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --limit "web1,web2"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Проверка результата
|
||||
|
||||
### 9.1 Проверить веб-сервер
|
||||
|
||||
```bash
|
||||
# С управляющей машины
|
||||
curl http://192.168.1.10
|
||||
|
||||
# Должен вернуть HTML страницу
|
||||
```
|
||||
|
||||
### 9.2 Проверить в браузере
|
||||
|
||||
Открыть в браузере:
|
||||
```
|
||||
http://192.168.1.10
|
||||
```
|
||||
|
||||
Вы должны увидеть красивую страницу с:
|
||||
- 🚀 emoji
|
||||
- Название приложения
|
||||
- Environment: production
|
||||
- Server: web1
|
||||
- "Deployed with Ansible ✨"
|
||||
|
||||
### 9.3 Проверить health endpoint
|
||||
|
||||
```bash
|
||||
curl http://192.168.1.10/health
|
||||
|
||||
# Должен вернуть: healthy
|
||||
```
|
||||
|
||||
### 9.4 Проверить Nginx статус
|
||||
|
||||
```bash
|
||||
# На сервере
|
||||
ssh ubuntu@192.168.1.10
|
||||
sudo systemctl status nginx
|
||||
|
||||
# Должно показать: active (running)
|
||||
```
|
||||
|
||||
### 9.5 Проверить firewall
|
||||
|
||||
```bash
|
||||
# На сервере
|
||||
ssh ubuntu@192.168.1.10
|
||||
sudo ufw status
|
||||
|
||||
# Должно показать:
|
||||
# Status: active
|
||||
# To Action From
|
||||
# -- ------ ----
|
||||
# 22/tcp ALLOW Anywhere
|
||||
# 80/tcp ALLOW Anywhere
|
||||
# 443/tcp ALLOW Anywhere
|
||||
```
|
||||
|
||||
### 9.6 Проверить логи
|
||||
|
||||
```bash
|
||||
# На сервере
|
||||
ssh ubuntu@192.168.1.10
|
||||
|
||||
# Access logs
|
||||
sudo tail -f /var/log/nginx/myapp_access.log
|
||||
|
||||
# Error logs
|
||||
sudo tail -f /var/log/nginx/myapp_error.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. Деплой приложения
|
||||
|
||||
### 10.1 Базовый деплой
|
||||
|
||||
```bash
|
||||
# Задеплоить приложение
|
||||
ansible-playbook -i inventory/production playbooks/deploy.yml
|
||||
```
|
||||
|
||||
### 10.2 Деплой с версией
|
||||
|
||||
```bash
|
||||
# Указать версию
|
||||
ansible-playbook -i inventory/production playbooks/deploy.yml -e "app_version=v1.2.3"
|
||||
```
|
||||
|
||||
### 10.3 Что делает deploy playbook
|
||||
|
||||
1. ✅ Создаёт директорию приложения
|
||||
2. ✅ Деплоит HTML файл
|
||||
3. ✅ Перезапускает Nginx
|
||||
4. ✅ Проверяет доступность
|
||||
|
||||
### 10.4 Кастомизация HTML
|
||||
|
||||
Отредактируйте в playbook `playbooks/deploy.yml`:
|
||||
|
||||
```yaml
|
||||
- name: Deploy custom HTML
|
||||
copy:
|
||||
dest: "{{ app_dir }}/index.html"
|
||||
content: |
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>My Custom App</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Welcome to My App!</h1>
|
||||
<p>Version: {{ app_version }}</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. Troubleshooting
|
||||
|
||||
### Проблема 1: SSH connection failed
|
||||
|
||||
**Ошибка:**
|
||||
```
|
||||
fatal: [web1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host"}
|
||||
```
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Проверить SSH подключение вручную
|
||||
ssh ubuntu@192.168.1.10
|
||||
|
||||
# Проверить SSH ключ
|
||||
ssh-add -l
|
||||
|
||||
# Добавить ключ если нужно
|
||||
ssh-add ~/.ssh/id_rsa
|
||||
|
||||
# Проверить права на ключ
|
||||
chmod 600 ~/.ssh/id_rsa
|
||||
```
|
||||
|
||||
### Проблема 2: Permission denied (sudo)
|
||||
|
||||
**Ошибка:**
|
||||
```
|
||||
fatal: [web1]: FAILED! => {"msg": "Missing sudo password"}
|
||||
```
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Запустить с запросом sudo пароля
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --ask-become-pass
|
||||
|
||||
# Или добавить пользователя в sudoers без пароля
|
||||
ssh ubuntu@192.168.1.10
|
||||
sudo visudo
|
||||
|
||||
# Добавить строку:
|
||||
ubuntu ALL=(ALL) NOPASSWD:ALL
|
||||
```
|
||||
|
||||
### Проблема 3: Module not found
|
||||
|
||||
**Ошибка:**
|
||||
```
|
||||
ERROR! couldn't resolve module/action 'community.general.ufw'
|
||||
```
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Установить Ansible collections
|
||||
ansible-galaxy collection install community.general
|
||||
ansible-galaxy collection install ansible.posix
|
||||
```
|
||||
|
||||
### Проблема 4: Port 80 already in use
|
||||
|
||||
**Ошибка:**
|
||||
```
|
||||
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
|
||||
```
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Найти процесс на порту 80
|
||||
ssh ubuntu@192.168.1.10
|
||||
sudo lsof -i :80
|
||||
|
||||
# Остановить Apache если запущен
|
||||
sudo systemctl stop apache2
|
||||
sudo systemctl disable apache2
|
||||
|
||||
# Перезапустить Nginx
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
### Проблема 5: Syntax error in playbook
|
||||
|
||||
**Ошибка:**
|
||||
```
|
||||
ERROR! We were unable to read either as JSON nor YAML
|
||||
```
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Проверить YAML синтаксис
|
||||
yamllint playbooks/site.yml
|
||||
|
||||
# Или онлайн: http://www.yamllint.com/
|
||||
|
||||
# Проверить отступы (должны быть пробелы, не табы!)
|
||||
```
|
||||
|
||||
### Проблема 6: Firewall блокирует HTTP
|
||||
|
||||
**Ошибка:**
|
||||
```
|
||||
curl: (7) Failed to connect to 192.168.1.10 port 80: Connection refused
|
||||
```
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Проверить UFW
|
||||
ssh ubuntu@192.168.1.10
|
||||
sudo ufw status
|
||||
|
||||
# Добавить правило если нужно
|
||||
sudo ufw allow 80/tcp
|
||||
sudo ufw reload
|
||||
```
|
||||
|
||||
### Проблема 7: Slow playbook execution
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Включить pipelining в ansible.cfg
|
||||
echo "pipelining = True" >> ansible.cfg
|
||||
|
||||
# Отключить gathering facts если не нужны
|
||||
ansible-playbook playbooks/site.yml --skip-tags=facts
|
||||
|
||||
# Использовать Strategy plugin
|
||||
# В playbook добавить:
|
||||
strategy: free
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Дополнительные команды
|
||||
|
||||
### Полезные ad-hoc команды
|
||||
|
||||
```bash
|
||||
# Перезапустить Nginx на всех серверах
|
||||
ansible -i inventory/production webservers -m service -a "name=nginx state=restarted" --become
|
||||
|
||||
# Проверить uptime
|
||||
ansible -i inventory/production all -m shell -a "uptime"
|
||||
|
||||
# Проверить disk space
|
||||
ansible -i inventory/production all -m shell -a "df -h"
|
||||
|
||||
# Обновить пакеты
|
||||
ansible -i inventory/production all -m apt -a "update_cache=yes upgrade=dist" --become
|
||||
|
||||
# Скопировать файл на все серверы
|
||||
ansible -i inventory/production webservers -m copy -a "src=./file.txt dest=/tmp/file.txt"
|
||||
|
||||
# Получить информацию о процессе
|
||||
ansible -i inventory/production webservers -m shell -a "ps aux | grep nginx"
|
||||
```
|
||||
|
||||
### Ansible Vault (для секретов)
|
||||
|
||||
```bash
|
||||
# Создать зашифрованный файл
|
||||
ansible-vault create group_vars/production_secrets.yml
|
||||
|
||||
# Редактировать
|
||||
ansible-vault edit group_vars/production_secrets.yml
|
||||
|
||||
# Запустить playbook с vault
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --ask-vault-pass
|
||||
|
||||
# Или с файлом пароля
|
||||
echo "mypassword" > .vault_pass
|
||||
ansible-playbook -i inventory/production playbooks/site.yml --vault-password-file .vault_pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎓 Следующие шаги
|
||||
|
||||
### 1. Добавить мониторинг
|
||||
|
||||
- Prometheus
|
||||
- Grafana
|
||||
- Node Exporter
|
||||
|
||||
### 2. Добавить SSL сертификаты
|
||||
|
||||
- Let's Encrypt
|
||||
- Certbot automation
|
||||
|
||||
### 3. Добавить CI/CD
|
||||
|
||||
- Интеграция с Jenkins
|
||||
- GitLab CI
|
||||
- GitHub Actions
|
||||
|
||||
### 4. Масштабирование
|
||||
|
||||
- Добавить Load Balancer
|
||||
- Настроить Database servers
|
||||
- Redis/Memcached
|
||||
|
||||
---
|
||||
|
||||
## 📞 Поддержка
|
||||
|
||||
- **Документация:** http://git.thedevops.dev/admin/k3s-gitops/src/branch/main/ansible/webserver-automation
|
||||
- **Issues:** http://git.thedevops.dev/admin/k3s-gitops/issues
|
||||
- **Ansible Docs:** https://docs.ansible.com
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist успешной установки
|
||||
|
||||
- [ ] Ansible установлен (`ansible --version`)
|
||||
- [ ] SSH ключи настроены
|
||||
- [ ] Проект склонирован
|
||||
- [ ] Inventory настроен с реальными IP
|
||||
- [ ] Variables настроены (timezone, domain, etc)
|
||||
- [ ] SSH ping успешен (`ansible all -m ping`)
|
||||
- [ ] Playbook запущен (`ansible-playbook playbooks/site.yml`)
|
||||
- [ ] Сайт доступен (`curl http://SERVER_IP`)
|
||||
- [ ] Firewall работает (`sudo ufw status`)
|
||||
- [ ] Nginx работает (`systemctl status nginx`)
|
||||
- [ ] Deploy работает (`ansible-playbook playbooks/deploy.yml`)
|
||||
|
||||
---
|
||||
|
||||
**Версия:** 1.0.0
|
||||
**Дата:** 2026-01-06
|
||||
**Статус:** ✅ Production Ready
|
||||
Reference in New Issue
Block a user