Django + Nginx + Uwsgi部署项目


Django + Nginx + Uwsgi部署项目

本章使用版本

项目使用Ubuntu 18.04.1 LTS,django2.0,Python3.6.8、nginx、uWSGI,Ubuntu 部署

安装uwsgi

注意权限问题

sudo pip3 install uwsgi
关于pip镜像加速源 可以使用国内的
sudo pip3 install uwsgi -i https://pypi.douban.com/simple/

根据官方文档说明 uWSGI支持通过简单磁盘文件以外的几种方法来加载配置文件

uwsgi --ini http://uwsgi.it/configs/myapp.ini # HTTP
uwsgi --xml - # standard input
uwsgi --yaml fd://0 # file descriptor
uwsgi --json 'exec://nc 192.168.11.2:33000' # arbitrary executable

安装后,进入项目目录 新建xxx.xml文件 并输入以下代码:

<uwsgi>    
   <socket>127.0.0.1:8000</socket><!-- 内部端口,自定义 --> 
   <chdir>/home/ubuntu/project/xxx/</chdir><!-- 项目路径 -->            
   <module>xxx.wsgi</module> 
   <processes>4</processes> <!-- 进程数 -->     
   <daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>

uwsgi 开启命令

# 启动uwsgl
uwsgi -x mysite.xml

# 查看uwsgi是否开启成功
ps -ef|grep uwsgi
# 删除进程 如果想重启uwsgi, 先删除进程 后重启uwsgi
killall -9 uwsgi

上述是第一种方式 还可以使用 .ini文件方式 设置uwsgi属性

[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:8000
#配置项目路径,项目的所在目录
chdir=/home/ubuntu/project/xxx/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=xxx/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log
#更新代码后自动重启
py-autoreload=1
#开启内存使用情况报告
memory-report=true
#不记录request日志,只记录错误日志
disable-logging=true
#优雅重启
lazy-apps=true
#log日志
log-maxsize = 50000000

uwsgi开启·重启·停止命令

# 开启
uwsgi --ini uwsgi.ini
效果:
[uWSGI] getting INI configuration from uwsgi.ini

# 停止运行uwsgi,通过包含主进程编号的文件设置停止项目
uwsgi --stop uwsgi.pid

# 重启uwsgi
uwsgi --reload uwsgi.pid

Uwsgi官方文档

安装nginx

安装nginx 有很多方式 网上也可以找到n+1种方式 在这里选用在线安装

apt-get install nginx

在线安装说明:

启动nginx的程序文件 /usr/sbin/nginx
日志放在了/var/log/nginx中,分别是access.log和error.log
并已经在/etc/init.d/下创建了启动脚本nginx

在线启动-重启

# start
/etc/init.d/nginx start

# restart
/etc/init.d/nginx restart

Nginx官方中文手册

接下来 配置nginx 首先备份一下nginx.conf文件 以防出现问题

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

然后重新将nginx.conf文件内容删除 重新搭配一份

events {
worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen       80;
        server_name  域名/公网ip;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8000; # 端口需要跟uwsgi.ini/uwsgi.xml文件里面的配置一样
           uwsgi_param UWSGI_SCRIPT xxx.wsgi;
           uwsgi_param UWSGI_CHDIR /home/ubuntu/project/xxx/; # 项目路径

           location /static/ {
                alias /home/ubuntu/project/xxx/static/; # 静态资源
           }
        }
    }
}

输入命令 查看当前配置是否有问题>

uuu@VM-8-16-ubuntu:/etc/nginx$ sudo nginx -t
# 效果如下:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启Nginx

uuu@VM-8-16-ubuntu:~$ sudo /etc/init.d/nginx restart
# 效果如下:
[ ok ] Restarting nginx (via systemctl): nginx.service.

进入项目 跟uwsgi.ini/uwsgi.xml文件同级下 启动uwsgi

# xml启动方式
uwsgi -x xxx.xml
# ini启动方式
uwsgi --ini uwsgi.ini

# 上述已经有启动方式

上述配置完成后 打开浏览器 发现项目静态文件访问不到 403 或者没有获取到静态资源样式

# 1. 修改nginx的配置文件 在最上面 加上 user root;
sudo vim /etc/nginx/nginx.conf
user root;
events {
worker_connections  1024;
}
...

# 收集CSS样式,在终端输入:
python manage.py collectstatic

# 运行这个命令之后,就会自动把后台CSS样式收集到/static/目录下。刷新页面就能恢复样式!

ok 部署完成 后期会带上 https/多站点部署


文章作者: 柒仔
文章链接: /article/16/
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 XiaoLiu!
侵权声明: 若无意对您的文章造成侵权,请您留言,博主看到后会及时处理,谢谢。
评论-----昵称和邮箱必填,网址选填
  目录