paint-brush
Как Dockerize и развертывать приложения Djangoк@abrahamdahunsi
9,852 чтения
9,852 чтения

Как Dockerize и развертывать приложения Django

к Abraham Dahunsi 15m2023/10/14
Read on Terminal Reader

Слишком долго; Читать

В этом руководстве вы узнали, как закрепить и развернуть приложения Django с помощью Docker, Django и Heroku. Вы увидели, как Docker может помочь вам создать изолированные и воспроизводимые среды для ваших приложений и как Heroku может упростить процесс развертывания. Вы также узнали, как использовать Docker Compose для управления несколькими контейнерами и сервисами, а также как настроить параметры Django для различных сред.
featured image - Как Dockerize и развертывать приложения Django
Abraham Dahunsi  HackerNoon profile picture
0-item
1-item

Docker — это платформа для создания, запуска и распространения приложений. Он позволяет вам упаковать ваше приложение и все его зависимости в один контейнер, который затем можно будет запустить на любом компьютере, на котором установлен Docker.


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


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


Это позволяет легко начать работу с Django и быстро и легко создавать сложные веб-приложения.


Докеризация и развертывание приложения Django — относительно простой процесс. Основные этапы:


1. Создайте Dockerfile для вашего приложения Django.

2. Создайте образ Docker из вашего Dockerfile.

3. Разверните образ Docker в производственной среде.


В этой статье я подробно расскажу вам об этапах докеризации и развертывания приложения Django. Я также дам несколько советов и рекомендаций по развертыванию приложений Django в рабочей среде.

Предварительные условия

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


  • Python 3.9 или выше
  • Пип
  • Докер
  • Докер Составление
  • Гит


Вам также понадобится поставщик облачного хостинга, такой как AWS, Azure или Google Cloud Platform, если вы хотите развернуть свое приложение Django в рабочей среде. Но в этом уроке я буду использовать Heroku.


После установки всех необходимых компонентов вы готовы приступить к докеризации и развертыванию вашего приложения Django!

Создание проекта Django

Чтобы запустить новый проект Django, вам нужно использовать команду django-admin . Эта команда позволяет вам создать каталог проекта и некоторые основные файлы для вашего приложения Django. Например, если вы хотите создать проект под названием my_project , вы можете запустить эту команду в своем терминале:


django-admin startproject my_project


Это создаст каталог с именем `my_project` со следующей структурой:



мой проект/


├── manage.py


└── проект/


├── в этом .py


├── settings.py


└── urls.py


Файл manage.py — это сценарий, который позволяет вам выполнять различные задачи для вашего проекта, такие как запуск сервера разработки, создание миграции базы данных и тестирование вашего кода. Каталог project/ содержит настройки и файлы конфигурации вашего проекта.


Файл settings.py определяет основные настройки вашего проекта, такие как подключение к базе данных, установленные приложения и промежуточное программное обеспечение. Файл urls.py сопоставляет URL-адреса вашего проекта с представлениями ваших приложений.


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


python manage.py runserver


По умолчанию сервер запустится на порту 8000. Затем вы можете открыть браузер и перейти по адресу http://localhost:8000/ , чтобы увидеть домашнюю страницу Django по умолчанию.

Базовая структура и файлы проекта Django

Проект Django состоит из нескольких файлов и каталогов, которые определяют функциональность и внешний вид вашего веб-приложения. Основными компонентами проекта Django являются:


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


project/ : каталог, содержащий настройки и файлы конфигурации вашего проекта. Основные файлы в этом каталоге:

 `settings.py`: A file that defines the main settings for your project, such as the database connection, the installed apps, and the middleware. You can customize this file to suit your needs and preferences. `urls.py`: A file that maps the URLs of your project to the views of your apps. You can define different URL patterns for different parts of your web application.


apps/ : каталог, содержащий все приложения Django, составляющие ваш проект. Каждое приложение Django представляет собой отдельный пакет Python, который предоставляет определенную функциональность или функцию для вашего веб-приложения. Вы можете создавать свои собственные приложения или использовать существующие из сторонних источников.

Тестирование проекта локально

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


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


python manage.py runserver


