5.2 KiB
5.2 KiB
Развёртывание 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
Сервис поднимается на:
- Frontend (React): http://localhost:80
- API: http://localhost/api/ (за nginx)
- MinIO: http://localhost:9000 (если локально)
- API Docs: http://localhost/api/docs
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
Развёртывание на сервере
- SSH на сервер
git clone ...→cd news_flet- Скопировать и отредактировать
.env docker compose up -d- Проверить:
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;
}