🐳 Π—Π°Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π² Docker срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Django, PostgreSQL

by itisgood

Π’ этом руководствС я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ срСду Docker для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Django, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ PostgreSQL вмСсто Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… SQLite ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ нашСй ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсуТдали, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² Docker ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Django.

🐳 Как Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² Docker ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Django Π² Ubuntu / Debian / CentOS

Π¨Π°Π³ 1: УстановитС Docker Engine

Π’Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Docker, установлСнный Π½Π° вашСм сСрвСрС / Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ столС.

Наши руководства ΠΏΠΎ установкС Docker Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹.

Π¨Π°Π³ 2. Настройка срСды

Π•ΡΡ‚ΡŒ настроСнный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ GitHub для этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ django-postgresql-docker-dev.

НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ / ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

Π‘Π½Π°Ρ‡Π°Π»Π° создайтС ΠΏΠ°ΠΏΠΊΡƒ для хранСния вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Моя рабочая ΠΏΠ°ΠΏΠΊΠ° называСтся django-postgresql-docker-dev.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΏΠΊΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² вашСй IDE.

Π¨Π°Π³ 3: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Dockerfile

Π’ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ срСдС всС прилоТСния находятся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Π‘Π°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ состоят ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…Β  ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный ΠΎΠ±Ρ€Π°Π· ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈΠ· Docker Hub.

Dockerfile – это тСкстовый Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Docker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Docker Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ для автоматичСского создания / построСния ΠΎΠ±Ρ€Π°Π·Π°.

Наш Dockerfile пСрСчислит всС зависимости, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ нашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Dockerfile.

Π’ Ρ„Π°ΠΉΠ»Π΅ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

# base image
FROM python:3

#maintainer
LABEL Author="CodeGenes"

# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONBUFFERED 1

#directory to store app source code
RUN mkdir /zuri

#switch to /app directory so that everything runs from here
WORKDIR /zuri

#copy the app code to image working directory
COPY ./zuri /zuri

#let pip install required packages
RUN pip install -r requirements.txt
Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Django needs.txt ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ трСбования ΠΊ своим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌ.
ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρƒ мСня Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Π½ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΠΈΠ· Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ Django ΠΈ psycopg2.
Django>=2.1.3,<2.2.0
psycopg2>=2.7,<3.0
django-crispy-forms==1.7.2
djangorestframework==3.8.2
djangorestframework-jwt==1.11.0
Pillow==5.2.0
Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ исходный ΠΊΠΎΠ΄

Π¨Π°Π³ 3: Π Π°Π±ΠΎΡ‚Π° с Docker Compose

Π˜Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Docker:

Compose – это инструмСнт для опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Docker.

Π’ Compose Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» YAML для настройки слуТб вашСго прилоТСния.

Π—Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ создаСтС ΠΈ запускаСтС всС слуТбы ΠΈΠ· вашСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

Наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ PostgreSQL для соСдинСний с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π΄Π²Π΅ слуТбы Π² нашСм Ρ„Π°ΠΉΠ»Π΅ docker-compose.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ сСрвис – это db, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ PostgreSQL, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ – zuri, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся нашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ docker-compose.yml ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

version: "3"
services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: zuri
      POSTGRES_DB: zuri
      POSTGRES_PASS: zuri1234
    volumes:
      - pgdata:/var/lib/posgresql/data
  zuri:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./zuri:/zuri
    command: python manage.py runserver 0.0.0.0:8000
    depends_on:
      - db
volumes:
  pgdata:

Depen_on Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π· Postgres Π±ΡƒΠ΄Π΅Ρ‚ доступСн для нашСго сСрвиса zuri, поэтому ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски создан ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° свойства ΠΏΠΎΠ΄ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Postgres.

ΠœΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ PostgreSQL, ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ объСм.
Π’ΠΎΠΌ pgdata Π±ΡƒΠ΄Π΅Ρ‚ создан docker, ΠΈ всС Π΄Π°Π½Π½Ρ‹Π΅, хранящиСся Π² нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Π±ΡƒΠ΄ΡƒΡ‚ сохранСны здСсь.

Π­Ρ‚ΠΎ рСкомСндуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ удаляСм наши ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ удаляСт Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΠΌ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ объСма Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ссли ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π΄Π°Π½Π½Ρ‹Π΅ всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ доступны.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм сам ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Django, создав Ρ„Π°ΠΉΠ» docker-compose ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Django для создания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ имя zuri послС запуска; это имя слуТбы Π² Ρ„Π°ΠΉΠ»Π΅ docker-compose, Π° имя zuri послС startproject – это имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ собираСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ администратор Django.
Π’ ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅:
$ docker-compose run zuri django-admin startproject zuri .

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π²Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ zuri, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ созданный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Django!

Однако Ρƒ нас Π΅ΡΡ‚ΡŒ нСбольшая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ созданныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠ°ΠΏΠΊΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ root.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ sudo chown -R $USER:$USER .

Π¨Π°Π³ 4: ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» настроСк Django ΠΈ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ настройки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

 

#Β Database
#Β https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASESΒ =Β {
Β Β Β Β 'default':Β {
Β Β Β Β Β Β Β Β 'ENGINE':Β 'django.db.backends.postgresql',
Β Β Β Β Β Β Β Β 'NAME':Β 'zuri',
Β Β Β Β Β Β Β Β 'USER':Β 'zuri',
Β Β Β Β Β Β Β Β 'HOST':Β 'db',
Β Β Β Β Β Β Β Β 'PORT':Β 5432,
Β Β Β Β }
}

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ name, user ΠΈ host Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Ρ„Π°ΠΉΠ»Π΅ docker-compose.

Π’ частности, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ host являСтся имя ΠΈΠΌΠ΅Π½ΠΈ слуТбы Postgres.


Π’ Windows Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ALLOWED_HOSTS Π²Π½ΡƒΡ‚Ρ€ΠΈ settings.py ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вашС имя хоста Docker ΠΈΠ»ΠΈ IP-адрСс Π² список.

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅:

ALLOWED_HOSTS = ['*']
Π”Π°Π»Π΅Π΅:
$ docker-compose up
Π—Π°Ρ‚Π΅ΠΌ посСтитС http://localhost:8000/
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, сдСлаСм ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:
 $ docker-compose run zuri python manage.py migrate

ΠΈΠ»ΠΈ Ссли ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½:

 $ docker-compose exec zuri python manage.py migrate
ΠžΡ‚Π½Ρ‹Π½Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ django послС запуска docker-compose zuri [cmd] ΠΈΠ»ΠΈ docker-compose exec zuri [cmd]

Loading

You may also like

Leave a Comment