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

169 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Автоматический деплой на 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:
```ini
[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)
```bash
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
```
### 5. Клонируй репозиторий на сервер
```bash
cd /opt
sudo git clone https://gitea.your-domain.com/yourusername/delivery-tracker.git
sudo chown -R $USER:$USER delivery-tracker
```
### 6. Настрой переменные окружения
```bash
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 на сервере
```bash
docker login gitea.your-domain.com
# Введи username и токен/password
```
### 8. Первый запуск
```bash
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:
```bash
docker network connect delivery-tracker_delivery-network npm-app-1
```
Или используй IP адрес сервера (`172.17.0.1` или `host.docker.internal`) в поле Forward Hostname.
### 10. Проверь автоматическое обновление
Watchtower будет каждые 60 секунд проверять новые образы:
```bash
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 продолжает проксировать трафик на обновленные контейнеры
## Ручной деплой
```bash
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. Ничего делать не нужно.
## Траблшутинг
**Образы не обновляются:**
```bash
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`
**Контейнеры не запускаются:**
```bash
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`