Move data access to use-cases and IndexedDB repositories with optional remote fallback, changelog/sync ports, and encrypted local backup. Add production Docker Compose (nginx frontend + optional backend) and Apache host proxy configuration for deployment. Co-authored-by: Cursor <cursoragent@cursor.com>
92 lines
2.8 KiB
Markdown
92 lines
2.8 KiB
Markdown
# Production deploy (контейнеры + прокси на хосте)
|
||
|
||
Схема:
|
||
|
||
```text
|
||
[Прокси на хосте :80/:443]
|
||
→ frontend-контейнер (nginx :8080 на хосте)
|
||
→ backend-контейнер (gunicorn :8000, только при remote)
|
||
```
|
||
|
||
SPA-маршрутизация (`try_files` → `index.html`) выполняется **внутри** frontend-контейнера.
|
||
|
||
## 1. Подготовка
|
||
|
||
```bash
|
||
cd /opt/social-graph
|
||
cp deploy/.env.prod.example deploy/.env.prod
|
||
# отредактируйте deploy/.env.prod при необходимости
|
||
```
|
||
|
||
## 2. Local-first (только frontend)
|
||
|
||
Рекомендуется для конфиденциальности — данные в браузере (IndexedDB).
|
||
|
||
```bash
|
||
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod build frontend
|
||
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod up -d frontend
|
||
```
|
||
|
||
Проверка:
|
||
|
||
```bash
|
||
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/
|
||
# ожидается 200
|
||
```
|
||
|
||
## 3. Прокси на хосте
|
||
|
||
### Apache2
|
||
|
||
```bash
|
||
sudo a2enmod proxy proxy_http headers
|
||
sudo cp deploy/apache/social-graph.conf /etc/apache2/sites-available/social-graph.conf
|
||
# ServerName и порты (8080 / 8000) — по вашему .env.prod
|
||
sudo a2ensite social-graph.conf
|
||
sudo apache2ctl configtest
|
||
sudo systemctl reload apache2
|
||
```
|
||
|
||
### nginx на хосте
|
||
|
||
См. `deploy/proxy/nginx-host.conf.example`.
|
||
|
||
## 4. Remote mode (frontend + backend)
|
||
|
||
В `deploy/.env.prod`:
|
||
|
||
```env
|
||
VITE_DATA_MODE=remote
|
||
DJANGO_SECRET_KEY=...
|
||
ALLOWED_HOSTS=your-domain.com
|
||
```
|
||
|
||
Пересоберите frontend (режим зашивается при build) и поднимите оба сервиса:
|
||
|
||
```bash
|
||
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod build
|
||
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod up -d frontend
|
||
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod --profile with-backend up -d backend
|
||
```
|
||
|
||
В `deploy/apache/social-graph.conf` раскомментируйте блок `ProxyPass /api ...` **перед** `ProxyPass /`.
|
||
|
||
## 5. Обновление
|
||
|
||
```bash
|
||
git pull
|
||
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod build frontend
|
||
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod up -d frontend
|
||
# при remote — также build/up backend
|
||
sudo systemctl reload apache2 # или nginx -s reload
|
||
```
|
||
|
||
## Порты по умолчанию
|
||
|
||
| Сервис | Хост (loopback) | Внутри контейнера |
|
||
|----------|-----------------|-------------------|
|
||
| frontend | 127.0.0.1:8080 | nginx :80 |
|
||
| backend | 127.0.0.1:8000 | gunicorn :8000 |
|
||
|
||
Наружу открыт только прокси на хосте (80/443).
|