191 lines
5.8 KiB
Markdown
191 lines
5.8 KiB
Markdown
# CI/CD Infrastructure for MikroTik Telegram Bot
|
||
|
||
Полноценная CI/CD инфраструктура на базе Proxmox для автоматического развертывания MikroTik Telegram Bot.
|
||
|
||
## 🏗️ Архитектура
|
||
|
||
```
|
||
Developer → Gitea → Actions → Registry → Watchtower → Production
|
||
```
|
||
|
||
### Компоненты:
|
||
- **Git Server (10.10.0.10)**: Gitea + PostgreSQL + Actions Runner
|
||
- **Registry (10.10.0.20)**: Docker Registry + UI + Watchtower
|
||
- **Production (10.10.0.30)**: Portainer + MikroTik Bot + Watchtower
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### 1. Развертывание инфраструктуры
|
||
```bash
|
||
cd infra/
|
||
chmod +x *.sh
|
||
./deploy-all.sh
|
||
```
|
||
|
||
### 2. Первичная настройка
|
||
|
||
#### Gitea (http://10.10.0.10:3000)
|
||
1. Создать админ аккаунт
|
||
2. Создать репозиторий `mikrotik-bot`
|
||
3. Получить Actions runner token:
|
||
- Site Administration → Actions → Runners
|
||
- Generate token
|
||
4. Обновить токен в контейнере:
|
||
```bash
|
||
pct exec 100 -- bash -c "cd /opt/gitea && echo 'RUNNER_TOKEN=your_token' > .env"
|
||
pct exec 100 -- docker-compose restart runner
|
||
```
|
||
|
||
#### Portainer (http://10.10.0.30:9000)
|
||
1. Создать админ аккаунт
|
||
2. Настроить webhook для автодеплоя
|
||
3. Обновить bot.env с реальными данными
|
||
|
||
### 3. Настройка проекта
|
||
```bash
|
||
git clone http://10.10.0.10:3000/your-user/mikrotik-bot.git
|
||
cd mikrotik-bot
|
||
cp -r .gitea/ ./ # скопировать workflow файлы
|
||
git add .
|
||
git commit -m "Add CI/CD pipeline"
|
||
git push origin main
|
||
```
|
||
|
||
## 📁 Структура файлов
|
||
|
||
```
|
||
infra/
|
||
├── setup-lxc.sh # Создание LXC контейнеров
|
||
├── deploy-all.sh # Полное развертывание
|
||
├── gitea-compose.yml # Git сервер
|
||
├── registry-compose.yml # Docker Registry
|
||
├── production-compose.yml # Production окружение
|
||
└── README.md # Эта инструкция
|
||
.gitea/workflows/
|
||
└── deploy.yml # CI/CD pipeline
|
||
```
|
||
|
||
## 🔄 Workflow процесс
|
||
|
||
1. **Push** в main ветку
|
||
2. **Gitea Actions** запускает pipeline
|
||
3. **Build** Docker образа
|
||
4. **Push** в private registry
|
||
5. **Watchtower** обнаруживает новый образ
|
||
6. **Auto-deploy** в production
|
||
|
||
## 🛠️ Ручное управление
|
||
|
||
### Просмотр логов
|
||
```bash
|
||
# Gitea logs
|
||
pct exec 100 -- docker logs gitea
|
||
|
||
# Registry logs
|
||
pct exec 101 -- docker logs docker-registry
|
||
|
||
# Bot logs
|
||
pct exec 102 -- docker logs mikrotik-telegram-bot
|
||
```
|
||
|
||
### Перезапуск сервисов
|
||
```bash
|
||
# Restart Git server
|
||
pct exec 100 -- bash -c "cd /opt/gitea && docker-compose restart"
|
||
|
||
# Restart Registry
|
||
pct exec 101 -- bash -c "cd /opt/registry && docker-compose restart"
|
||
|
||
# Restart Production
|
||
pct exec 102 -- bash -c "cd /opt/production && docker-compose restart"
|
||
```
|
||
|
||
### Обновление конфигурации бота
|
||
```bash
|
||
pct exec 102 -- nano /opt/production/bot.env
|
||
pct exec 102 -- bash -c "cd /opt/production && docker-compose restart mikrotik-bot"
|
||
```
|
||
|
||
## 🔍 Мониторинг
|
||
|
||
### Проверка статуса
|
||
- Git Server: http://10.10.0.10:3000
|
||
- Registry UI: http://10.10.0.20:5001
|
||
- Portainer: http://10.10.0.30:9000
|
||
- Bot Health: http://10.10.0.30:8000/health
|
||
|
||
### Health checks
|
||
```bash
|
||
curl http://10.10.0.10:3000/api/v1/version
|
||
curl http://10.10.0.20:5000/v2/_catalog
|
||
curl http://10.10.0.30:9000/api/status
|
||
curl http://10.10.0.30:8000/health
|
||
```
|
||
|
||
## 🔧 Troubleshooting
|
||
|
||
### Проблемы с registry
|
||
```bash
|
||
# Проверить конфигурацию insecure registry
|
||
pct exec 101 -- cat /etc/docker/daemon.json
|
||
pct exec 102 -- cat /etc/docker/daemon.json
|
||
|
||
# Перезапуск Docker
|
||
pct exec 101 -- systemctl restart docker
|
||
pct exec 102 -- systemctl restart docker
|
||
```
|
||
|
||
### Проблемы с Actions Runner
|
||
```bash
|
||
# Проверить статус runner
|
||
pct exec 100 -- docker logs gitea-runner
|
||
|
||
# Перегенерировать токен в Gitea UI
|
||
# Обновить .env файл
|
||
pct exec 100 -- bash -c "cd /opt/gitea && docker-compose restart runner"
|
||
```
|
||
|
||
### Проблемы с автодеплоем
|
||
```bash
|
||
# Проверить Watchtower logs
|
||
pct exec 102 -- docker logs watchtower-production
|
||
|
||
# Ручной pull и restart
|
||
pct exec 102 -- bash -c "cd /opt/production && docker-compose pull mikrotik-bot && docker-compose up -d mikrotik-bot"
|
||
```
|
||
|
||
## 🔒 Безопасность
|
||
|
||
- Все сервисы работают в изолированной сети 10.10.0.0/24
|
||
- Registry настроен как insecure только для локальной сети
|
||
- Рекомендуется настроить VPN для внешнего доступа
|
||
- Регулярные снапшоты контейнеров в Proxmox
|
||
|
||
## 📈 Расширения
|
||
|
||
### Добавление HTTPS
|
||
1. Получить SSL сертификаты
|
||
2. Настроить Nginx reverse proxy
|
||
3. Обновить конфигурации сервисов
|
||
|
||
### Мониторинг с Prometheus/Grafana
|
||
1. Добавить в registry-compose.yml:
|
||
```yaml
|
||
prometheus:
|
||
image: prom/prometheus
|
||
grafana:
|
||
image: grafana/grafana
|
||
```
|
||
|
||
### Backup стратегия
|
||
1. Автоматические снапшоты LXC
|
||
2. Backup Docker volumes
|
||
3. Export Gitea repositories
|
||
|
||
## 🆘 Поддержка
|
||
|
||
При проблемах:
|
||
1. Проверить статус всех контейнеров
|
||
2. Просмотреть логи соответствующих сервисов
|
||
3. Убедиться в корректности сетевых настроек
|
||
4. Проверить доступность портов и DNS записей |