Перейти к содержимому
Главная страница » Деплой Django + PostgreSQL в Docker

Деплой Django + PostgreSQL в Docker

Использование Docker упрощает развёртывание веб-приложений, позволяя создать изолированную среду для каждого сервиса. В этой статье мы создадим простое Django-приложение с базой данных PostgreSQL, используя docker-compose.

У вас должен быть установлен python3. Чтобы проверить, какая версия python у вас установлена, просто запустите:

python --version

Настройте свою среду разработки

Всякий раз, когда вы начинаете новый проект по веб-разработке, рекомендуется сначала настроить среду разработки. Итак, давайте создадим новый каталог для вашего проекта и переместимся в него:

$ mkdir tutotial
$ cd tutorial

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

$ python3 -m venv <name>

Эта команда создаст папку venv в вашем рабочем каталоге. Внутри этой папки вы найдёте несколько файлов, включая копию стандартной библиотеки Python. Позже, когда вы установите новые зависимости, они также будут храниться в этой папке. Затем вам нужно активировать виртуальную среду, выполнив следующую команду:

$ source <name>/bin/activate

Вы поймёте, что ваша виртуальная среда активирована, когда в терминале изменится приглашение консоли. Оно должно выглядеть примерно так:

(<name>) $

Создайте проект Django

Как только вы настроите виртуальную среду Python, вам нужно будет добавить стандартный файл зависимостей проекта Python, который обычно называется requirements.txt, и зависимость Django. Хорошо, после того как вы создадите и добавите зависимости, файл должен выглядеть так:

$ cat requirements.txt
Django==2.2.5

После добавления зависимости Django вы можете установить Django с помощью следующей команды:

$ pip install -r requirements.txt

После установки вы обнаружите, что у вас появился доступ к инструменту командной строки django-admin, с помощью которого можно создать файлы проекта и структуру каталогов, необходимые для простого приложения «Привет, мир!».

$ django-admin startproject mysite

Давайте посмотрим на структуру проекта, которую только что создал для вас инструмент:

.
├── mysite
│   ├── mysite
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   └── manage.py
└── requirements.txt

Вы можете управлять приложением в целях разработки с помощью файла manage.py, который позволяет, например, запустить тестовый веб-сервер для разработки:

$ cd mysite
$ python manage.py runserver

Затем в вашем браузере перейдите по адресу http://127.0.0.1:8000/, и вы увидите следующее:

Поздравляем, вы создали сайт на Django! Следующий шаг — создание приложений, чтобы вы могли добавлять представления и функции на свой сайт.

Шаг 3 — Создайте приложение Django

Чтобы создать приложение, выполните следующую команду:

$ python manage.py startapp hello_world

Это создаст еще один каталог с именем hello_world с несколькими файлами:

  • __init__.py указывает Python обрабатывать каталог как пакет Python.
  • admin.py содержит настройки для страниц администратора Django.
  • apps.py содержит настройки для настройки приложения.
  • models.py содержит набор классов, которые ORM Django преобразует в таблицы базы данных.
  • tests.py содержит тестовые классы.
  • views.py содержит функции и классы, которые обрабатывают данные, отображаемые в HTML-шаблонах.

После создания приложения вам нужно установить его в свой проект. В mysite/settings.py добавьте следующую строку кода в INSTALLED_APPS:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hello_world',  # <-- ADD THIS LINE
]

Эта строка кода означает, что ваш проект теперь знает, что только что созданное вами приложение существует. Следующий шаг — создать представление, чтобы вы могли что-то отобразить для пользователя.

Создание представления

Перейдите к файлу views.py в каталоге hello_world. Там уже есть строка кода, которая импортирует функцию render(). Добавьте следующий код:

from django.shortcuts import render

def hello_world(request):
    return render(request, 'hello_world.html', {})

Вы определили функцию просмотра под названием helloworld(). При вызове этой функции будет отображаться HTML-файл под названием hello_world.html. Этого файла ещё не существует, поэтому давайте создадим его. Создайте этот каталог, а затем файл с именем helloworld.html внутри него:

