Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

12.3 Запуск Docker контейнеров на сервере
2 из 2 шагов пройдено

Запуск Docker контейнеров

Запустим процесс создания образов, выполним:

cd ..
docker compose -f docker-compose.prod.yml build


Создадим и запустим контейнеры:

docker compose -f docker-compose.prod.yml up -d


Контейнеры создались и начали работать:


Затем выполним миграции:

docker compose -f docker-compose.prod.yml exec web python manage.py migrate --no-input


И соберем статические файлы:

docker compose -f docker-compose.prod.yml exec web python manage.py collectstatic --no-input


Проверяем работоспособность сайта, перейдём по адресу http://имя_вашего_домена:


Сайт работает, добавим книги и проверим различные функции:


Всё работает корректно, проект был успешно развёрнут на сервере.


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

У меня почему у Network не загорается зеленая галочка и соответственно  Running 4/5. В чем тут может быть дело?

@Ilia_Boiarintsev, попробуйте запустить так:

docker compose -f docker-compose.prod.yml up -d --force-recreate

@Ilia_Boiarintsev, а проект свой использовали или с гитхаба?

@Ilia_Boiarintsev, а на сервере есть запущенные вебсерверы? NGINX, Gunicorn или другие?

@Дмитрий_Селезнев, свой

@Дмитрий_Селезнев, да, nginx наверно запущен с деплоя прошлого проекта

@Ilia_Boiarintsev, когда работаем с докер, все остальные веб-серверы должны быть отключены? или вообще удалены?

@Ilia_Boiarintsev, достаточно отключения, похоже из-за совпадения портов проблемы, попробуйте NGINX остановить.

@Дмитрий_Селезнев, остановил, но проблема не решилась

@Ilia_Boiarintsev, не так останавливали? systemctl stop nginx, что показывает systemctl status nginx, Active: inactive (dead) или нет?

@Дмитрий_Селезнев,  Active: inactive (dead) да

@Ilia_Boiarintsev, попробуйте остановить и Gunicorn.

@Ilia_Boiarintsev, посмотрите есть ли сеть lameli_2_default в списке, при остановленных контейнерах:

docker network ls

И если есть, удалите её:

docker network rm lameli_2_default

@Дмитрий_Селезнев, lameli_2_default есть только при поднятом docker-compose

@Ilia_Boiarintsev, хорошо, попробуйте перезагрузить службу докера: systemctl restart docker

@Дмитрий_Селезнев,  перезагрузил, тоже самое. 

@Ilia_Boiarintsev, выполните docker network inspect lameli_2_default, при запущенных контейнерах. И вывод выложите сюда.

@Дмитрий_Селезнев

[

    {

        "Name": "lameli_2_default",

        "Id": "d0b3a4426d3682caf7fd11117da3df3d1ff9892942ad6b4bd58879f2531c219f",

        "Created": "2024-03-22T15:16:49.70725381+03:00",

        "Scope": "local",

        "Driver": "bridge",

        "EnableIPv6": false,

        "IPAM": {

            "Driver": "default",

            "Options": null,

            "Config": [

                {

                    "Subnet": "172.19.0.0/16",

                    "Gateway": "172.19.0.1"

                }

            ]

        },

        "Internal": false,

        "Attachable": false,

        "Ingress": false,

        "ConfigFrom": {

            "Network": ""

        },

        "ConfigOnly": false,

        "Containers": {

            "02d6031642c87ef590742cebb8953db495cee10d04622f85fd561bbd57fd8658": {

                "Name": "lameli_2-redis-1",

                "EndpointID": "b724df88b74b92fa87a26d6d1a66ad97715446f3967963aabe4eebcd56909ff0",

                "MacAddress": "02:42:ac:13:00:04",

                "IPv4Address": "172.19.0.4/16",

                "IPv6Address": ""

            },

            "5c841c42f913259b4a3dc1938582bf3e0b77a547db9a32ebfcd95b51394346b1": {

                "Name": "nginx-dev",

                "EndpointID": "5af252b538cf00184b843f698f950067bc71838921cd90657b7913db1c200c83",

                "MacAddress": "02:42:ac:13:00:03",

                "IPv4Address": "172.19.0.3/16",

                "IPv6Address": ""

            },

            "a0af9a3a1253f423de3782b124cffddd0a823464f8b7f2354ddce6f384afd3e3": {

                "Name": "db-dev",

                "EndpointID": "9695e52ca6f5d4cfea93112060902ad2dffc814b631cc9c896115ff530a71e6f",

                "MacAddress": "02:42:ac:13:00:02",

                "IPv4Address": "172.19.0.2/16",

                "IPv6Address": ""

            },

            "a79cd32fb8987e2e59a78ee8ab207dc0b4c5534684ec0bf9eedf75a878717bbe": {

                "Name": "lameli_2-celery-worker-1",

                "EndpointID": "02f4d9d9a5744698f4624c9816f74caa39e5df46defa21dd835e36efb3b86938",

                "MacAddress": "02:42:ac:13:00:06",

                "IPv4Address": "172.19.0.6/16",

                "IPv6Address": ""

            },

            "e870d7aadecc0d18530232ad1b0f1dc6db6e61d3dd6a980c1eebd64e5e9f83c3": {

                "Name": "backend-dev",

                "EndpointID": "5d1e9716a8b7b1a8321b0e4f05edbee329fdd55595266cfe29aa067d93b357f1",

                "MacAddress": "02:42:ac:13:00:05",

                "IPv4Address": "172.19.0.5/16",

                "IPv6Address": ""

            }

        },

        "Options": {},

        "Labels": {

            "com.docker.compose.network": "default",

            "com.docker.compose.project": "lameli_2",

            "com.docker.compose.version": "2.25.0"

        }

    }

]

