centos7下virtualenv 中部署 nginx + uwsgi+django+celery+rabbitmq

环境搭建

1、前言

之前的文章,已经介绍了如何在centos7中安装python3、pip和虚拟环境,在此就不重复介绍了,直接介绍在虚拟环境中部署nginx + uwsgi+django+celery。

2、安装nginx

yum install epel-release
yum install nginx

3、安装uwsgi

# 这一步是在系统全局环境中(3.6下进行)
pip3 install uwsgi
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

4、安装django+celery

#这个简单,直接使用pip安装,在虚拟环境下,执行:
pip install django
pip install celery

5、安装rabbitmq

5.1 安装erlang

因为要安装rabbitmq,必须安装erlang。打开链接:

https://packagecloud.io/rabbitmq/erlang/

可以看到有很多不同版本的erlang,我选择的是erlang-21.2.5-1.el7.centos.x86_64.rpm版本。点开要选择的版本,可以看到官方给出的快捷安装脚本,解决了很多依赖问题。我们按照快捷安装方法,依次输入命令:

curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
sudo yum install erlang-21.2.5-1.el7.centos.x86_64




如果安装成功,可以输入erl查看到对应的版本

5.2 安装rabbitmq

在安装好erlang后,我们可以安装rabbitmq,打开链接:

https://packagecloud.io/rabbitmq/rabbitmq-server

可以看到不同的版本,我选择的是rabbitmq-server-3.7.12-1.el7.noarch.rpm。也是使用如上的快捷方式,依次输入命令:

curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
sudo yum install rabbitmq-server-3.7.12-1.el7.noarch

至此,就安装完了基本环境,接下来就是配置了。

6 配置uwsgi

在django根目录下新建一个文件,yourprojectname_uwsgi.ini。直接贴上完整配置:

[uwsgi]
# 项目目录
chdir=/home/workspace/yourprojectname
module=yourprojectname.wsgi
# virtualenv路径 
home=/root/.virtualenvs/alpha_env
# 启用主进程
master=True
pidfile=/tmp/yourprojectname.pid
# 清除环境退出
vacuum=True
# 日志文件
daemonize=/home/workspace/yourprojectname/log/yourprojectname_uwsgi.log
memory-report = true
enable-threads = true
processes=4
harakiri = 60
threads=4
harakiri-verbose=True
reload-mercy = 8
max-requests = 1000
py-autoreload = 1
socket=127.0.0.1:9000

为了方便启动,我建立了个脚本,方便启动uwsgi。在项目跟目录下,新建脚本uwsgi_service.sh。然后编辑:

#!/bin/sh
base_dir=$(dirname $0)
yourprojectname_dir=${yourprojectname_dir:-$base_dir}

if [ -f ${yourprojectname_dir}/install/functions ];then
    . ${yourprojectname_dir}/install/functions
elif [ -f /etc/init.d/functions ];then
    . /etc/init.d/functions
else
    echo "No functions script found in [./functions, ./install/functions, /etc/init.d/functions]"
    exit 1
fi

PROC_NAME="yourprojectname"

start(){
	kill -INT `cat /tmp/yourprojectname.pid`
	echo "uwsgi start......."
	echo $yourprojectname_dir
	cd $yourprojectname_dir && /usr/local/python3/bin/uwsgi --ini ${base_dir}/yourprojectname_uwsgi.ini
	if [ $? == '0' ];then
		echo "start successfully"
	else
		echo "start failed"
	fi
}
restart(){
	kill -HUP `cat /tmp/yourprojectname.pid`
	if [ $? == '0' ];then
		echo "restart successfully"
	else
		echo "restart failed"
	fi
}

stop(){
	kill -INT `cat /tmp/yourprojectname.pid`
	if [ $? == '0' ];then
		echo "stop successfully"
	else
		echo "stop failed"
	fi
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;

  restart)
        restart
        ;;

  *)
        echo $"Usage: $0 {start|stop|restart|status}"
        exit 2
esac

然后赋予脚本执行权限:

chmod +x uwsgi_service.sh

这样,我们启动uwsgi时,直接执行脚本就可以了。

7 配置nginx

在/etc/nginx/conf.d/目录下,新建文件:yourprojectname.conf

编辑:

server{
        listen 5000;                               #监听5000端口
        server_name 127.0.0.1;
        charset utf-8;
        access_log /home/workspace/yourprojectname/log/yourprojectname_access.log;      #日志文件位置
        error_log  /home/workspace/yourprojectname/log/yourprojectname_error.log;
 
        client_max_body_size 75M;
 
        location / {                               #访问/时
          include         uwsgi_params;            #加载uwsgi模块
          uwsgi_pass      127.0.0.1:9000;        #将连接转到该IP
          uwsgi_read_timeout 2;
        }
        location /static/ {
            root  /home/workspace/yourprojectname/;      #访问/static时直接访问到/project/static 
            break;
        }
}

在配置好nginx和uwsgi可以先尝试启动一下项目。但是在启动之前,需要做以下初始化操作。

在虚拟环境中执行:

python manage.py makemigrations
python manage.py migrate

然后在项目根目录下新建文件夹:static 。不然启动nginx会加载不出静态文件,同时,项目最好不要放在root目录下。

新建号文件夹后,修改项目配置文件,vi settings.py,添加一条:

#STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_ROOT = '/home/workspace/yourprojectname/static'

然后执行:

python manage.py collectstatic

这样就可以把静态文件加载到指定的static目录下,让nginx正常解析。

这时候,就可以启动uwsgi和nginx了:

sh uwsgi_service.sh restart
systemctl start nginx

之前步骤正常的话,就可以看到django项目成功启动。

8 配置rabbitmq

因为rabbitmq是与celery配合使用的,所以参考以下的配置:

http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html

后台启动rabbitmq:

rabbitmq-server -detached

$ sudo rabbitmqctl add_user myuser mypassword
$ sudo rabbitmqctl add_vhost myvhost
$ sudo rabbitmqctl set_user_tags myuser mytag
$ sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"

然后在项目配置文件settings.py中添加:

CELERY_RESULT_BACKEND = 'django-db'
CELERY_BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'

在项目根目录启动celery:

celery -A projectname worker -l info -P gevent

然后重启uwsgi和nginx:

sh uwsgi_service.sh restart
systemctl restart nginx
微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixin pay_zhifubao
如果文章对您有帮助,欢迎打赏赞助作者
没有评论

发表评论

工具
Web应用代码自动化审计浅谈与工具

原文:https://xz.aliyun.com/t/4637 0. 序 代码审计是找到应用缺陷的过 …

环境搭建
科学爱国上网—-v2ray

最近一段时间shadowsocks不稳定,大家应该能感受到了。so,我觉得放弃ss,转投v2ray门 …

环境搭建
Linux CentOS7上部署virtualenvwrapper

解决centos7 中安装virtualenvwrapper配置时报错virtualenvwrapp …