Рубрики
Без рубрики

Развертывание приложения Python-Django с помощью Docker

Это было первоначально опубликовано на моем личном сайте Привет, я был вдохновлен, чтобы написать этот постс … Tagged с Docker, DevOps, Django, Python.

Это было первоначально опубликовано на моем персональный сайт

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

Многие из вас, возможно, уже слышали, что эта фраза брошена почти везде, где вы поворачиваетесь. Вы, вероятно, поднимали термин докер и даже пробовали экспериментировать с ним, но могли сдаться по пути. Честно, если честно, я сдержался на нем один или два раза, прежде чем принимать полное погружение. Сначала это может быть немного запугано, но о, мальчик! Как только вы начнете использовать Docker, нет возврата. Легкость перехода от производства до окружающей среды развития просто разум, чтобы сказать наименее !! Таким образом, роскошь, давайте начнем.

Что такое Docker?

Docker – это инструмент с открытым исходным кодом, который автоматизирует развертывание приложения внутри контейнера для программного обеспечения. которые похожи на виртуальные машины, только более портативные, более ресурсоиспользуемые и более зависимые от операционной системы хоста. Для получения подробной информации о работах Docker я бы порекомендовал прочитать Эта статья А для тех, кто не удобно читать длинные сообщения, это Учебник серии на YouTube был особенно полезен в представлении меня в концепции докера.

Установка докера.

Если у вас нет Docker установлена на вашем компьютере, выполните подробные шаги ниже в соответствии с вашей операционной системой. Сдвиньте вперед, я предполагал, что у вас уже было существующее приложение Django, поэтому этот учебник будет просто руководством о том, как его консольствовать.

1. Windows 10 Pro 2 Windows 10 Это не про 3 Ubuntu

Начиная

Для развертывания типичного приложения Django вам понадобятся следующие услуги, чтобы получить его.

  1. Nginx – для обслуживания статических файлов и веб-сервера
  2. Postgres/Любая база данных по вашему выбору
  3. Python с Gunicorn установлен

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

1.python Image.

FROM python:3.6

RUN mkdir /code
WORKDIR /code

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt


COPY . .
  1. Первая строка должна начать с От ключевое слово. Он говорит Docker, из какого базового изображения вы хотите основывать свое изображение. В этом случае мы создаем изображение из изображения Python 3.6.

  2. Вторая строка – это команда Беги Используется для запуска инструкций на изображении, в этом случае мы создаем каталог по имени код. После этого Workdir Устанавливает каталог кода в качестве рабочего каталога, чтобы любые дополнительные инструкции на DockerFile произойдут в этом каталоге.

  3. Скопировать Команда копирует определенные файлы из хост-машина на изображение, которое мы создаем. Файл требований .txt будет скопирован в рабочий каталог ранее. После этого запустите команду установки PIP, чтобы установить пакеты Python, необходимые для вашего проекта.

  4. Наконец скопируйте файлы проекта вашего текущего рабочего каталога из хост-аппарата на изображение Docker.

Для того, чтобы построить это изображение, запустите простую команду

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

2. Изображение nginx.

FROM nginx

RUN rm /etc/nginx/conf.d/default.conf
COPY mysite.conf /etc/nginx/conf.d

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

upstream my_site {
    server web:8080;
}

server {


    listen 80;
    charset utf-8;
    server_name  127.0.0.1;


    client_max_body_size 4G;
    access_log /code/logs/nginx-access.log;
    error_log /code/logs/nginx-error.log;


    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://my_site;
            break;
        }
    }

    location /static/ {
        autoindex on;
        alias /code/static_cdn/;
    }

    location /media/ {
        autoindex on;
        alias /code/media_cdn/;
    }

}

Местоположение файлов, конечно, будет относительно ваших собственных конфигураций.

3. почтовые

И, наконец, мы добираемся до базы данных, в этом использовании я использую Postgres.

FROM postgres:latest

COPY ./init/01-db_setup.sh /docker-entrypoint-initdb.d/01-db-setup.sh

И теперь вы думаете «Но Льюис, какой этот файл init?» Для контекста давайте посмотрим на каталог Postgres в нашем проекте

postgres ├── postgres/dockerfile └── postgres/init └─ ─ Postgres/init/01-db_setup.sh

Это сценарий Shell (точка записи докера), указывающая, какие команды для запуска в контейнере базы данных, такие вещи, как создание базы данных, пользователей и предоставление привилегий указанному пользователю.

#!/bin/sh

psql -U postgres -c "CREATE USER $POSTGRES_USER PASSWORD '$POSTGRES_PASSWORD'"
psql -U postgres -c "CREATE DATABASE $POSTGRES_DB OWNER $POSTGRES_USER"
psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE $POSTGRES_DB TO $POSTGRES_USER"

Примечание. Когда вы создаете этот файл, не забудьте сделать его исполняемым

sudo chmod u + x filename.sh

