Files
delivery-tracker/DEPLOY.md
Egor Pozharov 11122c7919
Some checks failed
Build and Push Docker Images / build-backend (push) Has been cancelled
Build and Push Docker Images / build-frontend (push) Has been cancelled
update docker-compose.yml and makefile
2026-04-16 23:19:54 +06:00

5.7 KiB
Raw Permalink Blame History

Автоматический деплой на 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

Как работает автодеплой

  1. git push в main/master
  2. Gitea Actions собирает образы → push в Registry
  3. Watchtower (60s poll) → проверяет registry → pull новых образов → перезапускает контейнеры
  4. 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