По умолчанию сервер запустится на порту 8000. Затем вы можете открыть браузер и перейти по адресу http://localhost:8000/, чтобы увидеть домашнюю страницу Django по умолчанию.


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


python manage.py test


Это запустит все модульные тесты вашего проекта. Если все тесты пройдены успешно, вы увидите такое сообщение:



 Ran 1 test in 0.001s Ok


Если какой-либо из тестов не пройден, вы увидите сообщение об ошибке с подробной информацией об ошибке. Вы можете использовать эту информацию для отладки и исправления вашего кода.


После того как вы протестировали проект локально и остались довольны результатами, вы можете развернуть его в производственной среде.

Докеризация проекта Django

Что такое Dockerfile?

Dockerfile — это текстовый файл, содержащий инструкции по созданию образа Docker. Образ Docker — это автономный исполняемый пакет, который включает в себя все необходимое для запуска приложения: код, среду выполнения, системные инструменты, системные библиотеки и настройки.


Чтобы создать Dockerfile, вам необходимо указать базовый образ, команды, которые нужно выполнить для установки необходимых пакетов, и команды, которые нужно запустить, чтобы запустить приложение.

Пример Dockerfile для проекта Django

Вот пример Dockerfile для проекта Django:


 FROM python:3.9 #Install Django and other required packages RUN pip install django # Copy the Django project files into the image COPY ./app # Set the working directory WORKDIR /app # Start the Django development server CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]



Этот Dockerfile создаст образ Docker, содержащий файлы Python 3.9, Django и проекта Django. Образ будет настроен для запуска сервера разработки Django на порту 8000.

Что такое файл docker-compose.yml?

Файл docker-compose.yml — это файл YAML, который определяет службы, составляющие приложение Dockerized. Сервис может представлять собой один контейнер Docker или группу контейнеров Docker.


Чтобы создать файл docker-compose.yml для проекта Django, вам необходимо определить веб-службу и службу базы данных. Веб-служба будет запускать приложение Django, а служба базы данных — базу данных, которую использует приложение Django.

Пример файла docker-compose.yml для проекта Django

Вот пример файла docker-compose.yml для проекта Django:


 version: "3.9" services: web: build: ports: -"8000:8000" volumes -./:/app db: image: postgres:14.0-alpine volumes: -./postgres:/var/lib/postgresql/data



Этот файл docker-compose.yml определяет две службы: web и db . web сервис создаст образ Docker из файла Dockerfile, который мы создали в предыдущем разделе. web сервис также предоставит порт 8000 на хост-компьютере, чтобы мы могли получить доступ к серверу разработки Django.


Служба db будет использовать официальный образ Docker PostgreSQL. Служба db также смонтирует каталог postgres на хост-компьютере в каталог /var/lib/postgresql/data внутри контейнера. Это обеспечит сохранение файлов базы данных между перезапусками контейнера.

Сборка и запуск Docker-контейнеров

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


docker-compose up -d


Эта команда создаст образы Docker для сервисов web и db, если они еще не существуют. Затем команда запустит контейнеры Docker для служб web и db.

Локальное тестирование докеризованного проекта Django

После запуска контейнеров Docker мы можем протестировать проект Dockerized Django локально с помощью веб-браузера. Откройте веб-браузер и перейдите по адресу http://localhost:8000. Теперь вы сможете увидеть страницу разработки Django.


Вы также можете войти на страницу администратора Django по адресу http://localhost:8000/admin/ . По умолчанию имя пользователя и пароль — admin и admin .

Развертывание проекта Django

Теперь пришло время развернуть ваш проект Django на облачной платформе с помощью Git, GitHub и Heroku. Вы также протестируете развернутое веб-приложение с помощью веб-браузера.

Что такое Git и зачем он нам нужен?

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


Git также может позволить вам отправлять свой код в удаленные репозитории, такие как GitHub, где вы можете хранить свой код и делиться им с другими.

Как создать репозиторий GitHub и отправить наш код на GitHub?

Пожалуйста, проигнорируйте следующее, если вы уже создали репозиторий GitHub.


Чтобы создать репозиторий GitHub для вашего проекта Django, вам необходимо выполнить следующие шаги:


- Создайте бесплатную учетную запись на GitHub.