4. упаковывая вещи с помощью Docker-Compose

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

Docker-Compose Build.

Во-первых, нам нужно будет создать файл docker-compose.yml в нашем каталоге проекта. Мы укажем услуги, необходимые для нашего WebApp для запуска в этом файле.

version: '3'
services: 

  web:

      build: .
      container_name: great
      volumes: 
      - .:/code
      - static:/code/static_cdn
      - media:/code/media_cdn
      depends_on: 
          - postgres
      expose: 
        - 8080
      command: bash -c "python manage.py collectstatic --no-input && python manage.py makemigrations && python manage.py migrate && gunicorn --workers=3 projectname.wsgi -b 0.0.0.0:8080"

  postgres:
      build: ./postgres
      restart: unless-stopped
      expose:
        - "5432"
      environment:   # will be used by the init script
            LC_ALL: C.UTF-8
            POSTGRES_USER: myuser
            POSTGRES_PASSWORD: mypassowrd.
            POSTGRES_DB: mydb
      volumes:
          - pgdata:/var/lib/postgresql/data/  

  nginx:
      restart: always
      build: ./nginx/
      volumes: 
        - ./nginx/:/etc/nginx/conf.d
        - ./logs/:/code/logs
        - static:/code/static_cdn
        - media:/code/media_cdn
      ports: 
        - "1221:80"
      links:
        - web  
volumes: 
  pgdata:
  media:
  static:  

Проходя через эти команды строки по строке:

  1. Версия – указывает синтаксис версии Docker-Compose Мы будем использовать
  2. Услуги – С этого момента мы выделим разные услуги, которые мы будем запущены. Как указано выше, это будет Nginx, Python и Postgres и назовите их как мы хотим. В моем случае я назвал их Nginx, Web и Postgres.
  3. построить – помните все эти документы, которые мы провели время письма? Хорошо. Установите команду сборки, вы можете указать местоположение каждого отдельного DockerFile и основано на командах на этих файлах, изображение будет сборка.
  4. Container_Name – это дает контейнерное имя, которое вы указали один раз, контейнеры работают и работает.
  5. Объемы – это способ совместного использования данных между Docker-Continers и Host Machine. Они также позволяют настойчивости данных даже после того, как контейнеры Docker разрушаются и воссозданы, так как это то, что вы окажетесь часто делать часто. Для большего количества объемов и как их использовать эта статья.
  6. Порты – это уточнить, какие порты из контейнеров Docker отображаются на хост-машина, например, принимая службу NGINX, порт 80 контейнера отображается на порт 1221 хоста.
  7. Выставление – разоблачение порта делает порт доступным для связанных услуг, но не из хоста.
  8. Перезапуск – Определяет поведение контейнеров в случае непредвиденного отключения
  9. Команда – Указывает контейнеры, какие команды выполняются перед запуском, в этом случае привязанные команды в веб-сервисе должны проверять изменения в базе данных и привязать веб-службу к порту 8080.

5. Последние шаги

Построить изображения, теперь это вопрос просто бега

Составная сборка

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

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

докер

или Если вы хотите указать, какие составьте файл для запуска в случае нескольких файлов составляющих докеров в одном каталоге

docker-compose -f filename.yml up

Отказ от ответственности Не забудьте установить и разрешенные хосты, в файле settings.py django, чтобы отразить имя домена или IP-адрес, который вы будете использовать. В дополнение к этому, измените базу данных из SQLite3 по умолчанию, поставляется с Django, чтобы отразить базу данных и имена пользователей, которые мы указали В разделе Окружающая среда Postgres Service, как так

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'postgres',
'PORT': 5432,
}
}

и это все. Для просмотра бегового сайта запустить

  1. localhost: 1221.
  2. Virtual-Box-Machine-IP: 1221 (для тех, кто использует Docker-Toolbox)

Если вы хотите остановить контейнеры

остановка докера

Чтобы начать остановленные контейнеры

докер состав

уничтожить контейнеры

докер-состав

Вы внесли изменения в Docker-файлы и нуждаются в этих изменениях применяемый

docker-compose down && docker-compose build && docker-compose up

Теперь, чтобы заставить сайт вверх и запустить в Интернете, просто создайте файл конфигурации для локальных машин NGINX (или APACHE) на веб-сервере и просто укажите его в контейнер Docker-Containing, запустив свой приложение Django. В этом случае вы укажите его на контейнер Nginx. 127.0.0.1:1221

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

Для разработчиков Laravel Вот что-то Чтобы вы начали с докера

Большое спасибо за ваше время, и я надеюсь, что эта статья была полезна. Если вы хотите больше этого, не стесняйтесь свяжитесь со мной

Не забудьте понравиться, поделиться и Подписаться Отказ Если у вас просто добавить, сбросьте комментарий ниже.

благодаря.

Оригинал: “https://dev.to/lewiskori/deploying-a-python-django-application-using-docker-3d09”