Запуск приложения на основе фреймворка FastAPI на Dockhost
В данной статье мы рассмотрим деплой приложения, написанного на Python c использованием фреймворка FastAPI.
В качестве примера возьмём небольшое приложение, состоящее из нескольких простых контроллеров. Исходный код данного приложения можно посмотреть здесь: example-fastapi.
Деплой приложения будет производиться на платформе Dockhost. В рамках примера предполагаем, что у пользователя есть учётная запись на платформе.
Подключение репозитория Git
Перед подключением репозитория, в корневой директории необходимо создать Dockerfile со следующим содержимым:
FROM python:3.9
ENV PYTHONUNBUFFERED=1 \
PIP_DISABLE_PIP_VERSION_CHECK=on
WORKDIR /app
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY . /app
CMD ["fastapi", "run", "main.py", "--port", "8000", "--proxy-headers"]
Данный Dockerfile использует базовый образ python:3.9, устанавливает все зависимости из файла requirements.txt и копирует содержимое из всего репозитория в папку /app.
В качестве основной команды будет использоваться fastapi run main.py --port 8000 --proxy-headers. Данная команда запустит приложение, которое будет слушать 8000 порт и дополнительно включит заголовки X-Forwarded-For, для получения реального IP-адреса пользователя от сетевых сервисов платформы Dockhost. В дальнейшем из данного Dockerfile будет собран и запущен контейнер с приложением.
Вы можете добавить файл .dockerignore и указать в нём файлы или папки, которые не должны быть скопированы в контейнер.
Теперь в Вашем репозитории есть Dockerfile, и Вы можете подключить его (репозиторий) к платформе Dockhost. Для этого в проекте my-project (проект может быть любым, для примера мы будем использовать my-project, который создаётся по умолчанию при регистрации на платформе) необходимо перейти в раздел «Репозитории Git» и добавить репозиторий.
В нашем примере Git-репозиторий является публичным и не требует авторизации. Для того чтобы подключить приватный Git-репозиторий, необходимо указать имя пользователя и пароль в разделе «Авторизация».
Для подключения приватного репозитория GitHub необходимо использовать Personal access tokens. Как использовать персональный токен смотрите в статье Using a personal access token.
Далее нажмите на кнопку «Применить» и дождитесь завершения процесса подключения репозитория и первой сборки контейнера из репозитория.
Настройка контейнера
Как только процесс сборки будет завершён, в разделе «Контейнеры» появится контейнер приложения.
В логах контейнера будет запись об успешном старте приложения.
Теперь необходимо указать для контейнера порт, который слушает Ваше приложение, для этого нажмите на кнопку «Управлять», чтобы перейти в раздел просмотра контейнера и на открывшейся странице нажмите на кнопку «Редактировать».
В открывшемся модальном окне, в разделе «Порты», добавьте новый порт 8000.
Далее нажмите на кнопку «Применить» и дождитесь завершения процесса перезапуска контейнера.
Настройка домена и маршрута
Теперь контейнер настроен и готов принимать входящий трафик на порт 8000. Для доступа к контейнеру из Интернета добавим динамический домен и настроим маршрутизацию трафика.
Для создания или подключения домена необходимо перейти в раздел «Сетевые сервисы», подраздел «Домены» и добавить домен.
Далее нажмите на кнопку «Применить» и дождитесь завершения процесса создания домена.
Мы будем использовать динамический домен, который использует домен 3 уровня от платформы Dockhost. При необходимости Вы можете подключить свой домен.
Как только домен будет создан, необходимо настроить маршрутизацию трафика, для этого перейдите в раздел «Сетевые сервисы», подраздел «Маршруты» и добавьте новый маршрут.
Далее нажмите на кнопку «Применить» и дождитесь завершения процесса запуска сервиса маршрутизации.
При первом добавлении маршрута может потребоваться 1-2 минуты для запуска и настройки сервиса.
Вы можете увидеть карту сети проекта, если перейдёте в раздел «Сетевые сервисы», подраздел «Карта сети»:
Теперь приложение полностью настроено и запущено, а благодаря настройке деплоя через Push, при изменении кода платформа Dockhost будет автоматически собирать и запускать новую версию приложения.
В дальнейшем Вы можете взять за основу наш репозиторий example-fastapi и расширить функционал, при необходимости добавив новые команды и функции.
Если у Вас уже есть свой проект, написанный на Python, Вы можете так же просто запустить его на платформе Dockhost, используя пошаговый алгоритм из нашей статьи. Для этого воспользуйтесь примерами Dockerfile и придерживайтесь описанной последовательности действий.