Учебный проект FastAPI-приложения для изучения Docker Compose.
Это простое веб-приложение на FastAPI, предназначенное для изучения контейнеризации и работы с Docker Compose. Приложение демонстрирует:
- Создание веб-сервиса на FastAPI
- Подключение к базе данных MySQL
- Работу с прокси-серверами (Nginx → HAProxy → FastAPI)
- Корректную настройку сетей Docker
- Передачу IP-адресов через заголовки прокси
При обращении к главной странице приложение:
- Определяет IP-адрес клиента
- Записывает время запроса и IP-адрес в базу данных MySQL
- Возвращает эту информацию пользователю
Важно для обучения: Если обращаться к приложению напрямую (минуя прокси), вы получите подсказку о неправильном выполнении задания.
Архитектура при запуске через Docker Compose:
Клиент → Nginx (8090) → HAProxy (8080) → FastAPI App (5000) → MySQL
# Создайте виртуальное окружение
python3 -m venv venv
source venv/bin/activate # в Windows: venv\Scripts\activate
# Установите зависимости
pip install -r requirements.txt
# Настройте переменные окружения для подключения к БД(не забудьте отдельно запустить БД)
export DB_HOST='127.0.0.1'
export DB_USER='app'
export DB_PASSWORD='very_strong'
export DB_NAME='example'
# Запустите приложение
uvicorn main:app --host 0.0.0.0 --port 5000 --reload
Требования для локального запуска:
- Python 3.12+
- Запущенный сервер MySQL
- База данных и пользователь, настроенные согласно переменным окружения
CREATE DATABASE example;
CREATE USER 'app'@'localhost' IDENTIFIED BY 'very_strong';
GRANT ALL PRIVILEGES ON example.* TO 'app'@'localhost';
FLUSH PRIVILEGES;
GET /
- главная страница (записывает запрос в БД и возвращает время + IP)GET /requests
- просмотр всех записей из базы данныхGET /debug
- отладочная информация о заголовках запросаGET /docs
- автоматическая документация FastAPI (Swagger UI)
Переменная | Значение по умолчанию | Описание |
---|---|---|
DB_HOST |
127.0.0.1 |
Хост базы данных MySQL |
DB_USER |
app |
Пользователь БД |
DB_PASSWORD |
very_strong |
Пароль БД |
DB_NAME |
example |
Имя базы данных |
# При правильной настройке через прокси
curl http://localhost:8090
# При прямом обращении (НЕПРАВИЛЬНО)
curl http://localhost:5000
# Получите подсказку о том, что нужно использовать порт 8090
Этот проект распространяется под лицензией MIT (подробности в файле LICENSE
).