update docker-compose.yml and makefile
This commit is contained in:
168
DEPLOY.md
Normal file
168
DEPLOY.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# Автоматический деплой на 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`
|
||||
Reference in New Issue
Block a user