$ mkdir hello_world/templates/
$ touch hello_world/templates/hello_world.html

Добавьте в свой файл следующие строки HTML:

# hello_world.html
<h1>Hello, World!</h1>

Теперь вы создали функцию для обработки представлений и шаблонов, которые будут отображаться для пользователя. Последний шаг — подключить ваши URL-адреса, чтобы вы могли перейти на только что созданную страницу. В вашем проекте есть модуль под названием urls.py, в который вам нужно добавить конфигурацию URL-адреса для приложения hello_world. Внутри mysite/urls.py добавьте следующее:

from django.contrib import admin
from django.urls import path, include     # <--  ADD THIS LINE

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('hello_world.urls')),   # <--  ADD THIS LINE
]

Это ищет модуль под названием urls.py внутри приложения hello_world и регистрирует все заданные там URL-адреса. Всякий раз, когда вы посещаете корневой путь вашего URL-адреса (localhost:8000), URL-адреса приложения hello_world будут зарегистрированы. Модуль hello_world.urls ещё не существует, поэтому вам нужно его создать:

$ touch hello_world/urls.py

from django.urls import path
from hello_world import views

urlpatterns = [
    path('', views.hello_world, name='hello_world'),
]

Теперь, когда вы перезапустите сервер и откроете localhost:8000, вы должны увидеть созданный вами шаблон HTML :

Отличная работа!!! Вы создали своё первое приложение на Django и подключили его к своему проекту. Теперь давайте запустим его в контейнере Docker.

Шаг 4: Настройте приложение

Окно настройки

Прежде чем создавать контейнер для приложения Django и отправлять его, вам нужно установить Docker на локальный компьютер. Для обучения установите Docker Community Edition.

Создайте docker image

Следующий этап — добавить Dockerfile в ваш проект. Структуру Dockerfile можно рассматривать как набор инструкций по созданию контейнера/образа.

Чтобы запустить Dockerfile, создайте пустой файл с именем Dockerfile в корневом каталоге вашего проекта. Затем выполните каждую инструкцию в соответствии со следующим примером:

# Dockerfile

# The first instruction is what image we want to base our container on
# We Use an official Python runtime as a parent image
FROM python:3.7

# Allows docker to cache installed dependencies between builds
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Mounts the application code to the image
COPY . code
WORKDIR /code

EXPOSE 8000

# runs the production server
ENTRYPOINT ["python", "mysite/manage.py"]
CMD ["runserver", "0.0.0.0:8000"]

Первая директива в Dockerfile FROM python:3.7 сообщает Docker, на каком образе будет основан наш контейнер. Мы используем официальный образ Python с Dockerhub, который поставляется с Python и Linux, готовыми к использованию в проекте на Python.

Теперь вы готовы создать образ контейнера, а затем запустить его, чтобы увидеть, как всё это работает вместе.

Сборка и эксплуатация контейнера

Создать контейнер очень просто, если в вашей системе установлены Docker и Docker Machine. Следующая команда выполнит поиск Dockerfile и загрузит все необходимые слои, необходимые для запуска образа контейнера. Затем она выполнит инструкции в Dockerfile и создаст контейнер, готовый к запуску.

Чтобы создать контейнер, вы используете команду docker build и указываете тег или имя контейнера, чтобы позже можно было сослаться на него при запуске. Последняя часть команды указывает Docker, из какого каталога создавать контейнер.

$ cd
$ docker build -t python-django-app .

Последний шаг — запустить контейнер, который вы только что создали, с помощью Docker:

$ docker run -it -p 8000:8000 python-django-app

Эта команда сообщает Docker, что нужно запустить контейнер и перенаправить открытый порт 8000 на порт 8000 на вашем локальном компьютере. После выполнения этой команды вы сможете перейти по адресу http://localhost:8000 в браузере и увидеть ответ «Привет, мир!».

Вы можете просмотреть контейнеры Docker, которые в данный момент запущены в вашей системе (вместе с их идентификаторами), с помощью:

$ docker ps -a

Чтобы отключить контейнер Docker, запустите:

$ docker stop container_id

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *