5.7 KiB
Автоматический деплой на LXC + Docker + Nginx Proxy Manager
Схема работы
[Git Push] → [Gitea Actions] → [Build Images] → [Gitea Registry]
↓
[LXC Server] ← [Watchtower] ← [Poll every 60s]
↓
[Nginx Proxy Manager] → [HTTPS] → [frontend:80]
↓
/api/* → [backend:8080] (внутри сети)
Пошаговая настройка
1. Настройка Gitea
В конфиге Gitea (app.ini) включи registry:
[packages]
ENABLED = true
Перезапусти Gitea.
2. Обнови workflow файл
Открой .gitea/workflows/deploy.yml и замени:
gitea.your-domain.com→ на твой домен Gitea- Убедись что путь
${{ gitea.repository_owner }}/delivery-trackerкорректен
3. Создай токен в Gitea
- Gitea → Settings → Applications → Generate Token
- Сохрани токен (понадобится для Watchtower)
4. Настройка LXC сервера (если еще не настроен Docker)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
5. Клонируй репозиторий на сервер
cd /opt
sudo git clone https://gitea.your-domain.com/yourusername/delivery-tracker.git
sudo chown -R $USER:$USER delivery-tracker
6. Настрой переменные окружения
cd delivery-tracker
cp .env.production.example .env
nano .env
Заполни:
- Пароли для PostgreSQL
- JWT секрет:
openssl rand -hex 32 - Gitea credentials для Watchtower
GITEA_REGISTRY— твой registry (например:gitea.example.com/yourusername)
7. Логин в Gitea Registry на сервере
docker login gitea.your-domain.com
# Введи username и токен/password
8. Первый запуск
docker-compose -f docker-compose.prod.yml pull
docker-compose -f docker-compose.prod.yml up -d
9. Настройка Nginx Proxy Manager
Открой веб-интерфейс NPM (обычно http://server-ip:81 или через твой домен).
Добавь Proxy Host для приложения:
- Domain Names:
delivery.yourdomain.com(замени на свой поддомен) - Scheme:
http - Forward Hostname/IP:
frontend(имя сервиса в docker-compose) - Forward Port:
80 - Cache Assets: Включи
- Block Common Exploits: Включи
SSL Tab:
- SSL Certificate: Request a new SSL Certificate
- Force SSL: Включи
- HTTP/2 Support: Включи
Как это работает:
- NPM проксирует все запросы на frontend контейнер
- Frontend nginx сам проксирует
/api/*запросы на backend через docker network - Backend вообще не доступен извне — только через frontend
Важно: Контейнеры используют expose порты (не ports). NPM достучится до frontend через docker network если NPM в той же сети, или по IP сервера.
Подключение NPM к сети контейнеров:
Если NPM запущен в другом compose, подключи его к сети delivery-tracker:
docker network connect delivery-tracker_delivery-network npm-app-1
Или используй IP адрес сервера (172.17.0.1 или host.docker.internal) в поле Forward Hostname.
10. Проверь автоматическое обновление
Watchtower будет каждые 60 секунд проверять новые образы:
docker-compose -f docker-compose.prod.yml logs -f watchtower
Как работает автодеплой
git pushв main/master- Gitea Actions собирает образы → push в Registry
- Watchtower (60s poll) → проверяет registry → pull новых образов → перезапускает контейнеры
- NPM продолжает проксировать трафик на обновленные контейнеры
Ручной деплой
cd /opt/delivery-tracker
docker-compose -f docker-compose.prod.yml pull
docker-compose -f docker-compose.prod.yml up -d
Обновление SSL через NPM
NPM автоматически обновляет SSL сертификаты Let's Encrypt. Ничего делать не нужно.
Траблшутинг
Образы не обновляются:
docker-compose -f docker-compose.prod.yml logs watchtower
docker login gitea.your-domain.com
NPM не видит контейнеры:
- Проверь что NPM и delivery-tracker в одной docker-сети
- Или используй IP сервера вместо имен сервисов
- Проверь
docker network lsиdocker network inspect delivery-tracker_delivery-network
Контейнеры не запускаются:
docker-compose -f docker-compose.prod.yml logs backend
docker-compose -f docker-compose.prod.yml logs frontend
docker-compose -f docker-compose.prod.yml logs postgres
Frontend не подключается к backend:
- Проверь что frontend nginx проксирует
/api/наbackend:8080 - Проверь логи frontend:
docker-compose -f docker-compose.prod.yml logs frontend - Убедись что backend работает:
docker-compose -f docker-compose.prod.yml logs backend