Деплой (deploy) – это процесс публикации (развёртывания) вашего приложения на сервере для того, чтобы оно было доступно в интернете или другой сети.
В этой статье мы рассмотрим туториалы по развертыванию Flask- и Django-приложений на сервере от Timeweb Cloud и облачной платформе PythonAnywhere.
В качестве примера мы будем использовать простейшее приложение, которое выводит на экран приветствие “Hello, world!”
Когда вы разворачиваете приложения на облачном сервере, кроме непосредственного запуска контейнера может потребоваться настройка реверс-прокси (например nginx) и SSL. Docker — инструмент, который упрощает создание, развертывание и запуск приложений с использованием контейнеров.
Контейнер docker — это набор зависимостей и кода, организованный в виде программного обеспечения, которое позволяет приложениям быстро и эффективно работать в различных вычислительных средах.
В первую очередь мы устаналиваем Docker с официального сайта.
Опубликуем приложение 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-приложения на 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/
, увидим приложение.
cloud
При использовании облачных сервисов, таких как PythonAnywhere или Heroku, вы сможете писать проекты прямо в браузере. Но для такой работы вам понадобится установка и подготовка Git-репозитория.
Вначале необходимо подготовить проект для Github. В своей учетной записи Github создайте новый репозиторий во вкладке Repositories. Назовите его по своему усмотрению и нажмите Create repository.
Дальше вам нужно подключить проект к Github с помощью Git. Установить Git можно с официального сайта git-scm.com.
Создадим локальный репозиторий на нашем компьютере. Внутри рабочего каталога вашего проекта (там, где находится manage.py) в консоли запускаем команду:
git init
Она инициализирует новый репозиторий git для вашего проекта.
Необходимо создать файл в корневом каталоге проекта с именем .gitignore
, который используется для указания git, какие файлы и папки игнорировать. Откройте редактор и внесите:
*.log
*.pot
*.pyc
__pycache__/
db.sqlite3
db.sqlite3-journal
media
static
Мы указываем Git игнорировать базу данных разработки, статические файлы и медиафайлы.
Теперь создаём requirements.txt
. В нем перечислены все зависимости, необходимые проекту для правильной работы.
pip freeze > requirements.txt
Теперь нужно связать локальный репозиторий с репозиторием на 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.
Для использования созданного репозитория на PythonAnywhere необходимо создать аккаунт уровня «Beginner». После этого на главной странице во вкладке Consoles запускаем Bash-консоль. Чтобы опубликовать приложение на облачном сервисе, понадобится помощь программы, которая сделает это автоматически.
Внутри bash-консоли запускаем строку для установки программы:
pip3.6 install --user pythonanywhere
Теперь активируем только что установленную утилиту:
$ pa_autoconfigure_django.py https://github.com/<your_github_username >/<your_project>.git
Приложение доступно для использования в интернете!
Разверните свое Python-приложение<br>в облаке Timeweb Cloud
Мы рассмотрели, как выполнить деплой Python-приложения на облачной платформе PythonAnywhere и сервере от Timeweb Cloud.
Кстати, в своем официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.