Files
social-graph/deploy/README.md
T
gitrusprusandCursor 2a32c61934 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>
2026-05-29 16:18:39 +03:00

137 lines
4.1 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.
# Production deploy (контейнеры + прокси на хосте)
## Схема
```text
[Прокси на хосте :80/:443]
→ frontend-контейнер (nginx, 127.0.0.1:8080)
→ backend-контейнер (gunicorn, 127.0.0.1:8000 — только при remote)
```
SPA-маршрутизация (`try_files``index.html`) — **внутри** frontend-контейнера (`frontend/nginx.conf`).
## 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` в git не коммитится (секреты и локальные порты).
## 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 up -d --build 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` и при необходимости порты (`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`:
```env
VITE_DATA_MODE=remote
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 --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 /`.
```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 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
```
## Порты по умолчанию
| Переменная | Значение | Назначение |
|------------|----------|------------|
| `FRONTEND_PORT` | 8080 | nginx в контейнере `sg_frontend` |
| `BACKEND_PORT` | 8000 | gunicorn в контейнере `sg_backend` |
| `FRONTEND_BIND` | 127.0.0.1 | только loopback на хосте |
Наружу открыт только прокси (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-запуском.