Files
news_all_spo/DEPLOY.md
2026-05-17 19:32:48 +05:00

5.2 KiB
Raw Permalink Blame History

Развёртывание news_flet

Требования

  • Docker & Docker Compose (20.10+)
  • Git
  • PostgreSQL 13+ (внешний сервер или локальный контейнер)
  • MinIO S3 (локальный в Docker или облачный)

Быстрый старт

1. Клонирование и подготовка

git clone <repo-url> news_flet
cd news_flet
cp .env.example .env

2. Редактирование .env

Заполнить критические переменные:

DATABASE_URL=postgresql+asyncpg://user:password@host:5432/news
JWT_SECRET=<генерируем на продакшене>
ADMIN_PASSWORD=<сильный пароль>
VK_SERVICE_TOKEN=<token из ВКонтакте>

3. Запуск контейнеров

docker compose build
docker compose up -d

Сервис поднимается на:

4. Первый запуск

При старте API:

  • Автоматически запускает Alembic миграции
  • Создаёт таблицы в БД (если нет)
  • Создаёт default админ юзера (если нет)

Логин админ-панели:

URL: http://localhost/admin/login
Username: admin
Password: <из .env ADMIN_PASSWORD>

Структура docker-compose

services:
  api:        # FastAPI + Alembic + VK-парсер
  web:        # React SPA + nginx
  minio:      # S3-совместимое хранилище (опционально)

Переменные окружения

Переменная Обязательна Описание
DATABASE_URL PostgreSQL + asyncpg подключение
JWT_SECRET Ключ для подписи JWT токенов
ADMIN_PASSWORD Пароль дефолт админа
VK_SERVICE_TOKEN Токен сервиса ВКонтакте
MINIO_ENDPOINT MinIO хост (default: minio:9000)
MINIO_PUBLIC_URL Публичный URL для доступа к файлам
LOG_LEVEL DEBUG/INFO/WARNING (default: INFO)

Архитектура

Frontend (web-react/)

  • React 18 + React Router
  • Admin панель: управление статьями, медиа, источниками ВК
  • Публичный фид с поиском по категориям и тегам
  • TipTap редактор с поддержкой видео, картинок, таблиц

Backend (api/)

  • FastAPI + SQLAlchemy async
  • VK-парсер: загрузка статей из групп/публичных страниц
  • yt-dlp: скачивание видео из ВК на MinIO
  • Slug-based медиа: организованное хранилище на S3
  • JWT auth + role-based access control

Storage (minio/)

  • S3-совместимое хранилище
  • Структура: articles/{slug}-{uuid}/images/
  • Публичный доступ к медиа через HTTP

Миграции БД

При запуске API проверяет и применяет миграции через Alembic:

# Ручно (внутри контейнера api):
docker compose exec api alembic upgrade head

Новая миграция при изменении схемы:

docker compose exec api alembic revision --autogenerate -m "description"

Мониторинг

Логи

docker compose logs -f api
docker compose logs -f web

API документация

Доступна по адресу /api/docs (требует auth)

Production рекомендации

  • 🔒 Установить SSL сертификат (Let's Encrypt)
  • 🔐 Сменить все default пароли и токены
  • 💾 Настроить резервное копирование БД
  • 📊 Включить мониторинг (Prometheus/Grafana)
  • 🛡️ Настроить firewall и rate limiting
  • 🌍 Использовать CDN для медиа-файлов

Решение проблем

БД не подключается

# Проверить подключение:
docker compose exec api python -c "import asyncio; from bd.database import engine; asyncio.run(engine.connect())"

MinIO не доступен

# Проверить health:
curl http://localhost:9000/minio/health/live

Миграции не применились

# Ручной запуск:
docker compose exec api alembic upgrade head

Развёртывание на сервере

  1. SSH на сервер
  2. git clone ...cd news_flet
  3. Скопировать и отредактировать .env
  4. docker compose up -d
  5. Проверить: curl http://localhost/

Если используется reverse proxy (nginx):

location / {
  proxy_pass http://localhost:80;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}