Django部署

我们开发时使用的runserver命令启动调试服务器,但这个调试服务器性能和稳定性是远远无法满足生产环境需求的,这篇笔记介绍如何在Linux服务器上部署Django项目。这里Django使用的是uwsgi处理动态请求,由Nginx进行转发以及处理静态资源请求。Django的部署步骤是比较多的,这里我们按照最佳实践的顺序来依次介绍,一般按照步骤操作就不会有什么问题。

Linux系统依赖安装

Nginx

通常来说,我们是需要一个Nginx来转发请求的,它负责为静态资源请求返回文件,并将动态请求反向代理到uwsgi服务上。Nginx安装和Django没什么关系,我们可以直接参考Nginx或OpenResty相关章节。

安装数据库

如果你的工程使用MySQL、PostgreSQL等可能需要安装对应的数据库服务器,具体可以参考数据库相关章节。

uwsgi

安装uwsgi。

apt install uwsgi

其他依赖

如果工程还依赖其他扩展,则需要依次手动安装。

进行数据迁移

数据迁移前,首先确认工程的数据库配置是否正确,服务器中数据库是否已经建好,文本编码是否正确(一般都是采用utf8mb4)。确认无误后,使用如下命令检查并生成新的数据迁移。

python3 manage.py makemigrations <app名>
python3 manage.py migrate

发布静态资源

使用Nginx转发静态资源时,我们需要用collectstatic将所有静态文件配置到静态资源文件夹。这里所说的静态文件,常见的包括:我们编写的CSS、JS文件,DjangoAdmin面板的CSS、JS文件,DRF接口预览页面的CSS、JS文件等等。collectstatic能将所有这些文件合并放到一个文件夹。

python3 manage.py collectstatic

注:使用该命令,需要在工程配置中指定STATIC_URLSTATIC_ROOT,分别用于配置静态文件的URL路径和静态文件夹在文件系统中的位置,下面是一个例子。

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

此外,静态文件夹也可以用绝对路径指定到工程外部,比如/var/www/html/blog/static/。不过如果你的Django工程完全是个后端接口项目,则不需要该步骤。

配置uwsgi

我们参考Django官网和uwsgi官网进行配置。这里假设我们的工程名为blog,在工程根目录存在blog/wsgi.py文件。我们可以在任意位置编写一个uwsgi.ini(我的习惯是搭建项目时在工程中写好):

uwsgi.ini

[uwsgi]
chdir = /home/ubuntu/blog/
wsgi-file = /home/ubuntu/blog/blog/wsgi.py
processes = 4
threads = 2
http-socket = 127.0.0.1:8080
daemonize = /var/log/uwsgi/gacfox-blog.log
env = DJANGO_SETTINGS_MODULE=blog.env.settings_prod
virtualenv = /root/gacfox.com/gacfox-blog/blog/venv
plugin = python3

配置文件中daemonize指定了uwsgi使用守护进程模式以及输出日志位置,我们不需要手动使用nohup等命令。env指定了生效的配置文件,我们在开发Django工程时可能涉及开发、测试、生产等不同环境,我们可以给这些环境指定不同的配置文件。

启动uwsgi服务可以使用如下命令。

uwsgi --ini uwsgi.ini

配置nginx

这一步就比较简单了,方法也不唯一。我们这里主要是对动态请求的转发和静态请求的路径处理。注:这里我的静态资源发布到了/var/www/html/blog/static文件夹下。

location / {
  proxy_pass http://127.0.0.1:8080;
}

location /static/ {
  root /var/www/html/blog/;
}

这里配置的比较简易,真实上线项目中,Nginx配置的会非常复杂,需要根据具体情况进行配置。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap