用NGINX+uWSGI+python+virtualenv+Django搭建服务器发布项目+linux开发环境
在centos7或ubuntu中安装软件python+virtualenv+django+nginx+uwsgi
安装步骤和内容参考:https://www.cnblogs.com/yanjidong/articles/13193141.html
安装pycharm+mariadb+aria2等工具
安装步骤和内容参考:https://www.cnblogs.com/yanjidong/articles/13222495.html
配置uwsgi
1.使用py文件,测试启动uwsgi
# test.py,进入myprojects目录touch(vim) test.py,
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
# 运行
uwsgi --http :8001 --wsgi-file /opt/myprojects/test.py
2.使用modele参数启动uwsgi+django
uwsgi --http :9000 --module zqswoa.wsgi --py-autoreload=1 # --py-autoreload=1 热加载:项目有更新 自动重新加载,保持随时更新状态
3.使用INI配置文件启动uwsgi+django
uwsgi -d --ini /opt/myProjects/zqswoa/uwsgi.ini #-d 后台运行
[uwsgi.ini]
http=76.20.82.107:9000
chdir=/opt/mProjects/zqswoa
wsgi-file=zqswoa.wsgi
master = true
process=4
threads=2
pidfile=uwsgi.pid
daemonize=/opt/myPrejects/zqswoa/uswgi.log
停止uwsgi
如果ini里有uwsgi.pid
uwsgi --stop uwsgi.pid
uwsgi --reload uwsgi.pid #重启
如果没有
ps -ef | grep uwsgi
pkill -f uwsgi -9
下面接着建立uWSGI的配置文件,在自己工程目录下创建uwsgi.ini文件,写入以下内容
[uwsgi]
socket = 127.0.0.1:9090
chdir=/wwwroot/destiny
module=destiny.wsgi
master = true
processes=2
threads=2
max-requests=2000
chmod-socket=664
vacuum=true
daemonize = /wwwroot/destiny/uwsgi.log
其中的socket字段值”127.0.0.1:9090”必须要和上面写的density.conf配置文件中的uWSGI监听地址完全一样;
chdir指自己工程的绝对路径;
module指的是wsgi.py在自己工程中的相对路径,”.”指代一层目录;我的django工程的wsgi.py文件是在”/wwwroot/destiny/destiny/wsgi.py”,所以写成destiny.wsgi;
daemonize指定uWSGI日志的存储路径。
好了,现在理一下路径:
工程路径: /wwwroot/destiny
工程静态文件路径: /wwwroot/destiny/destiny/static
wsgi.py的路径: /wwwroot/destiny/destiny/wsgi.py
uwsgi.ini的路径: /wwwroot/destiny/uwsgi.ini
uwsgi日志路径: /wwwroot/destiny/uwsgi.log
destiny.conf的路径: /wwwroot/destiny/destiny.conf
uwsgi_params的路径: /etc/nginx/conf/uwsgi_params
nginx访问日志路径: /wwwroot/destiny/nginx_access.log
nginx错误日志路径: /wwwroot/destiny/nginx_error.log
可以发现,我几乎把所有有关工程的配置文件和日志文件都放在工程目录下了,方便后期维护与查错。
启动uWSGI
sudo uwsgi --ini /wwwroot/destiny/destiny.ini
配置NGINX
首先确认自己准确的知道nginx的默认配置文件目录(nginx.conf)的路径,如果不清楚,请使用如下命令获取:
nginx -t
大概会列出以下类似信息:
nginx: the configuration file /etc/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/conf/nginx.conf test is successful
里面说明了nginx默认配置文件的路径是:/etc/nginx/conf/nginx.conf;
然后,确保nginx.conf的同目录下有uwsgi_params文件(/etc/nginx/conf/uwsgi_params),没有的话根据链接获取, 后面要用到。
在自己的工程目录下,建立如destiny.conf(/wwwroot/destiny/destiny.conf)的配置文件;复制nginx.conf里面全部的内容,全部写入destiny.conf中。
然后按照下面写的,把destiny.conf配置文件中的server段部分全部替换掉。
server {
listen 80;
server_name localhost;
charset utf-8;
access_log /wwwroot/destiny/nginx_access.log;
error_log /wwwroot/destiny/nginx_error.log;
client_max_body_size 75M; //上传文件大小
location /static {
alias /wwwroot/destiny/destiny/static;
}
location / {
include /etc/nginx/conf/uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
}
其中的 listen 80代表服务器开放80端口;
location [目录名]代表项目路径的引导;
access_log 和error_log是定义nginx访问日志和错误日志的存放路径。
“location /static”中的”/static”是自己定义的项目引用静态文件时,浏览器中显示的静态资源所在的根目录名;这样的话,用户在浏览器中查看到的所有image、css或js资源都是处在http://127.0.0.1/static下的。
django静态文件的绝对路径是根据自己的实际情况来确定的,一般在自己的django的app名/static目录下,或自己python manage.py collectstatic
后的路径下。像我的是在/wwwroot/destiny/destiny/static根目录下。
“location /”是指访问项目根目录时,nginx要做的事。其中需要指定 uwsgi_params文件的绝对路径,上面已经提到了;如果还有media文件��类的静态目录,仿照static的写法,自己补充。
127.0.0.1:9090是指uWSGI绑定的监听地址,这里使用了9090端口。
需要注意的是,请确认自己django的静态文件目录所有者是www用户,如果不是,请用以下命令更改静态目录权限归属者
:sudo chown -R www:www /wwwroot/destiny/destiny/static
在
location / {
......
client_max_body_size 75M; //上传文件大小
}
启动nginx
在这之前,我们要先去nginx配置文件的根目录拷贝mime.types(/etc/nginx/conf/mime.types)到工程目录(/wwwroot/destiny/mime.types),和destiny.conf放在一起。
否则用配置文件启动nginx会报错:
nginx: [emerg] open() "/**/**/**/mime.types" failed (2: No such file or directory)
如果nginx已经开启,先关闭nginx(service nginx stop),再执行以下命令:
nginx -c /wwwroot/destiny/destiny.conf
这里的-c 表示加载配置文件启动