NginxuWSGI部署Django项目

4次阅读

共计 1523 个字符,预计需要花费 4 分钟才能阅读完成。

项目环境

服务器:阿里云 ECS;系统版本:centos8.0;Nginx 版本:0.14.1;uWSGI 版本:2.0.18;Python 版本:3.6.0。

项目依赖及版本如下:

Django==2.0
django-mdeditor==0.1.17.1
django-model-utils==4.0.0
django-notifications-hq==1.6.0
Markdown==3.2.1
PyMySQL==0.9.3

登录阿里云控制台开放端口

  1. 配置 http80 和 Django 服务的端口
  2. 配置 uWSGI 启动 Django 服务
  • 在项目根目录下创建 uwsgi.ini 文件,vi uwsgi.ini输入以下内容:
[uwsgi]
#使用 nginx 连接时使用
socket=127.0.0.1:8000
#直接做 web 服务器使用 python manage.py runserver ip:port
#http=0.0.0.0:8000
#项目目录
chdir=/root/project/myblog
#项目中 wsgi.py 文件的目录,相对于项目目录
wsgi-file=myblog/wsgi.py
#指定启动的工作进程数
processes=2
#指定工作进程中的线程数
threads=2
#指定在这些进程里有一个主进程
master=True
#保存启动之后主进程的 pid
pidfile=uwsgi.pid
#设置 uwsgi 后台运行,uwsgi.log 保存日志信息
daemonize=uwsgi.log
#设置日志文件最大字节数
log-maxsize = 100000
#设置每个进程最大请求数
max-requests = 1000
#设置虚拟环境的路径
virtualenv=/root/anaconda3/envs/myblog

也可参考 Django 官方文档,Nginx 中文文档自定义配置。

  • uwsgi 命令
启动服务:uwsgi --ini uwsgi.ini
停止服务:uwsgi --stop uwsgi.pid

配置 Nginx 启动静态文件服务

  • 进入 /etc/nginx/conf.d 文件夹,新建自己的项目配置文件myproject.conf,输入下面的配置。
server {
    listen 80;
        server_name ip;
        charset utf-8;
        client_max_body_size 75M;
        location /static {alias /root/project/myblog/static;}

    location /media {alias /root/project/myblog/media;}

    location / {
        uwsgi_pass 127.0.0.1:8000;
        include /etc/nginx/uwsgi_params;
    }

}
  • 重启 Nginx 服务 service nginx restart

遇到的问题及解决方法

问题一:nginx 静态资源文件无法访问,403 forbidden 错误
解决方法:在 nginx.conf 配置文件头部加user root

user root;
worker_processes 8;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {worker\_connections 1024;}
... ...

如果后台站点样式无法显示,则是未进行静态文件收集操作的原因,可在终端输入 python manage.py collectstatic 解决。前提是许在 settings.py 文件配置好 STATIC_ROOT = os.path.join(BASE_DIR, "static")

正文完
 0