1.工作原理
web客户端(浏览器)<-->Nginx<-->UWSGI(处理动态网页)<-->Django
2.软件版本
Django==2.0.2
Python==3.6
UWSGI==2.0.16
Nginx == 1.10.3
3.小项目梗概
入方向开放80/80 8000/8001端口,权限为0.0.0.0/0
阿里的ECS如果是Ubuntu系统的话,貌似需要apt-get update之后才能用(不知道为什么.......)
sudo apt-get install python3-pip
sudo pip3 install --upgrade pip
安装完了之后还可以顺手更新一下pip
sudo pip3 install uwsgi
安装速度相对慢一些
sudo pip3 install django==2.0.2
笔者用xftp上传到服务器
设置ALLOWED_HOSTS为
ALLOWED_HOSTS = ["*"]
设置DEBUG = False
DEBUG = False
在末尾加上这两行
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'static')
/home/lmc/apa(项目目录)下新建两个文件,apa_uwsgi.ini,uwsgi_params
内容如下,其中uwsgi_params的内容是死的,可以从官网上下载
uwsgi.ini
[uwsgi]
chdir = /home/lmc/apa #项目目录
module = apa.wsgi #项目的wsgi模块(wsgi.py)
master = true
processes = 10 #同时开启的进程数
socket = :8001 #和nginx通信的端口
chmod-socket = 666 #socket的权限
vacuum =true #伴随退出环境
uwsgi_params
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
在项目目录下新建一个文件apa_nginx.conf
apa_nginx.conf
upstream django{
server 127.0.0.1:8001;
} #django的数据流,注意端口8001,与前面uwsgi.ini中设置的一致
server{
listen 80;#监听80端口,HTTP一般都是这个端口,HTTPS另外再说
server_name xxx.xxx.xxx.xxx; #这里如果有域名就写域名,没有写阿里ECS公网ip地址
charset utf-8;
client_max_body_size 75M;
location /static {
alias /home/lmc/apa/static; #这个很重要,关系到静态文件的是否能够正确传输,项目下python3 manage.py collectstatic可便捷创建static文件
}
location / {
uwsgi_pass django; #交给django处理
include /home/lmc/apa/uwsgi_params; #参数表:使用uwsgi_params
}
}
到这里还不够,还要把apa_nginx.conf交给nginx才行
把/etc/nginx/sties-enabled里的default删了(一个软连接而已)
然后把建立一个和/home/apa/apa_nginx.conf的软连接(实时保持内容一致)
(sudo) cd /etc/nginx/sites-enabled
(sudo) rm default
(sudo) ln -s /home/lmc/apa/apa_nginx.conf
重新加载nginx
(sudo) /etc/init.d/nginx reload
应该显示OK,否则用nginx -t检查一下语法错误
不出意外的话,这时候直接用浏览器输入域名或者IP地址,应该就是这个效果
python3 manage.py collectstatic
会发现多了一个叫static的文件夹,而且你html文件里所需的静态文件都这正是上面apa_nginx.conf里需求的
uwsgi --ini /home/lmc/apa/uwsgi.ini
这时网页应该能够正常访问了
应该发现了,uwsgi不能退出,一退出就无法访问,但是不退出又没法干别的事情而且SSH连接不能关闭,解决办法之一是设置uwsgi开机启动。
(sudo) vim /etc/rc.local
在exit 0上面添上这么一句话:
uwsgi --ini /home/lmc/apa/uwsgi.ini
OK,大工告成