-- uwsgi+nginx部署(django)


-- 服务器环境配置

-- 导出虚拟环境的所有包

pip freeze > list.txt

-- 通过ftp软件将项目以及list.txt文件传到服务器

-- 安装并创建虚拟环境

sudo apt-get install python-virtualenv
sudo easy_install virtualenvwrapper
mkvirtualenv 虚拟环境

-- 在虚拟环境中安装所有的包

workon 虚拟环境
pip install -r list.txt

-- 更改settings.py中的debug设置

DEBUG = False
ALLOWED_HOSTS = ['*']


1.uwsgi

1.1 wsgi规范(python web server gateway interface)

# >> 相当于python3 manage.py runserver
# web服务器与python程序之间的接口;

1.2 uwsgi实现wsgi所有接口的一个服务器;

1.3 安装uWSGI

pip install uwsgi

1.4 配置uWSGI,在项目中新建uwsgi.ini

1.4.1 配置:

[uwsgi]
# socket=外网ip:端口(使用nginx连接时,使用socket)
http= 127.0.0.1:8000  # 外网ip:端口(直接做web服务器,使用http)
chdir= ''  # 项目根目录
wsgi-file= '' # 项目中wsgi.py文件的目录,相对于项目根目录
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log


1.4.2 启动:uwsgi --ini uwsgi.ini

1.4.3 停止:uwsgi --stop uwsgi.pid

1.4.4 重启:uwsgi --reload uwsgi.pid

1.4.5 使用http协议查看网站运行情况,运行正常,但是静态文件无法加载


2.nginx

-- 作用

1.负载均衡;多台服务器轮流处理请求;

2.反向代理;请求nginx服务器,再转向我们的服务器;隐藏真实服务器;

-- 实现构架

# 客户端请求nginx,再由nginx请求uwsgi,运行django框架下的python代码;

2.1 安装nginx

sudo apt-get nginx

# 或者下载压缩文件:

# 解压缩:
# tar zxvf nginx-1.6.3.tar.gz
# 进入nginx-1.6.3目录依次执行如下命令进行安装:
# ./configure
# make
# sudo make install

2.2 默认安装到/usr/local/nginx目录,进入此目录执行命令

2.3 查看版本:sudo sbin/nginx -v

2.4 启动:sudo sbin/nginx

2.5 停止:sudo sbin/nginx -s stop

2.6 重启:sudo sbin/nginx -s reload

2.7 通过浏览器查看nginx运行结果

2.8 指向uwsgi项目:编辑conf/nginx.conf文件

# sudo gedit conf/nginx.conf
# 在server下添加新的location项,指向uwsgi的ip与端口(请求路径)
# location / {
#     include uwsgi_params;将所有的参数转到uwsgi下
#     uwsgi_pass 192.168.196.128:8080 # uwsgi的ip与端口;
# }

2.9 修改uwsgi.ini文件,启动socket,禁用http

# socket=127.0.0.1:8000
# 重启nginx、uwsgi
# sudo sbin.ngix / uwsgi --ini uwsgi.ini
# 在浏览器中查看项目,发现静态文件加载不正常,接下来解决静态文件的问题

3.静态文件

# 静态文件都会由nginx处理,不会将请求转到uwsgi

3.1 配置nginx的静态项,打开conf/nginx.conf文件,找到server,添加新location

# location /static {
# 转向test5项目下这个路径
# alias /var/www/test5/static/;
# }

3.2 在服务器上创建目录结构“/var/www/test5/”

# test5与项目名称相同;

3.3 修改目录权限

sudo chmod 777 /var/www/test5

3.4 创建static目录,注意顺序是先分配权限,再创建目录

mkdir static # chomod 777 static

3.5 修改settings.py文件

STATIC_ROOT='/var/www/test5/static/' # 用于采集静态文件;
STATIC_URL='/static/'

3.6 收集所有静态文件到static_root指定目录

python manage.py collectstatic

3.7 重启nginx、uwsgi

# /usr/local/nginx
# sudo sbin.ngix / uwsgi --ini uwsgi.ini