- Перейдите на страницу своего профиля и нажмите кнопку «Создать» рядом с пунктом «Репозитории» .


— Дайте своему репозиторию имя, например django-docker-app , и при необходимости добавьте описание.


- Нажмите кнопку Создать репозиторий .


Теперь вы создали пустой репозиторий на GitHub. Чтобы отправить свой код в этот репозиторий, вам нужно использовать команду git в своем терминале. Я предполагаю, что вы уже установили Git на свой локальный компьютер и инициализировали репозиторий Git в папке проекта Django. Если нет, следуйте официальной документации , чтобы сделать это.


Чтобы отправить свой код на GitHub, вам необходимо выполнить следующие шаги:


- Перейдите в папку проекта Django в терминале и введите git status , чтобы увидеть текущее состояние вашего репозитория. Вы должны увидеть что-то вроде этого:


 On branch main Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: Dockerfile modified: docker-compose.yml modified: requirements.txt no changes added to commit (use "git add" and/or "git commit -a")


Это означает, что у вас есть некоторые измененные файлы, которые не подготовлены для фиксации. Чтобы подготовить их к фиксации, вам нужно использовать команду git add .


— Введите git add . подготовить все измененные файлы для фиксации. Альтернативно вы можете указать имена файлов, которые мы хотим подготовить, например git add Dockerfile docker-compose.yml requirements.txt .


- Введите git status еще раз, чтобы увидеть обновленное состояние нашего репозитория. Вы должны увидеть что-то вроде этого:


 On branch main Your branch is up to date with 'origin/main'. Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: Dockerfile modified: docker-compose.yml modified: requirements.txt


Это означает, что у вас есть некоторые изменения, подготовленные для фиксации. Чтобы зафиксировать их, вам нужно использовать команду git commit .


— Введите git commit -m "Add Docker configuration files" чтобы зафиксировать поэтапные изменения с сообщением, описывающим, что мы сделали. Альтернативно вы можете опустить флаг -m и ввести более длинное сообщение в редакторе, который откроется после ввода git commit .


- Введите git status еще раз, чтобы увидеть окончательное состояние нашего репозитория. Вы должны увидеть что-то вроде этого:


 On branch main Your branch is ahead of 'origin/main' by 1 commit. (use "git push" to publish your local commits) nothing to commit, working tree clean


Это означает, что у вас есть один коммит, который еще не отправлен в удаленный репозиторий. Чтобы отправить его, вам нужно использовать команду git push .


— Введите git push origin main , чтобы отправить локальный коммит в удаленный репозиторий на GitHub.


Альтернативно вы можете указать удаленное имя и имя ветки, которую вы хотите отправить, например git push origin main .


Вас могут попросить ввести имя пользователя и пароль GitHub или использовать токен личного доступа для аутентификации.


– Перейдите на страницу своего репозитория GitHub и обновите ее. Вы должны увидеть свой код и сообщение о фиксации на странице.


Вы успешно отправили свой код на GitHub. Теперь вы можете перейти к следующему шагу — развертыванию вашего проекта Django в Heroku.

Что такое Heroku и зачем он вам нужен?

Heroku — это облачная платформа, которая позволяет развертывать, управлять и масштабировать веб-приложения. Он поддерживает различные языки программирования, платформы и базы данных, такие как Python, Django и PostgreSQL.


Он также предоставляет различные функции и дополнения, которые расширяют возможности веб-разработки, такие как ведение журнала, мониторинг, кэширование, безопасность и т. д.


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


Вы также можете использовать Heroku для масштабирования своего веб-приложения в соответствии с трафиком и спросом. Heroku возьмет на себя все сложности и проблемы веб-развертывания за вас.

Как создать учетную запись Heroku и установить инструмент Heroku CLI?

Чтобы создать учетную запись Heroku, вам необходимо выполнить следующие шаги:


- Перейдите в Heroku и нажмите кнопку «Зарегистрироваться» .

- Заполните необходимую информацию, такую как имя, адрес электронной почты, пароль и т. д.

- Выберите основной язык разработки, например Python.

- Нажмите кнопку «Создать бесплатную учетную запись» .

- Проверьте нашу электронную почту и нажмите ссылку, чтобы подтвердить нашу учетную запись.


