跳转至

数据库与进程调度

记录 Django + PostgreSQL 的真实项目配置、Dockerfile 与 supervisord 调度,SQLite 通用命令不再收录。

  • PostgreSQL 接入


    settings.pyDATABASESpsycopg2-binary 驱动、docker-compose 编排。

  • 应用镜像


    Python slim 基础镜像、pip 换源、supervisord 调度入口。

  • 进程调度


    supervisord.conf 管理 Django / Redis / Celery / Nginx。

🟢Django + PostgreSQL 配置

settings.pyDATABASESpsycopg2-binary 驱动与 docker-compose 编排。关键词:DATABASESHOST=dbpsycopg2POSTGRES_*

flowchart LR
    A[uvicorn 应用] -->|HOST=db| D[(PostgreSQL 容器 db)]
    D --> V[[/var/lib/postgresql/data/pgdata]]
    A -.broker.-> R[(redis-server)]

容器编排中 HOST 使用数据库服务名:

settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # (1)!
        'NAME': 'tpcbb',
        'USER': 'postgres',
        'PASSWORD': 'mysecretpassword789456',
        'HOST': 'db',   # (2)!
        'PORT': '5432',
    }
}
  1. 使用 PostgreSQL 后端,依赖 psycopg2 驱动。
  2. 容器编排中 HOST 填服务名而非 IP。

PostgreSQL 驱动使用 psycopg2-binary,在 Dockerfile 中通过 pip 安装。

docker-compose 编排

docker-compose.yml
version: '3'
services:
  tp_cbbs:
    build:
      context: ./
      dockerfile: ./Dockerfile
    restart: always
    ports:
      - 127.0.0.1:36610:8081
      - 6690:9001
      - 6691:5555
    volumes:
      - ./:/home
    networks:
      - cbb_tp
    depends_on:
      - db
  db:
    image: postgres
    restart: always
    shm_size: 128mb
    environment:
      POSTGRES_PASSWORD: mysecretpassword789456
      POSTGRES_USER: postgres
      POSTGRES_DB: tpcbb
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - /root/auto/cbb_postsql:/var/lib/postgresql/data/pgdata
    networks:
      - cbb_tp
networks:
  cbb_tp:

🟢应用 Dockerfile

Dockerfile
FROM python:slim

LABEL version="1.0" description="这是一个服务器;默认通过supervisord调度" by="mibo"

ADD sources.list /etc/apt/
RUN apt update
RUN apt install -y locales subversion procps net-tools nginx redis

ENV DEBIAN_FRONTEND=noninteractive

RUN pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple &&  \
    pip3 config set install.trusted-host mirrors.aliyun.com && \
    /usr/local/bin/python -m pip install --upgrade pip

RUN pip3 install django django-grappelli uvicorn psycopg2-binary

RUN apt install iputils-ping expect ssh rsync -y

RUN pip3 install supervisor pyecharts requests paramiko flower webssh django-celery-beat Celery "celery[redis,auth,msgpack]" xmltodict

WORKDIR /home

CMD bash run.sh
依赖速览
类别
Web djangodjango-grappelliuvicorn
数据库 psycopg2-binary
异步 Celerycelery[redis,auth,msgpack]django-celery-beat
运维 supervisorflowerwebsshparamiko
其他 pyechartsrequestsxmltodict

🟢通过 supervisord 调度

[program:x]commandautostartsupervisorctl。在容器内统一管理 Django、Redis、Celery、Nginx 等进程:

supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock

[inet_http_server]          ; Web 控制台
port=0.0.0.0:9001
username=mibo
password=ggicp-i%^&

[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200

[program:django]
command=uvicorn cbb_manage.asgi:application --host 0.0.0.0 --port 8000 --ws-max-size 90000000000 --reload
directory=/home
autostart=true
autorestart=true
redirect_stderr=true

[program:redis-server]
command=redis-server
directory=/home
autostart=true
autorestart=true
redirect_stderr=true

[program:flower]
command=celery -A cbb flower --broker=redis://localhost:6379/0
directory=/home
autostart=true
autorestart=true
redirect_stderr=true

[program:worker]
command=celery --app cbb worker --loglevel=info
directory=/home
autostart=true
autorestart=true
redirect_stderr=true

[program:beat]
command=celery -A cbb beat --scheduler django_celery_beat.schedulers:DatabaseScheduler
directory=/home
autostart=true
autorestart=true
redirect_stderr=true

[program:nginx]
command=nginx -g 'daemon off;'
directory=/etc/nginx
autostart=true
autorestart=true
redirect_stderr=true

常用管理命令

supervisord -c /etc/supervisord.conf
supervisorctl status
supervisorctl restart worker
# -u 携带账户密码
curl -L -u username:passwd -d 'processname=web_tools&action=restart' http://10.44.3.3:9101

[program:x] 关键项

说明
command 启动命令
directory 工作目录
autostart 随 supervisor 启动
autorestart 崩溃自动重启
startsecs / startretries 启动判定
user 运行用户
environment 环境变量
stdout_logfile / stderr_logfile 日志