linux 服务器使用 uwsgi、nginx 部署 django 网站避坑指南

2022年7月28日17:18:14web服务器评论226 views字数 2330阅读模式
linux 服务器使用 uwsgi、nginx 部署 django 网站避坑指南
作者 | 四杆老烟枪

出品 | 脚本之家(ID:jb51net)

 linux 服务器中,使用 uwsgi、nginx 部署 django 网站,以及在部署过程中规避较为常见的坑,期望对各位同仁有所帮助。读者须知:本文不再赘述 django、uwsgi、nginx 是什么,baidu有大量文章详细介绍了这些,因此请读者自行了解

创建用例项目

mkdir /www/mysite
cd /www/mysite

# 搭建虚拟环境
python3 -m venv .env
. .env/bin/activate
python -m pip install -U pip
pip install django==3.2 uwsgi

# 创建 Django 项目
django-admin startproject conf .
python manage.py migrate

避坑一:除非项目使用的是全局环境,且全局环境安装了 uwsgi,否则必须在项目虚拟环境中安装 uwsgi。

部署项目时通常不推荐使用全局环境,所以总是得在项目虚拟环境内安装 uwsgi。

修改项目准备部署

# File conf/settings.py
DEBUG = False
ALLOWED_HOSTS = ['*']

STATIC_URL  = '/static/'
STATIC_ROOT = BASE_DIR / 'static'
# 收集静态资源
python manage.py collectstatic

避坑二:部署时一定要将 DEBUG 设置为 False,避免网页响应调试信息,且避免因 django 的静态文件搜索应用拖慢网站的运行效率。

避坑三:修改项目设置文件后,一定要收集静态资源。收集起来的静态资源将在 STATIC_ROOT 目录中,使用 nginx 进行托管。

开始部署

默认读者都已经正确配置了 uwsgi 和 nginx 配置文件,且网站可以正常访问。但是页面如下,查看 nginx 日志如下:

读者可参考附录部分进行 uwsgi 和 nginx 配置文件的配置。

linux 服务器使用 uwsgi、nginx 部署 django 网站避坑指南

2022/07/25 15:20:45 [error] 39158#39158: *18 open() "/home/one/workspace/projects/www/mysite/static/admin/js/nav_sidebar.js" failed (13: Permission denied), client: 192.168.18.8, server: 192.168.19.18, request: "GET /static/admin/js/nav_sidebar.js HTTP/1.1", host: "192.168.19.18:8000", referrer: "http://192.168.19.18:8000/admin/login/?next=/admin/"
192.168.18.8 - - [25/Jul/2022:15:20:45 +0800] "GET /static/admin/js/nav_sidebar.js HTTP/1.1" 403 196 "http://192.168.19.18:8000/admin/login/?next=/admin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.71"

从网站页面可知静态文件没有加载或者加载失败,进一步从日志中可以看见 failed (13: Permission denied),且静态文件响应 403 状态码。相信你没猜错,这就是遇到了权限问题,nginx 没有权限访问静态资源文件所导致的。只需更改 nginx 用户即可解决,读者可创建新的系统账户作为 nginx 用户,也可使用现有账户,但切记用户拥有访问静态资源文件的权限,更改 nginx 用户如下:

# File: /etc/nginx/nginx.conf
user root;
# 重启 nginx 服务
sudo service nginx restart

避坑四:修改 nginx 用户,使其有权限访问静态资源,不建议使用最高权限账户,如 root。

附录

# File: mysite/uwsgi.ini
[uwsgi]
threads = 2
processes = 1
vacuum = true
master = true
socket = 127.0.0.1:7000
chmod-socket = 660
max-requests = 1000
wsgi-file= conf/wsgi.py
chdir = /www/mysite
logto = %(chdir)/logs/uwsgi.log
pidfile = %(chdir)/logs/uwsgi.pid
stats = %(chdir)/logs/uwsgi.status
# File: /etc/nginx/conf.d/mysite.conf
server {
  listen 80;
  server_name 192.168.19.18;
  root /www/mysite;
  error_log /www/mysite/logs/nginx.log;
  access_log /www/mysite/logs/nginx.log;

  location /media/ {
    alias /www/mysite/public/;
  }

  location /static/ {
    alias /www/mysite/static/;
  }

  location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:7000;
    uwsgi_param UWSGI_SCRIPT conf.wsgi;
    uwsgi_param UWSGI_CHDIR /www/mysite/conf;
  }
}

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunwei/26173.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定