Теперь вы создали бесплатную учетную запись Heroku. Чтобы установить инструмент Heroku CLI, вам необходимо выполнить следующие шаги:


- Перейдите в [ Heroku CLI и выберите подходящий установщик для нашей операционной системы, например Windows, Mac OS X или Linux.


- Загрузите и запустите установщик и следуйте инструкциям на экране.


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


heroku/7.59.0 win32-x64 node-v12.21.0


Теперь вы установили инструмент Heroku CLI на свой локальный компьютер. Вы можете использовать этот инструмент для взаимодействия с Heroku из терминала.

Как создать приложение Heroku и настроить необходимые параметры?

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


- Перейдите в папку проекта Django в терминале и введите heroku login , чтобы войти в свою учетную запись Heroku с помощью инструмента Heroku CLI. Вас могут попросить ввести адрес электронной почты и пароль или использовать веб-браузер для аутентификации.


— Введите heroku create django-docker-app , чтобы создать новое приложение Heroku с именем django-docker-app . Альтернативно, вы можете опустить имя и позволить Heroku сгенерировать для вас случайное имя. Вы должны увидеть что-то вроде этого:


 Creating ⬢ django-docker-app... done https://django-docker-app.herokuapp.com/ | https://git.heroku.com/django-docker-app.git


Это означает, что вы создали новое приложение Heroku с URL-адресом в Интернете и URL-адресом Git. Веб-URL — это место, по которому вы можете получить доступ к развернутому веб-приложению, а URL-адрес Git — это место, по которому вы можете отправить свой код в Heroku.


- Введите heroku config:set SECRET_KEY=<your_secret_key> чтобы установить переменную среды для настройки SECRET_KEY нашего проекта Django. Вам необходимо заменить <your_secret_key> случайной строкой, которую вы можете сгенерировать с помощью такого инструмента, как Django Secret Key Generator .


Альтернативно вы можете использовать существующий секретный ключ, который есть в вашем файле settings.py , но это не рекомендуется по соображениям безопасности.


- Введите heroku addons:create heroku-postgresql:hobby-dev чтобы добавить бесплатную надстройку базы данных PostgreSQL в ваше приложение Heroku. Это создаст новую базу данных для вашего проекта Django и установит переменную среды для параметра DATABASE_URL вашего проекта Django. Вы должны увидеть что-то вроде этого:

 Creating heroku-postgresql:hobby-dev on ⬢ django-docker-app... free Database has been created and is available ! This database is empty. If upgrading, you can transfer ! data from another database with pg:copy Created postgresql-curved-12345 as DATABASE_URL Use heroku addons:docs heroku-postgresql to view documentation


Это означает, что вы добавили надстройку базы данных PostgreSQL с именем PostgreSQL-curved-12345 и URL-адресом DATABASE_URL .


- Введите heroku config , чтобы просмотреть список переменных среды, которые вы установили для своего приложения Heroku. Вы должны увидеть что-то вроде этого:


 === django-docker-app Config Vars DATABASE_URL: postgres://<username>: <password>@<host>:<port>/<database> SECRET_KEY: <your_secret_key>


Это означает, что у вас есть две переменные среды, DATABASE_URL и SECRET_KEY , которые вы можете использовать в настройках проекта Django.


Теперь, когда вы создали приложение Heroku и настроили необходимые параметры для нашего проекта Django, вы можете перейти к следующему шагу — развертыванию вашего проекта Django в Heroku.


Как развернуть проект Django в Heroku с помощью команды heroku ?


Чтобы развернуть наш проект Django в Heroku с помощью команды heroku , вам необходимо выполнить следующие шаги:


- Перейдите в папку проекта Django в терминале и введите heroku container:login , чтобы войти в реестр контейнеров Heroku с помощью инструмента Heroku CLI. Это позволит вам отправить наш образ Docker в Heroku.


- Введите heroku container:push web -a django-docker-app , чтобы создать и отправить образ Docker в Heroku. Вам необходимо указать имя вашего приложения Heroku, в данном случае django-docker-app . Вы должны увидеть что-то вроде этого:


 === Building web (Dockerfile) Sending build context to Docker daemon 1.024kB Step 1/9 : FROM python:3.9-slim ---> 7f5b6ccd03e9 Step 2/9 : ENV PYTHONUNBUFFERED 1 ---> Using cache ---> 64b5d0e40a22 Step 3/9 : RUN mkdir /code ---> Using cache ---> 4d8c638f2b6c Step 4/9 : WORKDIR /code ---> Using cache ---> e69c02a028cd Step 5/9 : COPY requirements.txt /code/ ---> Using cache ---> 8f0f3e0f2d8c Step 6/9 : RUN pip install -r requirements.txt ---> Using cache ---> 0f7b497d81ed Step 7/9 : COPY . /code/ ---> Using cache ---> c0a8e9a32b16 Step 8/9 : EXPOSE 8000 ---> Using cache ---> a1d36a4a2da4 Step 9/9 : CMD ["gunicorn", "django_docker.wsgi", "--bind", "0.0.0.0:8000"] ---> Using cache ---> f7f3c0418a1d Successfully built f7f3c0418a1d Successfully tagged registry.heroku.com/django-docker-app/web:latest === Pushing web (Dockerfile) The push refers to repository [registry.heroku.com/django-docker-app/web] f7f3c0418a1d: Pushed latest: digest: sha256:6cbbf22cf6aa60e0343e6d8e7c4c2eeb2e cb8fd5e82a42dfe5f4aeeb15af89ec size: 528 Your image has been successfully pushed. You can now release it with the 'container:release' command.


Это означает, что вы создали и отправили свой образ Docker в Heroku.


— Введите heroku container:release web -a django-docker-app , чтобы выпустить наш образ Docker в наше приложение Heroku. Вы должны увидеть что-то вроде этого:


 Releasing images web to django-docker-app... done


Это означает, что вы разместили свой образ Docker в своем приложении Heroku.


- Введите heroku run python manage.py migrate -a django-docker-app чтобы запустить миграцию базы данных в вашем приложении Heroku. Это создаст необходимые таблицы и индексы для вашего проекта Django в базе данных PostgreSQL. Вы должны увидеть что-то вроде этого:


 Running python manage.py migrate on ⬢ django-docker-app... up, run.1234 (Free) Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions, polls Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying polls.0001_initial... OK Applying sessions.0001_initial... OK


Это означает, что вы выполнили миграцию базы данных в своем приложении Heroku.


- Введите heroku open -a django-docker-app , чтобы открыть развернутое веб-приложение в веб-браузере. Вы должны увидеть наш проект Django, работающий на Heroku.


Вы успешно развернули свой проект Django в Heroku с помощью команды heroku . Теперь вы можете наслаждаться своим веб-приложением и делиться им с другими.

Заключение

В этом руководстве вы узнали, как закрепить и развернуть приложения Django с помощью Docker, Django и Heroku. Вы увидели, как Docker может помочь вам создать изолированные и воспроизводимые среды для ваших приложений и как Heroku может упростить процесс развертывания.


Вы также узнали, как использовать Docker Compose для управления несколькими контейнерами и сервисами, а также как настроить параметры Django для различных сред.


Докеризация и развертывание приложений Django может иметь множество преимуществ, таких как:


- Ускоренные циклы разработки и тестирования.

- Упрощение совместной работы и совместного использования кода.

- Стабильная и надежная работа на всех платформах.

- Масштабируемость и гибкость ресурсов

- Безопасность и изоляция зависимостей


Читать далее: CI/CD необходим для быстрой и надежной доставки программного обеспечения. Чтобы оптимизировать конвейер CI/CD для достижения максимальной эффективности, выбирайте правильные инструменты, оптимизируйте рабочий процесс, используйте автоматическое тестирование и контроль качества, распараллеливайте сборки, используйте циклы мониторинга и обратной связи, выполняйте проверки безопасности и постоянно совершенствуйте свой конвейер. Читать далее

Читайте также: Все, что мы узнали на DockerCon 2023. Подробнее

Дополнительные ресурсы

- Документация Docker : официальная документация по Docker, где вы можете найти руководства, учебные пособия, справочные материалы и многое другое.


- Документация Django : официальная документация по Django, где вы можете найти темы, практические руководства, справочные материалы и многое другое.