@Ilia_Boiarintsev, загрузите проект по ссылке https://mega.nz/filerequest/rANtUqzWHQ4, попробую у себя запустить.

@Дмитрий_Селезнев, загрузил

@Ilia_Boiarintsev, я имел ввиду весь проект докера.

@Дмитрий_Селезнев, не то заархивировал, прошу прошения

@Дмитрий_Селезнев, загрузил

@Ilia_Boiarintsev, у меня проект заработал. Попробуйте такой docker compose файл.

version: '3.9'
services:
  db:
    container_name: db-dev
    restart: always
    #ports:
    #  - ${DB_PORT}:${DB_PORT}
    image: postgres:15-alpine
    volumes:
      - db_dev:/var/lib/postgresql/data
    env_file:
      - .env
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_DB: ${DB_DATABASE}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    command: -p ${DB_PORT}

  celery-worker:
    restart: always
    build:
      context: ./project
      dockerfile: Dockerfile
    env_file:
      .env
    command: "celery -A apps.product worker"
    volumes:
      - ./project:/backend
    depends_on:
      - backend

  redis:
    restart: always
    image: redis:alpine3.19 # bitnami/redis:6.0
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - REDIS_PORT_NUMBER=${REDIS_PORT}
    #ports:
    #  - ${REDIS_PORT}:${REDIS_PORT}

  backend:
    container_name: backend-dev
    #ports:
    #  - ${BACKEND_PORT}:${BACKEND_PORT}
    build:
      context: ./project
      dockerfile: Dockerfile
    env_file:
      - .env
    restart: always
    command: "sh ./entrypoint.sh"
    volumes:
      - ./project/entrypoint.sh:/backend/entrypoint.sh
      - ./project:/backend
      - staticfiles_dev:/backend/static/
      - media_dev:/backend/media/
    depends_on:
      - db

  nginx:
    image: nginx:1.25.4
    container_name: nginx-dev
    restart: always
    env_file:
      - .env
    ports:
      - ${NGINX_PORT}:${NGINX_PORT}
    volumes:
      - ./nginx.conf:/etc/nginx/templates/default.conf.template
      - staticfiles_dev:/backend/static/
      - media_dev:/backend/media/

volumes:
  staticfiles_dev:
  media_dev:
  db_dev:

@Дмитрий_Селезнев, та же самая проблема (((

@Ilia_Boiarintsev, если хотите, то могу посмотреть сам, для этого загрузите данные для доступа на мегу.

@Дмитрий_Селезнев, закинул, очень интересно в чем дело

@Ilia_Boiarintsev, сейчас посмотрю, только пока ничего не делайте на сервере.

@Ilia_Boiarintsev, я же просил ничего не делать на сервере, я практически всё исправил и вдруг резко перестало работать, больше часа ушло чтоб понять что причина в параллельно отредактированном entrypoint.sh. Теперь всё работает, но контейнеры остановил на всякий случай. Причин много было, в основном несоответствие портов и отсутствие логина в CACHES_LOCATION. Надпись так и не становится зелёной, но сеть создаётся и сайт работает правильно.

@Ilia_Boiarintsev, необходимо срочно заменить все пароли в .env файле, его содержимое доступно для всех в вашем репозитории на гихабе.

@Дмитрий_Селезнев, Я вроде .env не синхронизировал с гитом. Спасибо большое за помощь!

@Ilia_Boiarintsev, там этот файл удалён, но его можно посмотреть в коммитах, всё содержимое видно. Нажмите на ссылку 40 коммитов, и откройте верхний, там нажмите load diff, загрузится его содержимое.

@Дмитрий_Селезнев, а! точно, спасибо, изменю

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

@Alex, контейнеры не запустятся автоматически, потому как значение по умолчанию у restart policy = no: https://docs.docker.com/compose/compose-file/compose-file-v3/#restart.

Изменить это значение можно так, для каждого контейнера добавляем:

    deploy:
      restart_policy:
        condition: always

Подробнее про restart policy: https://docs.docker.com/compose/compose-file/compose-file-v3/#restart_policy.