-- 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