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)

  1. Создать админ аккаунт
  2. Создать репозиторий mikrotik-bot
  3. Получить Actions runner token:
    • Site Administration → Actions → Runners
    • Generate token
  4. Обновить токен в контейнере:
    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. Настройка проекта

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

🛠️ Ручное управление

Просмотр логов

# 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"

🔍 Мониторинг

Проверка статуса

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

  1. Получить SSL сертификаты
  2. Настроить Nginx reverse proxy
  3. Обновить конфигурации сервисов

Мониторинг с Prometheus/Grafana

  1. Добавить в registry-compose.yml:
    prometheus:
      image: prom/prometheus
    grafana:
      image: grafana/grafana
    

Backup стратегия

  1. Автоматические снапшоты LXC
  2. Backup Docker volumes
  3. Export Gitea repositories

🆘 Поддержка

При проблемах:

  1. Проверить статус всех контейнеров
  2. Просмотреть логи соответствующих сервисов
  3. Убедиться в корректности сетевых настроек
  4. Проверить доступность портов и DNS записей