Первый деплой FastAPI: что проверить между localhost и сервером
API готов: Swagger открывается, тесты зелёные, данные сохраняются. Теперь нужно дать ссылку другому человеку. На этом шаге выясняется, что работающее приложение и воспроизводимый запуск — разные результаты. На сервере другой каталог, база стартует позже, настройки передаются через окружение, а перед API появляется прокси.
Удобнее проверять эти части по очереди. Если сразу собирать контейнеры, HTTPS, несколько воркеров и миграции, один ответ 502 оставит слишком много возможных причин.
1. Один процесс и понятный импорт
Начните с запуска на сервере одним процессом. Зафиксируйте интерпретатор, каталог и адрес Python-объекта приложения. Если сервер не импортирует модуль, разберите main:app и --app-dir. До работающего локального запроса на сервере прокси пока не поможет.
2. Настройки из окружения
Отделите конфигурацию от кода. Проверьте адрес базы и внешних сервисов без вывода секретов в журнал. Если изменение файла ничего не даёт, посмотрите приоритет .env и кэш Settings. Команда запуска должна получать те же настройки после перезагрузки.
3. База готова и имеет нужную схему
Работающий процесс PostgreSQL ещё не означает, что миграции выполнены. Отдельно проверьте доступность базы, текущую ревизию и возможность выполнить пользовательскую операцию. Для Compose полезен разбор depends_on и healthcheck, а для нескольких вершин миграций — merge в Alembic.
4. Внешний адрес
Добавьте прокси и проверьте полный путь: браузер → прокси → API. Схема Swagger и её пробный запрос должны работать по внешнему URL. Если приложение живёт под /api, сверяйте root_path с поведением Nginx.
5. Проверки и остановка
Определите, как система запуска понимает готовность приложения и что происходит при штатном обновлении. Начните с разделения liveness и readiness. На учебном стенде перезапустите API и проверьте, что ресурсы создаются снова, а пользовательские данные сохраняются.
6. Только затем — масштабирование
Увеличивая число процессов, следите за памятью воркеров и бюджетом соединений базы. Для внешних HTTP-вызовов настройте общий клиент на время работы процесса.
Итог такой проверки — не просто зелёный /health. Вы должны уметь запустить ту же версию заново, выполнить основную пользовательскую операцию и найти причину сбоя по журналу. Это хороший момент перейти от ручной последовательности к Docker Compose и затем к автоматическому обновлению.
Если первый сервер ещё не запущен, начните с открытого урока: первый GET, Uvicorn и Swagger.
Собрать следующий этап проекта
Чтобы запуск проекта не держался на наборе команд в вашей памяти, соберите его в Docker Compose. В курсе по Docker вы упакуете HTTP-сервис, подключите PostgreSQL и разберёте сети, тома, обновление приложения и восстановление данных.
Посмотреть программу: Docker и Docker Compose: контейнеризация приложений
Проверить детали: FastAPI: устройство деплоя.
Продолжить на практике
- Docker и Docker Compose: контейнеризация приложений ↗
Упакуйте приложение в Docker и запустите его с PostgreSQL через Compose. Образы, сети, тома, диагностика поломок, обновление версий и восстановление данных — с практикой и итоговым проектом.
- FastAPI для начинающих: API с базой данных и тестами ↗
Соберёте свой первый полноценный backend на FastAPI: с базой данных, регистрацией, JWT-авторизацией и автотестами. 34 коротких урока и 140 заданий с проверкой — бесплатно.
- DevOps-инженер с нуля: полный курс ↗
Практический курс по DevOps для начинающих: от настройки Linux и сетей до сборки контейнеров, автоматизации в GitLab CI/CD, развёртывания в Kubernetes, мониторинга и восстановления данных на собственном компьютере.
