1.说明
关于在Linux上使用uwsgi部署Django的项目的过程并不难,主要是配置文件的写法,尤其是nginx的配置文件,本文在Ubuntu20.04上通过uwsgi和nginx部署Django项目
2.安装环境
安装环境主要有Nginx、Python、MySQL、Redis,可以根据你的实际情况进行安装
2.1 安装nginx
大多数发行版Linux都支持通过包管理器直接安装nginx,如果不支持,那你就只能去网上找一下通过编译源码的方式安装nginx了。我这里是在Ubuntu20.04安装,可以直接通过apt命令安装nginx
sudo apt update
sudo apt install nginx
安装完之后,它会自动运行nginx,访问一下本机的IP(http://localhost
也行),如果看到Welcome to nginx!
的页面提示,说明安装成功了
2.2 安装python
由于我使用Ubuntu20.04已经自带Python3.8,所以我这里就直接使用Python3.8了,如果你需要其他版本,可以参考一下之前的文章
【Linux】Linux系统安装Python3和pip3
我这里只需要再安装一个pip
sudo apt install python3-pip
之后自己安装一下项目需要用到的库就好,至少把Django项目能用runserser跑起来
2.3 安装mysql
安装MySQL可以参考
【mysql】Ubuntu18安装MySQL、忘记root密码
如果安装通过pip安装mysqlclient报错,可以基本上因为少了某些依赖
sudo apt install build-essential
sudo apt install pkg-config
sudo apt install libmysqlclient-dev
sudo apt install default-libmysqlclient-dev
2.4 安装redis
如果你的项目需要安装Redis,可以参考
【redis】redis简介、安装、连接指定库
3.收集静态文件
打开Django配置文件(一般是settings.py
),把DEBUG
改为False
,然后用STATIC_ROOT
写上收集静态文件存放的路径,可以使用绝对路径放到任意有权限的位置,但它会覆盖已有文件,所以建议该路径与STATICFILES_DIRS
不同,我这里是/home/pan/productions/static
DEBUG = False
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = '/home/pan/productions/static'
修改好配置文件之后,就可以通过collectstatic
收集静态文件了,这个操作就是把Django项目中用到的静态文件复制一份到指定文件夹,目的是为了方便nginx代理
python3 manage.py collectstatic
如果没有报错的话,打开STATIC_ROOT
路径应该可以看到已经收集好的静态文件了
4.使用uwsgi启动
4.1 安装uwsgi
首先需要安装uwsgi,使用pip安装就行
sudo pip install uwsgi
安装好之后在终端执行一下uwsgi
如果有输出那就可以了
4.2 uwsgi配置文件
新建一个ini文件,比如说uwsgi.ini
,下面是我的uwsgi.ini
配置文件的写法,把该文件放在manage.py
所在目录就行
[uwsgi]
# 启动项目的IP端口,可以使用IP端口也可以使用本地文件
socket = 127.0.0.1:8000
# socket = /path/to/your/mysite/mysite.sock
# 项目目录(一般是manage.py所在目录)
chdir = /home/pan/productions/baiduwp_python/baiduwp_python
# 指定项目里的wsgi.py,绝对路径和相对路径都行
wsgi-file = baiduwp_python/wsgi.py
# 进程数
processes = 1
# 线程数
threads = 2
# 主程序
master = True
# 存放pid文件路径
pidfile = uwsgi.pid
# 存放日志文件路径
daemonize = uwsgi.log
# 缓存大小,如果提示缓存不够就需要改大一点
buffer-size=4095
# 虚拟环境路径(如果使用Python虚拟环境的话)
# virtualenv=/root/.virtualenvs/django_env
# 静态文件的路径,我们已经让nginx处理,所以注释掉
# static-map = /static=/home/pan/productions/static
关于日志格式
uwsgi有默认的日志格式,[pid: %(pid)|app: -|req: -/-] %(addr) (%(user)) {%(vars) vars in %(pktsize) bytes} [%(ctime)] %(method) %(uri) => generated %(rsize) bytes in %(msecs) msecs (%(proto) %(status)) %(headers) headers in %(hsize) bytes (%(switches) switches on core %(core))
如果你想要修改uwsgi的日志格式可以参考官网链接:https://uwsgi-docs.readthedocs.io/en/latest/LogFormat.html
比如说我这里需要修改一下日志时间的格式,它默认是ctime
,用英文缩写表示的格式(例如“25/Sep/2023:17:12:21 +0800”),这里使用ftime
启用自定义格式(例如“2023-09-25 17:14:36”)
[uwsgi]
socket = 127.0.0.1:8000
...
log-format-strftime = true
log-date = %%Y-%%m-%%d %%H:%%M:%%S
log-format = [pid: %(pid)|app: -|req: -/-] %(addr) (%(user)) {%(vars) vars in %(pktsize) bytes} [%(ftime)] %(method) %(uri) => generated %(rsize) bytes in %(msecs) msecs (%(proto) %(status)) %(headers) headers in %(hsize) bytes (%(switches) switches on core %(core))
还要注意,你需要看一下Django项目的wsgi.py
读取的配置文件对不对,因为这个文件是Django自动生成的,如果你项目结构改变过,需要手动更新一下
4.3 启动uwsgi
uwsgi的基本命令,在终端执行
uwsgi --ini uwsgi.ini # 启动uwsgi
uwsgi --stop uwsgi.pid # 关闭uwsgi
uwsgi --reload uwsgi.pid # 重启uwsgi
其中uwsgi.ini
是使用uwsgi的启动文件,按照上面的案例写就行,启动之后会生成uwsgi.pid
文件保存对应的ID,关闭uwsgi的时候需要指定该文件
5.使用nginx代理
上面是通过uwsgi以socket的方式启动Django项目,这种协议浏览器是不能直接访问的,所以需要借助nginx把请求转发给Django
我们要修改nginx的配置文件,如果你希望监听80端口,你可以直接修改nginx的默认配置文件,一般是/etc/nginx/sites-enabled/default
,不过为了方便管理,我这里还是在/etc/nginx/conf.d
新建一个配置文件吧,一个项目一个配置文件比较方便后期管理
sudo vim /etc/nginx/conf.d/django_8000.conf
配置内容如下
# 这种写法比较方便配合负载均衡
upstream backend {
# 这里的IP端口即Django项目的IP端口
server 127.0.0.1:8000;
# 如果uwsgi使用的本地文件,此处写法参考
# server unix:/path/to/your/mysite/mysite.sock;
}
server {
# nginx监听端口,即在浏览器访问时的端口,我这里是监听8080端口
listen 8080;
autoindex on;
location /static {
alias /home/pan/productions/static;
}
location / {
include uwsgi_params;
uwsgi_pass backend;
}
}
保存好nginx配置文件之后,需要重新加载一下nginx配置
sudo nginx -t
sudo nginx -s reload
现在打开浏览器访问http://localhost:8080
应该是可以正常访问了文章来源:https://www.toymoban.com/news/detail-522040.html
一般来说,如果是Django项目与nginx处于同一台服务器,sock文件的方式会比IP端口更高效一点,但是使用sock文件的时候注意一下是否有读写权限文章来源地址https://www.toymoban.com/news/detail-522040.html
到了这里,关于【Django】在Linux上部署Django(nginx+uwsgi)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!