本文目的:在centos7.x服务器上利用nginx和uwsgi部署Django应用
0. 安装python3
本文使用的服务器是腾讯云的centos7.0 64位,其他的Linux大同小异,部分安装命令自行查询。
首先安装python3的环境,还有各种组件,一开始装的时候各种问题都有,然后用了 @小小Ho 的让Python3.6在Centos7.x上飞一会儿~这里的一键脚本,顺利装完。
wget https://raw.githubusercontent.com/LunacyZeus/Python3.6-for-Centos7.0/master/install.sh && sh install.sh
测试pip安装
python3 -m pip install --upgrade pip
python3 -m pip install requests
没有报错就是安装好了py3
1. Django应用
从仓库下载代码,这里假设django应用的文件夹叫myblog,应用的数据库用的是mysql
git clone <yourcode>
cd myblog
# 安装虚拟环境
python3 -m pip install virtualenv
virtualenv venv
. venv/bin/activate
# 安装依赖文件
pip install -r requirements.txt
# 静态文件处理
python manage.py collectstatic
接着是数据库迁移
安装好的mysql先设置密码
mysql -u root -p
> set password for 'root'@'localhost' =password('password');
还有设置远程连接的话
> grant all privileges on *.* to root@'%'identified by 'password';
然后新建django中用到的数据库名,修改setting.py里的密码,就可以进行数据库迁移等。
python manage.py migrate
python manage.py createsuperuser
....
python manage.py runserver 0.0.0.0:8001
然后打开服务器的公网查看,可以加载就是work了,但是还没有静态文件的加载。
2.0 uwsgi & nginx
1,首先nginx 是对外的服务接口,外部浏览器通过url访问nginx。
2,nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,uwsgi 接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,wsgi 根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,uwsgi接收wsgi 发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。
3,要知道第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程,但是要考虑到某些情况
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
2.1 uwsgi
先安装配置uwsgi
(venv) pip install uwsgi
测试一下是否可用:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return b"Hello World"
运行
uwsgi --http :8000 --wsgi-file test.py
打开<公网:8000>看到Hello world就说明已连通
the web client <-> uWSGI <-> Python
接着在项目目录下新建uwsgi.ini文件
# vim uwsgi.ini
[uwsgi]
# Django-related settings
socket = :8001
# the base directory (full path)
chdir = /root/myblog
# Django s wsgi file
module = blog.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
参数的配置文档在此:Python/WSGI 应用快速入门
然后运行:
uwsgi --ini uwsgi.ini
# 后台运行
# uwsgi --ini mysite_uwsgi.ini --logto mysite.log &
打开<服务器公网:8000>就能访问你的网页了。
2.2 nginx
centos的nginx安装, 地址:http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx
# 开启
systemctl start nginx.service
访问ip可以看到上图就安装成功。
在/etc/nginx/conf.d下新建blog.conf
server {
listen 80;
server_name 127.0.0.1 <yoursite.com>;
charset utf-8;
client_max_body_size 75M;
# media文件夹
location /media {
alias /root/myblog/media;
}
# static文件夹
location /static {
alias /root/myblog/static;
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
}
}
然后
nginx -t # 检查文件
service nginx restart # 重启nginx
然后再把uswgi服务开启就可以访问站点了
uwsgi --ini uwsgi.ini
❈
作者:yonggege,Python中文社区专栏作者
GitHub地址:https://github.com/wzyonggege
❈