# 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).