virtualenv 和 supervisor 在自带的centos 2.7.5已经安装好了,但是我的项目用的是python3.6所以需要自己编译好python3.
如果你使用的virtualenv 是python3务必uwsgi也使用python3!否则会出现ImportError: no module named site
的错误,这个错误是因为你uwsgi配置中的home
env的环境和uwsgi运行python版本不一样导致!
我使用的系统的centos7
# 卸载centos7中python2.75的uwsgi
pip uninstall uwsgi
# 下面这一步是有时候可能pip卸载不干净所以直接把python2的uwsgi移动到任意一个目录
mv /usr/bin/uwsgi ~
我的项目目录如下
.
├── blog
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── __init__.py
│ ├── models.py
│ ├── __pycache__
│ ├── templatetags
│ ├── tests.py
│ └── views.py
├── django_blog
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── __pycache__
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
│ └── wsgi.pyc
├── manage.py
├── README.md
├── requirements.txt
├── static
│ ├── css
│ ├── js
│ └── lib
├── templates
│ ├── 404.html
│ ├── about.html
│ ├── archives.html
│ ├── base.html
│ ├── index.html
│ ├── nav.html
│ ├── post.html
│ └── tag.html
├── uwsgi.ini
└── uwsgi.sock
1.安装uwsgi和配置uwsgi.ini
文件
# 这一步是在系统全局环境中(3.6下进行)
pip3 install uwsgi
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# 在project下创建你的uwsgi.ini文件
vim uwsgi.ini
[uwsgi]
uid = root
gid = root
chmod-socket = 777
basedir=/usr/local
# 项目目录
chdir=%(basedir)/django_blog
# 指定项目的application
module=django_blog.wsgi:application
# virtualenv路径
home=/usr/local/env_django
# 启用主进程
master=true
# 进程数量
processes=2
# 指定sock的文件路径
socket=/usr/local/django_blog/uwsgi.sock
# 清除环境退出
vacuum=true
# 日志文件(如果使用的是supervisor管理就不需要开启)
#daemonize=/var/log/uwsgi.log
# 启动uwsgi
uwsgi --ini uwsgi.ini
# 查看启动是否成功
ps -ef | grep uwsgi
2.使用supervisor 管理uwsgi
#重定向配置文件到目录
echo_supervisord_conf > /etc/supervisord.conf
chmod +x /etc/supervisord.conf
稍微修改一下配置文件最后的引入文件
mkdir /etc/supervisor
vim /etc/supervisord.conf
修改supervisord.conf
的最后2行,修改导入配置文件
[include]
files = /etc/supervisor/*.conf
启动supervisor
supervisord -c /etc/supervisord.conf
增加配置文件
vim /etc/supervisor/django.conf
[program:django]
directory = /usr/local/django_blog ;命令执行目录
command = /usr/bin/uwsgi --ini /usr/local/django_blog/uwsgi.ini
autostart = true ;默认随supervisord自动启动,默认true
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ;程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
redirect_stderr = true ;重定向错误
stdout_logfile = /var/log/uwsgi.log ;这里日志需要手动创建否则无法启动
进入supervisorctl
重载配置
reload
3.配置nginxuwsgi.sock
的权限,以及注意关闭debug后**,django是不解析静态文件的,静态文件需要交给nginx来解析
这里需要注意,而且记得使用python manage.py collectstatic
不然django admin的静态文件会404**
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass unix:///usr/local/django_blog/uwsgi.sock;
}
location /static {
expires 15d;
autoindex on;
alias /usr/local/django_blog/static/;
}
systemctl start nginx