Деплой Python-приложения на сервер
Деплой (deploy) – это процесс публикации (развёртывания) вашего приложения на сервере для того, чтобы оно было доступно в интернете или другой сети.
В этой статье мы рассмотрим туториалы по развертыванию Flask- и Django-приложений на сервере от Timeweb Cloud и облачной платформе PythonAnywhere.
В качестве примера мы будем использовать простейшее приложение, которое выводит на экран приветствие “Hello, world!”
Деплой приложения на сервере
Когда вы разворачиваете приложения на облачном сервере, кроме непосредственного запуска контейнера может потребоваться настройка реверс-прокси (например nginx) и SSL. Docker — инструмент, который упрощает создание, развертывание и запуск приложений с использованием контейнеров.
Контейнер docker — это набор зависимостей и кода, организованный в виде программного обеспечения, которое позволяет приложениям быстро и эффективно работать в различных вычислительных средах.
В первую очередь мы устаналиваем Docker с официального сайта.
Приложение Flask
Опубликуем приложение Flask.
Настройка Dockerfile
Создаём файл и называем его Dockerfile. Добавим в него код:
# Docker позволяет наследовать существующие образы, поэтому в качестве базового образа устанавливаем образ Python.
FROM python:3.8-slim-buster
# Меняем рабочую директорию внутри контейнера. Все оставшиеся операции будут запускаться внутри /app контейнера.
WORKDIR /app
# Устанавливаем все зависимости из файла requirements.txt внутри контейнера.
RUN pip install -r requirements.txt
# Копируем все остальные файлы из текущей директории (та, в которой находится файл Dockerfile) в директорию /app внутри образа.
COPY . /app
# Запускаем интерпретатор python
ENTRYPOINT [ "python" ]
# Добавляем список параметров к ENTRYPOINT. для выполнения команды, которая запускает приложение. Это похоже на то, как вы бы запустили его Python на своем терминале, используя команду python name_.py
CMD ["name_app.py" ]
Создание образа контейнера
Создадим образ для только что созданного контейнера:
docker build -t flask-docker .
Запуск контейнера
Для запуска контейнера выполняем код:
docker run -d -p 5000:5000 flask-docker
-d – для запуска контейнера в автономном режиме
-p – для указания порта, который будет открыт
Запустив localhost:5000 в браузере, увидим приложение.
Приложение Django
Деплой Django-приложения на Docker мало чем отличается от деплоя Flask-приложения.
Создадим виртуальное окружение и Dockerfile, в который добавим код:
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . /app
CMD ["python3", "manage.py", "runserver", "0.0.0.0:5000"]
Создадим файл .dockerignore, в котором будет находиться название нашего виртуального окружения:
venv
Создадим образ контейнера и запустим контейнер, используя команды build и run:
docker build --tag django-docker .
docker run --publish 8000:8000 django-docker
Запустив в браузере http://localhost:5000/, увидим приложение.
Деплой на облачной платформе PythonAnywhere
При использовании облачных сервисов, таких как PythonAnywhere или Heroku, вы сможете писать проекты прямо в браузере. Но для такой работы вам понадобится установка и подготовка Git-репозитория.
Установка Git и создание Git-репозитория
Вначале необходимо подготовить проект для Github. В своей учетной записи Github создайте новый репозиторий во вкладке Repositories. Назовите его по своему усмотрению и нажмите Create repository.
Дальше вам нужно подключить проект к Github с помощью Git. Установить Git можно с официального сайта git-scm.com.
Создадим локальный репозиторий на нашем компьютере. Внутри рабочего каталога вашего проекта (там, где находится manage.py) в консоли запускаем команду:
git init
Она инициализирует новый репозиторий git для вашего проекта.
Создание файла .gitignore
Необходимо создать файл в корневом каталоге проекта с именем .gitignore
, который используется для указания git, какие файлы и папки игнорировать. Откройте редактор и внесите:
*.log
*.pot
*.pyc
__pycache__/
db.sqlite3
db.sqlite3-journal
media
static
Мы указываем Git игнорировать базу данных разработки, статические файлы и медиафайлы.
Теперь создаём requirements.txt
. В нем перечислены все зависимости, необходимые проекту для правильной работы.
pip freeze > requirements.txt
Подключение git-репозитория к Github
Теперь нужно связать локальный репозиторий с репозиторием на GitHub. Наберите в консоли следующую команду:
git add --all
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/<your_github_username>/<your_project>.git # your_github_username – логин на Github, your_project – название репозитория
git push -u origin main
Внутри командной строки будет предложено ввести имя пользователя и пароль. С недавнего времени вместо пароля вводится персональный токен доступа. Для его получения, необходимо:
- В GitHub перейти в Settings -> Developer Settings -> Personal access tokens и нажать на Generate new token
- Нажать repo. Токен будет применим для всех указанных действий в ваших репозиториях.
- Нажать Generate Token.
Теперь, при обновлении браузера, вы увидите весь код со своего компьютера в репозитории Github.
Публикация на облачном сервисе
Для использования созданного репозитория на PythonAnywhere необходимо создать аккаунт уровня «Beginner». После этого на главной странице во вкладке Consoles запускаем Bash-консоль. Чтобы опубликовать приложение на облачном сервисе, понадобится помощь программы, которая сделает это автоматически.
Внутри bash-консоли запускаем строку для установки программы:
pip3.6 install --user pythonanywhere
Теперь активируем только что установленную утилиту:
$ pa_autoconfigure_django.py https://github.com/<your_github_username >/<your_project>.git
Приложение доступно для использования в интернете!
Заключение
Мы рассмотрели, как выполнить деплой Python-приложения на облачной платформе PythonAnywhere и сервере от Timeweb Cloud.
Кстати, в своем официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.