diff --git a/Dockerfile b/Dockerfile index c9d28ead..9371f564 100644 --- a/Dockerfile +++ b/Dockerfile @@ -49,20 +49,36 @@ RUN mkdir -p /var/log/fba EXPOSE 8001 -CMD ["/usr/local/bin/granian", "main:app", "--interface", "asgi", "--host", "0.0.0.0", "--port","8000"] +CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"] -# === Celery server image === -FROM base_server AS fba_celery +# === Celery Worker image === +FROM base_server AS fba_celery_worker -COPY deploy/backend/fba_celery.conf /etc/supervisor/conf.d/ +COPY deploy/backend/fba_celery_worker.conf /etc/supervisor/conf.d/ RUN mkdir -p /var/log/fba -RUN chmod +x celery-start.sh +CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"] + +# === Celery Beat image === +FROM base_server AS fba_celery_beat + +COPY deploy/backend/fba_celery_beat.conf /etc/supervisor/conf.d/ + +RUN mkdir -p /var/log/fba + +CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"] + +# === Celery Flower image === +FROM base_server AS fba_celery_flower + +COPY deploy/backend/fba_celery_flower.conf /etc/supervisor/conf.d/ + +RUN mkdir -p /var/log/fba EXPOSE 8555 -CMD ["./celery-start.sh"] +CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"] # Build image FROM ${SERVER_TYPE} diff --git a/backend/app/task/README.md b/backend/app/task/README.md index cfaf8963..d14441f0 100644 --- a/backend/app/task/README.md +++ b/backend/app/task/README.md @@ -16,8 +16,7 @@ 如果你想对任务进行目录层级划分,使任务结构更加清晰,你可以新建任意目录,但必须注意的是 1. 在 `backend/app/task/tasks` 目录下新建 python 包目录 -2. 新建目录后,务必更新 `conf.py` 配置中的 `CELERY_TASKS_PACKAGES`,将新建目录模块路径添加到此列表 -3. 在新建目录下,务必添加 `tasks.py` 文件,并在此文件中编写相关任务代码 +2. 在新建目录下,务必添加 `tasks.py` 文件,并在此文件中编写相关任务代码 ## 消息代理 diff --git a/backend/celery-start.sh b/backend/celery-start.sh deleted file mode 100644 index 965c2f4b..00000000 --- a/backend/celery-start.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -# work && beat -celery -A backend.app.task.celery worker -l info -P gevent -c 100 & - -# beat -celery -A backend.app.task.celery beat -l info & - -# flower -celery -A backend.app.task.celery flower --port=8555 --basic-auth=admin:123456 diff --git a/deploy/backend/fba_celery.conf b/deploy/backend/fba_celery.conf deleted file mode 100644 index b15f56c1..00000000 --- a/deploy/backend/fba_celery.conf +++ /dev/null @@ -1,35 +0,0 @@ -[program:fba_celery_worker] -directory=/fba/backend -command=/usr/local/bin/celery -A app.task.celery worker -P gevent -c 1000 --loglevel=INFO -user=root -autostart=true -autorestart=true -startretries=5 -redirect_stderr=true -stdout_logfile=/var/log/fba/fba_celery_worker.log -stdout_logfile_maxbytes=5MB -stdout_logfile_backups=5 - -[program:fba_celery_beat] -directory=/fba/backend -command=/usr/local/bin/celery -A app.task.celery beat --loglevel=INFO -user=root -autostart=true -autorestart=true -startretries=5 -redirect_stderr=true -stdout_logfile=/var/log/fba/fba_celery_beat.log -stdout_logfile_maxbytes=5MB -stdout_logfile_backups=5 - -[program:fba_celery_flower] -directory=/fba/backend -command=/usr/local/bin/celery -A app.task.celery flower --port=8555 --url-prefix=flower --basic-auth=admin:123456 -user=root -autostart=true -autorestart=true -startretries=5 -redirect_stderr=true -stdout_logfile=/var/log/fba/fba_celery_flower.log -stdout_logfile_maxbytes=5MB -stdout_logfile_backups=5 diff --git a/deploy/backend/fba_celery_beat.conf b/deploy/backend/fba_celery_beat.conf new file mode 100644 index 00000000..dc7e1546 --- /dev/null +++ b/deploy/backend/fba_celery_beat.conf @@ -0,0 +1,11 @@ +[program:fba_celery_beat] +directory=/fba/backend +command=/usr/local/bin/celery -A app.task.celery beat --loglevel=INFO +user=root +autostart=true +autorestart=true +startretries=5 +redirect_stderr=true +stdout_logfile=/var/log/fba/fba_celery_beat.log +stdout_logfile_maxbytes=5MB +stdout_logfile_backups=5 diff --git a/deploy/backend/fba_celery_flower.conf b/deploy/backend/fba_celery_flower.conf new file mode 100644 index 00000000..d0066939 --- /dev/null +++ b/deploy/backend/fba_celery_flower.conf @@ -0,0 +1,11 @@ +[program:fba_celery_flower] +directory=/fba/backend +command=/usr/local/bin/celery -A app.task.celery flower --port=8555 --url-prefix=flower --basic-auth=admin:123456 +user=root +autostart=true +autorestart=true +startretries=5 +redirect_stderr=true +stdout_logfile=/var/log/fba/fba_celery_flower.log +stdout_logfile_maxbytes=5MB +stdout_logfile_backups=5 diff --git a/deploy/backend/fba_celery_worker.conf b/deploy/backend/fba_celery_worker.conf new file mode 100644 index 00000000..d4d9292a --- /dev/null +++ b/deploy/backend/fba_celery_worker.conf @@ -0,0 +1,11 @@ +[program:fba_celery_worker] +directory=/fba/backend +command=/usr/local/bin/celery -A app.task.celery worker -P gevent -c 1000 --loglevel=INFO +user=root +autostart=true +autorestart=true +startretries=5 +redirect_stderr=true +stdout_logfile=/var/log/fba/fba_celery_worker.log +stdout_logfile_maxbytes=5MB +stdout_logfile_backups=5 diff --git a/deploy/backend/nginx.conf b/deploy/backend/nginx.conf index 6474c48b..1635627b 100644 --- a/deploy/backend/nginx.conf +++ b/deploy/backend/nginx.conf @@ -31,7 +31,7 @@ server { } location /flower/ { - proxy_pass http://fba_server:8555; + proxy_pass http://fba_celery_flower:8555; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; diff --git a/docker-compose.yml b/docker-compose.yml index 9d1e12ac..bc382358 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,7 +34,6 @@ services: depends_on: - fba_postgres - fba_redis - - fba_celery volumes: - ./deploy/backend/docker-compose/.env.server:/fba/backend/.env - fba_static:/fba/backend/app/static @@ -167,16 +166,15 @@ services: networks: - fba_network - fba_celery: + fba_celery_worker: build: context: . dockerfile: Dockerfile args: - - SERVER_TYPE=fba_celery - image: fba_celery:latest - ports: - - "8555:8555" - container_name: fba_celery + - SERVER_TYPE=fba_celery_worker + image: fba_celery_worker:latest + # 如果你需要分布式部署 Worker,则必须移除此 container_name 配置 + container_name: fba_celery_worker restart: always depends_on: - fba_rabbitmq @@ -191,3 +189,53 @@ services: wait-for-it -s fba_rabbitmq:5672 -t 300 supervisord -c /etc/supervisor/supervisord.conf supervisorctl restart + + fba_celery_beat: + build: + context: . + dockerfile: Dockerfile + args: + - SERVER_TYPE=fba_celery_beat + image: fba_celery_beat:latest + container_name: fba_celery_beat + restart: always + depends_on: + - fba_rabbitmq + - fba_celery_worker + volumes: + - ./deploy/backend/docker-compose/.env.server:/fba/backend/.env + networks: + - fba_network + command: + - bash + - -c + - | + wait-for-it -s fba_rabbitmq:5672 -t 300 + supervisord -c /etc/supervisor/supervisord.conf + supervisorctl restart + + fba_celery_flower: + build: + context: . + dockerfile: Dockerfile + args: + - SERVER_TYPE=fba_celery_flower + image: fba_celery_flower:latest + ports: + - "8555:8555" + container_name: fba_celery_flower + restart: always + depends_on: + - fba_rabbitmq + - fba_celery_worker + volumes: + - ./deploy/backend/docker-compose/.env.server:/fba/backend/.env + networks: + - fba_network + command: + - bash + - -c + - | + wait-for-it -s fba_rabbitmq:5672 -t 300 + supervisord -c /etc/supervisor/supervisord.conf + supervisorctl restart