首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django +芹菜+ Nginx

Django +芹菜+ Nginx
EN

Stack Overflow用户
提问于 2022-11-08 15:39:47
回答 1查看 68关注 0票数 0

我试着用芹菜和Nginx在码头运行django应用程序。

Docker-compose

代码语言:javascript
复制
version: '3'

services:
  helpdesk_web:
    build:
      context: ./
      dockerfile: Dockerfile
    container_name: helpdesk_web
    volumes:
      - ./static:/usr/src/app/static
      - media:/usr/src/app/media
    ports:
      - "8000:8000"
      - "5678:5678"
    env_file:
      - ./.env
    restart: always
    depends_on:
      - helpdesk_db
      - helpdesk_redis

  helpdesk_db:
    image: postgres
    container_name: helpdesk_db
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.env
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: helpdesk_db
      POSTGRES_PASSWORD: itds
      POSTGRES_USER: itds

  nginx:
    build:
      context: ./docker/nginx
      dockerfile: Dockerfile
    container_name: helpdesk_nginx
    restart: on-failure
    depends_on:
      - helpdesk_web
      - helpdesk_db
    ports:
      - "80:80"
    volumes:
      - ./static:/usr/src/app/static
      - media:/usr/src/app/media
  
  helpdesk_redis:
    image: redis
    ports: 
      - "6379:6379"
  
  helpdesk_celery:
    build: 
      context: .
      dockerfile: Dockerfile
    command: celery -A helpdesk worker -l INFO --pool=solo
    depends_on:
      - helpdesk_web
      - helpdesk_redis
  
  helpdesk_celery-beat:
    build: 
      context: .
      dockerfile: Dockerfile
    command: celery -A helpdesk beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
    depends_on:
      - helpdesk_web
      - helpdesk_redis

volumes:
  postgres_data:
  media:

Dockerfile

代码语言:javascript
复制
FROM python:3.10


WORKDIR /usr/src/app


ENV PYTHONDONTWRITEBYTECODE 1

ENV PYTHONUNBUFFERED 1

RUN pip install --upgrade pip


COPY requirements.txt .

RUN pip install -r requirements.txt

COPY . .

RUN chmod +x entrypoint.sh

ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

entrypoint.sh

代码语言:javascript
复制
#! /bin/sh
if [ "$DATABASE" = "postgres" ]
then
    echo "Waiting for postgres..."
    while ! nc -z $SQL_HOST $SQL_PORT; do
      sleep 0.1
    done
    echo "PostgreSQL started"
fi
python manage.py migrate --no-input
exec gunicorn helpdesk.wsgi:application -b 0.0.0.0:8000 --workers=$WORKERS_COUNT

当我运行坞-撰写时,我会得到这个错误。

我有没有nginx的开发坞-撰写,它工作得很好。芹菜和银杏之间似乎存在一些问题。我是个初学者,所以我不知道该怎么做。

我遗漏了什么?

编辑№1:这就像芹菜和芹菜-节拍被设定为火鸟.

EN

回答 1

Stack Overflow用户

发布于 2022-11-09 01:13:33

Compose command:覆盖Dockerfile CMD,并且是passed as arguments to the ENTRYPOINT。一个典型的设置是让您的入口点脚本进行第一次设置,就像等待数据库一样,但最后以特殊的shell命令exec "$@"结束,以运行作为参数传递给它的命令。

代码语言:javascript
复制
#!/bin/sh
# Wait for the database, run migrations, set environment variables, ...
if [ "$DATABASE" = "postgres" ]; then ...; fi
python manage.py migrate --no-input

# Run the command passed as arguments, not a fixed command here
exec "$@"

在您的Dockerfile中,声明您希望容器运行的默认CMD,如GUnicorn。

代码语言:javascript
复制
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
CMD gunicorn helpdesk.wsgi:application -b 0.0.0.0:8000 --workers=$WORKERS_COUNT

现在,它将尊重Compose command:,或另一个命令docker-compose run

代码语言:javascript
复制
version: '3.8'
services:
  web:
    build: .
    ports: ['8000:8000', '5678:5678']
    env_file: [.env]
    restart: always
    depends_on: [db, redis]
    # and the default image CMD
  celery:
    build: .
    command: celery -A helpdesk worker -l INFO --pool=solo
    depends_on: [redis]
  celery-beat:
    build: .
    command: celery -A helpdesk beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
    depends_on: [redis]
  db: { ... }
  redis: { image: redis }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74363415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档