Веб-приложение для обмена сообщениями в реальном времени с поддержкой 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+
- Клонируйте репозиторий:
git clone <repository-url>
cd MIREA_Py_Courcer_paper- Создайте файл
.envна основе примера:
copy .env.example .env- Настройте переменные окружения в
.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- Запустите приложение:
docker-compose up --build- Доступ к сервисам:
- Приложение: http://localhost
- API: http://localhost:8000
- API документация: http://localhost:8000/docs
- Prometheus: http://localhost:9090
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 8000Frontend:
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 |
Windows PowerShell:
python -c "import secrets; print(secrets.token_hex(32))"Linux/macOS:
openssl rand -hex 32Отредактируйте .env для изменения портов:
NGINX_PORT=8080
PROMETHEUS_PORT=9091Отредактируйте frontend/js/config.js:
const CONFIG = {
API_URL: 'https://your-domain.com',
WS_URL: 'wss://your-domain.com/ws',
};После запуска приложения автоматически сгенерированная документация доступна по адресу:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
Запуск в фоновом режиме:
docker-compose up -dОстановка:
docker-compose downПросмотр логов:
docker-compose logs
docker-compose logs backendПерезапуск сервиса:
docker-compose restart nginxПересборка:
docker-compose up --build- Используйте надежные пароли для
POSTGRES_PASSWORDиSECRET_KEY - Настройте HTTPS/WSS вместо HTTP/WS
- Ограничьте доступ к портам через firewall
- Регулярно обновляйте зависимости
- Настройте резервное копирование базы данных
- Используйте переменные окружения для конфиденциальных данных
Измените порты в .env файле.
Проверьте переменные в .env и убедитесь, что контейнер БД запущен:
docker-compose ps db
docker-compose logs dbПроверьте статус backend:
docker-compose ps backend
docker-compose logs backendОткройте консоль разработчика (F12) и проверьте вкладки Console и Network.
┌─────────────┐
│ Nginx │ (Reverse Proxy)
└──────┬──────┘
│
┌──────▼──────┐
│ Frontend │ (HTML/CSS/JS)
└──────┬──────┘
│
┌──────▼──────┐
│ Backend │ (FastAPI + WebSocket)
└──┬────┬─────┘
│ │
│ └──────┐
│ │
┌──▼─────┐ ┌──▼─────┐
│Postgres│ │ Redis │
└────────┘ └────────┘