Skip to content

Курсовая работа по предмету "Проектирование и разработка серверной части инернет ресурсов" по теме "Серверная часть системы кросс-игровых чатов", реализовано на Python.

License

Notifications You must be signed in to change notification settings

notfani/MIREA_Backend_Courer_paper_py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Messenger Application

Веб-приложение для обмена сообщениями в реальном времени с поддержкой WebSocket, построенное на FastAPI и PostgreSQL.

Описание

Приложение представляет собой полнофункциональный мессенджер с возможностью создания чатов, обмена сообщениями в реальном времени и управления участниками. Включает мониторинг через Prometheus и кэширование через Redis.

Технологический стек

Backend:

  • FastAPI
  • PostgreSQL
  • Redis
  • WebSocket
  • SQLAlchemy

Frontend:

  • Vanilla JavaScript
  • HTML5/CSS3
  • WebSocket API

Инфраструктура:

  • Docker & Docker Compose
  • Nginx
  • Prometheus

Требования

  • Docker 20.10+
  • Docker Compose 1.29+

Либо для локальной разработки:

  • Python 3.9+
  • PostgreSQL 13+
  • Redis 6+

Установка и запуск

Использование Docker Compose

  1. Клонируйте репозиторий:
git clone <repository-url>
cd MIREA_Py_Courcer_paper
  1. Создайте файл .env на основе примера:
copy .env.example .env
  1. Настройте переменные окружения в .env:
POSTGRES_USER=postgres
POSTGRES_PASSWORD=<your_secure_password>
POSTGRES_DB=messenger
DATABASE_URL=postgresql://postgres:<your_password>@db:5432/messenger

REDIS_URL=redis://redis:6379

SECRET_KEY=<generate_secure_key>
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30

NGINX_PORT=80
PROMETHEUS_PORT=9090
  1. Запустите приложение:
docker-compose up --build
  1. Доступ к сервисам:

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

Backend:

cd backend
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
uvicorn main:app --reload --host 0.0.0.0 --port 8000

Frontend:

cd frontend
python -m http.server 3000

Конфигурация

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

Переменная Описание Значение по умолчанию
POSTGRES_USER Имя пользователя PostgreSQL postgres
POSTGRES_PASSWORD Пароль PostgreSQL -
POSTGRES_DB Название базы данных messenger
DATABASE_URL URL подключения к БД -
REDIS_URL URL подключения к Redis redis://redis:6379
SECRET_KEY Секретный ключ для JWT -
ALGORITHM Алгоритм шифрования HS256
ACCESS_TOKEN_EXPIRE_MINUTES Время жизни токена 30

Генерация SECRET_KEY

Windows PowerShell:

python -c "import secrets; print(secrets.token_hex(32))"

Linux/macOS:

openssl rand -hex 32

Настройка портов

Отредактируйте .env для изменения портов:

NGINX_PORT=8080
PROMETHEUS_PORT=9091

Настройка API URL для продакшена

Отредактируйте frontend/js/config.js:

const CONFIG = {
    API_URL: 'https://your-domain.com',
    WS_URL: 'wss://your-domain.com/ws',
};

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

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

Управление Docker контейнерами

Запуск в фоновом режиме:

docker-compose up -d

Остановка:

docker-compose down

Просмотр логов:

docker-compose logs
docker-compose logs backend

Перезапуск сервиса:

docker-compose restart nginx

Пересборка:

docker-compose up --build

Безопасность

Рекомендации для продакшена

  1. Используйте надежные пароли для POSTGRES_PASSWORD и SECRET_KEY
  2. Настройте HTTPS/WSS вместо HTTP/WS
  3. Ограничьте доступ к портам через firewall
  4. Регулярно обновляйте зависимости
  5. Настройте резервное копирование базы данных
  6. Используйте переменные окружения для конфиденциальных данных

Диагностика проблем

Порт занят

Измените порты в .env файле.

Ошибка подключения к базе данных

Проверьте переменные в .env и убедитесь, что контейнер БД запущен:

docker-compose ps db
docker-compose logs db

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

Проверьте статус backend:

docker-compose ps backend
docker-compose logs backend

Отладка фронтенда

Откройте консоль разработчика (F12) и проверьте вкладки Console и Network.

Архитектура

┌─────────────┐
│   Nginx     │ (Reverse Proxy)
└──────┬──────┘
       │
┌──────▼──────┐
│  Frontend   │ (HTML/CSS/JS)
└──────┬──────┘
       │
┌──────▼──────┐
│  Backend    │ (FastAPI + WebSocket)
└──┬────┬─────┘
   │    │
   │    └──────┐
   │           │
┌──▼─────┐ ┌──▼─────┐
│Postgres│ │ Redis  │
└────────┘ └────────┘

Лицензия

MIT Licence

Контакты

email

About

Курсовая работа по предмету "Проектирование и разработка серверной части инернет ресурсов" по теме "Серверная часть системы кросс-игровых чатов", реализовано на Python.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors