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. Развертывание инфраструктуры
cd infra/
chmod +x *.sh
./deploy-all.sh
2. Первичная настройка
Gitea (http://10.10.0.10:3000)
- Создать админ аккаунт
- Создать репозиторий
mikrotik-bot - Получить Actions runner token:
- Site Administration → Actions → Runners
- Generate token
- Обновить токен в контейнере:
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)
- Создать админ аккаунт
- Настроить webhook для автодеплоя
- Обновить bot.env с реальными данными
3. Настройка проекта
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 процесс
- Push в main ветку
- Gitea Actions запускает pipeline
- Build Docker образа
- Push в private registry
- Watchtower обнаруживает новый образ
- Auto-deploy в production
🛠️ Ручное управление
Просмотр логов
# 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
Перезапуск сервисов
# 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"
Обновление конфигурации бота
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
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
# Проверить конфигурацию 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
# Проверить статус runner
pct exec 100 -- docker logs gitea-runner
# Перегенерировать токен в Gitea UI
# Обновить .env файл
pct exec 100 -- bash -c "cd /opt/gitea && docker-compose restart runner"
Проблемы с автодеплоем
# Проверить 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
- Получить SSL сертификаты
- Настроить Nginx reverse proxy
- Обновить конфигурации сервисов
Мониторинг с Prometheus/Grafana
- Добавить в registry-compose.yml:
prometheus: image: prom/prometheus grafana: image: grafana/grafana
Backup стратегия
- Автоматические снапшоты LXC
- Backup Docker volumes
- Export Gitea repositories
🆘 Поддержка
При проблемах:
- Проверить статус всех контейнеров
- Просмотреть логи соответствующих сервисов
- Убедиться в корректности сетевых настроек
- Проверить доступность портов и DNS записей