Update README files for local-first architecture and production deploy.

Document VITE_DATA_MODE, frontend layers, containerized deploy flow,
and refresh deploy guide with git clone, build flags, and troubleshooting.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-29 16:18:39 +03:00
co-authored by Cursor
parent 5e0af42fce
commit 2a32c61934
2 changed files with 169 additions and 86 deletions
+71 -26
View File
@@ -1,30 +1,40 @@
# Production deploy (контейнеры + прокси на хосте)
Схема:
## Схема
```text
[Прокси на хосте :80/:443]
→ frontend-контейнер (nginx :8080 на хосте)
→ backend-контейнер (gunicorn :8000, только при remote)
→ frontend-контейнер (nginx, 127.0.0.1:8080)
→ backend-контейнер (gunicorn, 127.0.0.1:8000 только при remote)
```
SPA-маршрутизация (`try_files``index.html`) выполняется **внутри** frontend-контейнера.
SPA-маршрутизация (`try_files``index.html`) **внутри** frontend-контейнера (`frontend/nginx.conf`).
## 1. Подготовка
## 1. Клонирование и подготовка
```bash
git clone <repo-url> /opt/social-graph
cd /opt/social-graph
git checkout main # или нужная ветка
cp deploy/.env.prod.example deploy/.env.prod
# отредактируйте deploy/.env.prod при необходимости
# отредактируйте deploy/.env.prod
```
## 2. Local-first (только frontend)
`deploy/.env.prod` в git не коммитится (секреты и локальные порты).
Рекомендуется для конфиденциальности — данные в браузере (IndexedDB).
## 2. Local-first (рекомендуется)
Данные пользователя — в браузере (IndexedDB). Backend на сервере **не поднимать**.
В `deploy/.env.prod`:
```env
VITE_DATA_MODE=local
```
```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
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod up -d --build frontend
```
Проверка:
@@ -41,51 +51,86 @@ curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/
```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
```
Отредактируйте `ServerName` и при необходимости порты (`FRONTEND_PORT` / `BACKEND_PORT` из `.env.prod`).
```bash
sudo a2ensite social-graph.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
```
HTTPS:
```bash
sudo certbot --apache -d your-domain.com
```
### nginx на хосте
См. `deploy/proxy/nginx-host.conf.example`.
## 4. Remote mode (frontend + backend)
В `deploy/.env.prod`:
Общая БД на сервере. В `deploy/.env.prod`:
```env
VITE_DATA_MODE=remote
DJANGO_SECRET_KEY=...
ALLOWED_HOSTS=your-domain.com
DJANGO_SECRET_KEY=длинный-случайный-ключ
ALLOWED_HOSTS=your-domain.com,www.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
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod up -d --build frontend
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod --profile with-backend up -d --build backend
```
В `deploy/apache/social-graph.conf` раскомментируйте блок `ProxyPass /api ...` **перед** `ProxyPass /`.
В `deploy/apache/social-graph.conf` раскомментируйте `ProxyPass /api ...` **выше** блока `ProxyPass /`.
```bash
sudo a2enmod proxy proxy_http headers
sudo systemctl reload apache2
```
## 5. Обновление
```bash
cd /opt/social-graph
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
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod up -d --build frontend
# при remote:
# docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod --profile with-backend up -d --build backend
sudo systemctl reload apache2 # или: sudo nginx -s reload
```
## Порты по умолчанию
| Сервис | Хост (loopback) | Внутри контейнера |
|----------|-----------------|-------------------|
| frontend | 127.0.0.1:8080 | nginx :80 |
| backend | 127.0.0.1:8000 | gunicorn :8000 |
| Переменная | Значение | Назначение |
|------------|----------|------------|
| `FRONTEND_PORT` | 8080 | nginx в контейнере `sg_frontend` |
| `BACKEND_PORT` | 8000 | gunicorn в контейнере `sg_backend` |
| `FRONTEND_BIND` | 127.0.0.1 | только loopback на хосте |
Наружу открыт только прокси на хосте (80/443).
Наружу открыт только прокси (80/443).
## Миграция данных
| Источник | Действие |
|----------|----------|
| CSV/JSON | UI → Импорт |
| Старый Django SQLite | экспорт JSON → Импорт |
| Локальный бэкап `.json` / `.sgpkg` | UI → «Импорт бэкапа» |
## Устранение неполадок
```bash
docker compose -f docker-compose.prod.yml ps
docker logs sg_frontend --tail 50
docker logs sg_backend --tail 50 # если поднят
```
Конфликт имени контейнера с dev: остановите `docker compose down` в том же каталоге перед prod-запуском.