Деплой Python-приложения на сервер

Деплой (deploy) – это процесс публикации (развёртывания) вашего приложения на сервере для того, чтобы оно было доступно в интернете или другой сети. 

В этой статье мы рассмотрим туториалы по развертыванию Flask- и Django-приложений на сервере от Timeweb Cloud и облачной платформе PythonAnywhere.  

В качестве примера мы будем использовать простейшее приложение, которое выводит на экран приветствие “Hello, world!”

Как Запускать Внешние Процессы, Используя Python (1)

Деплой приложения на сервере

Когда вы разворачиваете приложения на облачном сервере, кроме непосредственного запуска контейнера может потребоваться настройка реверс-прокси (например 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

Внутри командной строки будет предложено ввести имя пользователя и пароль. С недавнего времени вместо пароля вводится персональный токен доступа. Для его получения, необходимо:

  1. В GitHub перейти в Settings -> Developer Settings -> Personal access tokens и нажать на Generate new token
  2. Нажать repo. Токен будет применим для всех указанных действий в ваших репозиториях.
  3. Нажать 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-тренды, делятся полезными инструкциями и даже приглашают к себе работать.  

Telegram
VK
Скопировать ссылку

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону