Django项目部署
搭建生产环境思路
- 安装环境
- 测试环境
- 测试uwsgi代理项目
- 测试Nginx代理静态文件
- uwsgi与nginx连接
- 项目部署成功
环境介绍
- Ubuntu 16.04
- Nginx 1.10.3
- uwsgi 2.0.12
- Python 3.5.2
安装nginx
- 官方指定安装方式:
- 先获取公钥 wget https://nginx.org/keys/nginx_signing.key
-
再添加公钥 sudo apt-key add nginx_signing.key
-
在源文件中添加 sudo vi /etc/apt/sources.list
- deb http://nginx.org/packages/ubuntu/ xenial nginx
- deb-src http://nginx.org/packages/ubuntu/ xenial nginx
-
注意:xenial是Ubuntu的发布版本
-
安装nginx
- apt-get update
-
apt-get install nginx
-
启动nginx:sudo nginx
- 在浏览器中输入:127.0.0.1 进入nginx欢迎页,安装成功
- 停止nginx服务:sudo nginx -s stop | quit
安装uwsgi
- 楼主使用系统uwsgi,避免在每个虚拟python环境中安装uwsgi
- 安装命令:apt install uwsgi
- 说明:如果使用在python环境中安装uwsgi,可能会在uwsgi与nginx连接时出现无法连接的情况。
使用uwsgi代理项目
- 编写配置文件 myproject.ini
-
使用http代理
[uwsgi]
# 直接作为web服务器使用
http=0.0.0.0:8010
# 配置工程目录
chdir=/var/www/DjangoProject/p_name
# 配置项目的wsgi目录。相对于工程目录
wsgi-file=p_name/wsgi.py
#配置进程,线程信息
processes=2
threads=2
# 多线程开关
enable-threads=True
# 主进程,主线程模式
master=True
# 启动端口号
pidfile=uwsgi.pid
# 日志
daemonize=uwsgi.log
-
启动uwsgi:uwsgi --ini myproject.ini
- 浏览器测试项目运行正常
使用nginx代理静态文件
- 复制出nginx的默认配置文件,cp /etc/nginx/nginx.conf
- 修改location,server_name,root,添加静态资源的路径
-
myproject.conf
user nginx; # 用户,用户组
worker_processes 1; # 工作组数量
error_log /var/log/nginx/error.log warn; # 日志文件
pid /var/run/nginx.pid; # nginx启动后生成的文件
events {
worker_connections 1024; # 工作链接数量
}
http {
include /etc/nginx/mime.types; # mime什么鬼
default_type application/octet-stream; # 默认类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65; # 响应超时设置
#gzip on; # 支持压缩文件传输
include /etc/nginx/conf.d/*.conf; # 默认启动的配置文件
# 需要添加的项目配置
server {
listen 80; # 监听端口
server_name 127.0.0.1; # 域名,localhost,ip
charset utf-8;
root /var/www/; # 静态文件根目录
#index hello.html;
location /static { # 静态文件部署
alias /var/www/static/; # 指向地址
}
}
}
-
使用配置文件启动nginx:nginx -c conf_path(配置文件的绝对路径)
- 浏览器访问:127.0.0.1/static,查看项目的静态资源,检测是否成功
uwsgi与nginx连接
- 使用scoket
- 在nginx配置文件中添加uwsgi_params的文件路径
# 需要添加的项目配置
server {
listen 80; # 监听端口
server_name 120.120.120.120; # 域名,本机ip
charset utf-8;
root /var/www; # 静态文件根目录
location / {
include /etc/nginx/uwsgi_params; # 指向桥接文件
uwsgi_pass 127.0.0.1:8010; # 与uwsgi配置文件的scoket端口一致
}
location /static { # 静态文件部署
alias /var/www/static/; # 指向静态文件地址
}
}
- 说明:此文件是作为uwsgi和nginx的桥接作用,端口号设为一致。
- 项目模式改为生产模式,即DEBUG=False
测试项目部署成功
- 浏览器测试