Skip to content

netology-code/shvirtd-example-python

Repository files navigation

shvirtd-example-python

Учебный проект FastAPI-приложения для изучения Docker Compose.

Описание проекта

Это простое веб-приложение на FastAPI, предназначенное для изучения контейнеризации и работы с Docker Compose. Приложение демонстрирует:

  • Создание веб-сервиса на FastAPI
  • Подключение к базе данных MySQL
  • Работу с прокси-серверами (Nginx → HAProxy → FastAPI)
  • Корректную настройку сетей Docker
  • Передачу IP-адресов через заголовки прокси

Функциональность

При обращении к главной странице приложение:

  1. Определяет IP-адрес клиента
  2. Записывает время запроса и IP-адрес в базу данных MySQL
  3. Возвращает эту информацию пользователю

Важно для обучения: Если обращаться к приложению напрямую (минуя прокси), вы получите подсказку о неправильном выполнении задания.

Способы запуска

1. Запуск через Docker Compose

Архитектура при запуске через Docker Compose:

Клиент → Nginx (8090) → HAProxy (8080) → FastAPI App (5000) → MySQL

2. Локальный запуск для разработки

# Создайте виртуальное окружение
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
  • База данных и пользователь, настроенные согласно переменным окружения

Настройка базы данных 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).

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •