使用uwsgi、nginx进行Django项目的服务器部署
文章使用前提:
Django项目已经开发完成
已经将文件上传至服务器(rz命令)
在服务器创建Django项目依赖的python虚拟环境
参考命令:
# 查看python版本:
python -V
# 查看是否安装virtualenv
pip show virtualenv
# 没有没有查看到virtualenv相关信息,需要安装
pip install virtualenv
# (我的Django项目是基于python 3.6.8)
# 下载python安装包
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
# 解压至指定目录
tar zxvf Python-3.6.8.tgz -C /usr/Test/
cd /Python-3.6.8
# 配置安装目录
./configure --prefix=/usr/Test/Python-3.6.8
# 编译安装文件
make && make install
# 建立软连接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
# 指定python版本,创建虚拟环境py3env
virtualenv -p python3 pye3env
# 进入创建的虚拟环境
source py3env/bin/activate
安装uwsgi
# 安装的uwsgi
pip install uwsgi
- 测试使用一下安装的uwsgi:
创建测试用到的脚本test.py:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
- 启用uwsgi,调用脚本
# 192.168.16.45:9000 服务器地址及端口号
uwsgi --http 192.168.16.45:9000 --wsgi-file test.py
# 如果端口号被占用,更改端口号即可。查看端口号是否被占用
stat -ano | grep 9000
-
在本地浏览器访问192.168.16.45:9000,如果看到"Hello World",说明uwsgi配置成功。
-
使用uwsgi配置Django项目
# 替换test.py为Django项目中的wsgi.py
uwsgi --http 192.168.16.45:9000 --file ../TestBlogs/wsgi.py
- 在本地浏览器访问192.168.16.45:9000,即可看到Django项目。
进一步优化
将uwsgi的参数写在配置wsgi.ini中,这里使用ini类型文件。同时在文件中配置pidfile、stats、log文件。
# TestBlogs_wsgi.ini file
[uwsgi]
# Django-related settings
http = 192.168.16.45:9000
# the base directory (full path)
chdir = /usr/TestBlogs/TestBlogs
# Django s wsgi file
module = TestBlogs.wsg
# master
#master = true
# maximum number of worker processes
processes = 1
chmod-socket = 664
clear environment on exit
vacuum = true
buffer-size = 30000
pidfile = %(chdir)/conf/uwsgi.pid
stats = %(chdir)/conf/uwsgi.status
daemonize = uwsgi.log
pidfile文件的使用,该文件记录uwsgi的PID,可以通过该文件控制uwsgi的关闭、重启。
# 进程中查看uwsgi
ps aux | grep uwsgi
# 重启
uwsgi --reload uwsgi.pid
# 关闭
uwsgi --stop uwsgi.pid
stats文件,用来查看uwsgi的运行状态。
uwsgi --connect-and-read uwsgi.status
配置安装nginx
# 下载nginx
wget http://nginx.org/download/nginx-1.9.9.tar.gz
# 解压文件
tar zvxf nginx-1.9.9.tar.gz
# 配置安装目录
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
# --prefix=path 定义Nguni 服务所在的文件夹,服务根路径,用于设置其他由configure设置的相对路径(除了用到的源库路径)。默认是/usr/local/nginx。
# --with-http_ssl_module —— 启用编译一个支持把https加到http服务的模块。该模块默认不编译,依赖OpenSSL库
# --with-pcre=path —— 设置pcre库源码路径。该库是正则表达式所必须的,推荐安装。
# 运行nginx默认配置,检查是否成功安装,在本地访问服务器地址,看到nginx页面
/usr/local/webserver/nginx/sbin/nginx -d /usr/local/webserver/nginx/conf/nginx.conf.deafult
- 修改配置文件
vi /usr/local/webserver/nginx/conf/nginx.conf
文件内容
# nginx.conf file
http{
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 9010;
server_name localhost;
location / {
include /usr/local/webserver/nginx/conf/uwsgi_params;
uwsgi_pass 192.168.16.45:9000;
uwsgi_param UWSGI_SCRIPT TestBlogs.wsgi;
uwsgi_param UWSGI_CHDIR /usr/TestBlogs/TestsBlogs;
root /usr/TestBlogs/TestBlogs;
#index index.html index.htm;
client_max_body_size 35m;
}
location /static/ {
alias /usr/TestBlogs/TestBlogs/static/;
expires 30d;
}
location /media/ {
alias /usr/TestBlogs/TestBlgos;
expires 30d;
}
}
}
启动:
uwsgi --ini wsgi.ini & /usr/loca/webserver/nginx/sbin/nginx