django & celery 一些笔记

Posted on 日 09 4月 2017 in python

之前有部署过django,和celery,但是中间有一次服务器重启之后,项目没有运行,于是系统地学习了一下如果在服务器启动时就启动django项目。

项目部署的方案是 nginx + uwsgi + django,还用到了celery, broker用的是rabbitmq。rabbitmq在安装时默认已经是开机启动了。

Upstart

uwsgi的upstar脚本在官网的文档中有写到,下面是我项目里面的:

description "uWSGI instance to serve myapp"

start on runlevel [2345]
stop on runlevel [!2345]

#setuid user
#setgid www-data

respawn

pre-start script
    if [ ! -d /var/run/uwsgi ]; then
        mkdir -p /var/run/uwsgi
        chown user:www-data /var/run/uwsgi
    fi
end script
# product 
#exec /usr/local/bin/uwsgi --ini /var/www/project_name/bs.ini

# dev
exec /usr/local/bin/uwsgi --ini /data2/workspace/python/project_name/bs.ini

pre-start部分应该要注意一下,项目的pid文件是放在/var/run/uwsgi下面的。要值得注意的一点是bs.ini文件里面不能有daemonize配置, 加上的话uwsgi进程会正常退出,Upstart会认为job已经stopp了,并终止进程。详细见参考2

uwsgi ini配置

下面是我的配置:
[uwsgi]

uid = jenkins
gid = www-data
# the base directory (full path)
chdir = /var/www/project_name

# Django s wsgi file
module = project_name.wsgi:application

# process-related settings
# master
master = true

# maximum number of worker processes
processes = 4

socket = /var/run/uwsgi/project_name.sock

# ... with appropriate permissions - may be needed
chmod-socket = 664
# clear environment on exit
vacuum = true

die-on-term = true

;logto = /tmp/ent.log
logfile-chown = jenkins:www-data
logto = /var/log/uwsgi/project_name.log

pidfile = /var/run/uwsgi/project_name.pid

开机自启配置

/etc/init/下面的配置文件都是开机自启的,比如第一部分的Upstart脚本。命令风格为xxxx.conf /etc/init.d/下面的文件是传统的sysinit脚本。celery的配置文件就是放在下面的。 sysv-rc-conf命令可以在终端下面可视化配置

celery 和 celerybeat 的 daemonize

有一点要注意的是celerycelerybeat都要启动,要执行两个命令

sudo service project_celery start
sudo service project_celerybeat start

涉及要的文件是/etc/init.c/project_celery/etc/init.d/project_celerybeat,而且都要有x权限 /etc/defult/project_celery是这个项目的celery配置文件,不同项目可以有不同的配置文件,不同项目隔离
其中/etc/init.d/project_celery/etc/init.d/project_celerybeat都是官方的,需要改一下,比如user, default log文件的名字,还有defult的配置文件,也就是指向/etc/default/project_celery

参考链接:
https://help.ubuntu.com/community/UbuntuBootupHowto http://stackoverflow.com/questions/17667239/managing-uwsgi-with-upstart?newreg=6e23686727864cf381a8d612159e23b3 http://blog.csdn.net/gatieme/article/details/45251389