使用supervisor 啟動 celery 並根據不同的環境需求,配置環境變數
阿新 • • 發佈:2018-12-30
以為在做公司專案,所以當然有開發環境和生產環境。我們公司使用 Jenkins來實現自動部署,將 Jenkins 生成的 docker部署到AWS上.
我們專案使用supervisor來啟動服務。
但是由於同一個專案要做開發環境進行開發測試,然後再能部署到生產環境,而且我們公司的開發環境和生產環境是物理隔離的,所以必須要有兩套不一樣的環境。
查了很久 最終還是在官網上查到了配置方法。(不過官網文件有些混亂 等我想第二次查詢時 已經找不到了。)
不多說 直接上程式碼
在主要的task 檔案中需要加上預設的環境配置
from celery import Celery import os #: Set default configuration module name os.environ.setdefault('CELERY_CONFIG_MODULE', 'celerytask.celeryconfig') celery_environment =os.environ.setdefault('CELERY_CONFIG_MODULE', 'celerytask.celeryconfig') if celery_environment=="celerytask.celeryconfig-dev": rw.set_conf_name("develop") app = Celery() app.config_from_envvar('CELERY_CONFIG_MODULE') @app.task() def run_algorithm(a, b): return a+b
然後就是兩個不一樣的配置檔案 celeryconfig.py 以及celeryconfig-dev.py (這個名字隨意起)
celeryconfig.py (prod 環境的 配置檔案)
from kombu import Exchange, Queue BROKER_URL = '你的 prod BROKER_URL' RESULT_BACKEND = '你的 prod RESULT_BACKEND' # defintion a exchange default_exchange = Exchange('dedfault', type='direct') my_exchange = Exchange('routeExchange', type='direct') #一些其他配置引數 CELERY_QUEUES = ( Queue('default', default_exchange, routing_key='default'), Queue('routeAlgorithm', my_exchange, routing_key='routeAlgorithm') ) CELERY_DEFAULT_QUEUE = 'default' CELERY_DEFAULT_EXCHANGE = 'default' CELERY_DEFAULT_ROUTING_KEY = 'default' CELERY_ROUTES = ( {'tasks.run_algorithm': { 'queue': 'routeAlgorithm', 'routing_key': 'routeAlgorithm' } }, ) CELERY_IMPORTS = ("tasks",)
celeryconfig-dev.py (dev 環境的 配置檔案)
from kombu import Exchange, Queue BROKER_URL = '你的 dev BROKER_URL' RESULT_BACKEND = '你的 dev RESULT_BACKEND' # defintion a exchange default_exchange = Exchange('dedfault', type='direct') my_exchange = Exchange('routeExchange', type='direct') #一些其他配置引數 CELERY_QUEUES = ( Queue('default', default_exchange, routing_key='default'), Queue('routeAlgorithm', my_exchange, routing_key='routeAlgorithm') ) CELERY_DEFAULT_QUEUE = 'default' CELERY_DEFAULT_EXCHANGE = 'default' CELERY_DEFAULT_ROUTING_KEY = 'default' CELERY_ROUTES = ( {'tasks.run_algorithm': { 'queue': 'routeAlgorithm', 'routing_key': 'routeAlgorithm' } }, ) CELERY_IMPORTS = ("tasks",)
這裡是 Dev環境中需要啟動的 supervisord.conf
[supervisord]
nodaemon=true
[program:nginx]
command=/usr/sbin/nginx
[program:uwsgi]
command =/usr/local/bin/uwsgi --ini /var/www/app/conf/uwsgi-dev.ini
[program:celery]
#Set full path to celery program if using virtualenv
command=celery worker -A tasks --loglevel=INFO
directory=/var/www/app/celerytask
environment=CELERY_CONFIG_MODULE="celerytask.celeryconfig-dev"
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
下面是 prod環境中的 supervisord.conf
[supervisord]
nodaemon=true
[program:nginx]
command=/usr/sbin/nginx
[program:uwsgi]
command =/usr/local/bin/uwsgi --ini /var/www/app/conf/uwsgi.ini
[program:celery]
; Set full path to celery program if using virtualenv
command=celery worker -A tasks --loglevel=INFO
directory=/var/www/app/celerytask
environment=CELERY_CONFIG_MODULE="celerytask.celeryconfig"
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
唯一的區別就是 在這裡改成你專案的配置檔名,分清不同環境。
environment=CELERY_CONFIG_MODULE="celerytask.celeryconfig"