Skip to content

finstape/meteostation-backend

Repository files navigation

FastAPI PostgreSQL Nginx Docker Alembic Telegram

Проект: Бэкенд для умной метеостанции

Серверная часть умной метеостанции — REST API на FastAPI с PostgreSQL, интеграцией с Telegram и визуализацией данных с устройств

Репозитории проекта

Архитектура

  • FastAPI — веб-сервер и REST API
  • PostgreSQL — база данных настроек и показаний
  • Alembic — миграции схемы
  • Telegram Bot (aiogram) — командами /start, /weather, /predict, /plot и т.д.
  • Docker Compose — контейнеризация и развёртывание
  • Nginx (reverse proxy) — SSL, домен и проксирование

Быстрый запуск через Docker

docker-compose up -d

Приложение будет доступно на http://localhost:8000, Swagger — /swagger

Локальная разработка

  1. Создать .env и установить переменные:
cp .env.example .env
  1. Включить локальную БД (толко для создания миграций):
USE_LOCAL_DB=1
  1. Установить зависимости:
poetry install
poetry shell
  1. Применить миграции:
make migrate
  1. Для создания новых миграций:
make revision

Полезные команды (локально)

make help          # Показать справку по командам
make env           # Создать .env на основе .env.example

make db            # Запустить сервер и базу через docker-compose
make run           # Запустить FastAPI-приложение локально
make open_db       # Зайти в контейнер с базой данных (psql)

make migrate       # Применить все миграции (alembic upgrade)
make revision      # Создать новую миграцию (autogenerate)
make upgrade       # Обновить БД до последней версии

make lint          # Проверить код через ruff
make format        # Отформатировать код (black + isort)

make clean         # Удалить временные и мусорные файлы

Настройка Nginx (с SSL + webhook)

✅ Для продакшн-развёртывания

  1. Установить SSL-сертификат (например, через Certbot: cert.pem и privkey.pem)
  2. Прописать telegram_webhook_url в таблице settings или в админке
  3. Добавить домен yourdomain.com в конфиг nginx и проксировать порт 8000:
location / {
    proxy_pass http://localhost:8000;
    include proxy_params;
}

Telegram Webhook

curl http://localhost:8000/api/v1/webhook/set

Команды:

  • /start — приветствие
  • /weather — текущая погода
  • /predict — прогноз температуры и осадков
  • /plot [часы] — график показаний (по умолчанию 6ч)
  • /settings [...] — обновление настроек через JSON
  • /backup — резервная копия базы данных

Swagger и OpenAPI

  • Swagger UI: http://localhost:8000/swagger
  • OpenAPI JSON: http://localhost:8000/openapi

Лицензия

Проект распространяется под лицензией Apache License 2.0.
Разрешено свободное использование и модификация в образовательных и исследовательских целях

About

Репозиторий с бэкенд сервером для метеостанции

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published