Первый деплой 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, мониторинга и восстановления данных на собственном компьютере.