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>
4.1 KiB
Production deploy (контейнеры + прокси на хосте)
Схема
[Прокси на хосте :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. Клонирование и подготовка
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:
VITE_DATA_MODE=local
docker compose -f docker-compose.prod.yml --env-file deploy/.env.prod up -d --build frontend
Проверка:
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/
# ожидается 200
3. Прокси на хосте
Apache2
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).
sudo a2ensite social-graph.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
HTTPS:
sudo certbot --apache -d your-domain.com
nginx на хосте
См. deploy/proxy/nginx-host.conf.example.
4. Remote mode (frontend + backend)
Общая БД на сервере. В deploy/.env.prod:
VITE_DATA_MODE=remote
DJANGO_SECRET_KEY=длинный-случайный-ключ
ALLOWED_HOSTS=your-domain.com,www.your-domain.com
Пересоберите frontend (режим зашивается при build) и поднимите оба сервиса:
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 /.
sudo a2enmod proxy proxy_http headers
sudo systemctl reload apache2
5. Обновление
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 → «Импорт бэкапа» |
Устранение неполадок
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-запуском.