本文介绍: 关于在Linux使用uwsgi部署Django项目过程并不难,主要是配置文件写法,尤其是nginx配置文件本文在Ubuntu20.04上通过uwsginginx部署Django项目。一般来说,如果是Django项目nginx处于同一台服务器sock文件方式会比IP端口更高效一点,但是使用sock文件时候注意一下是否读写权限我们修改nginx配置文件,如果你希望监听80端口,你可以直接修改nginx默认配置文件,一般是。安装完之后,它会自动运行nginx访问一下本机的IP(
1.说明

关于在Linux使用uwsgi部署Django项目过程并不难,主要是配置文件写法,尤其是nginx配置文件本文在Ubuntu20.04上通过uwsginginx部署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应该是可以正常访问了

一般来说,如果是Django项目与nginx处于同一台服务器sock文件的方式会比IP端口更高效一点,但是使用sock文件的时候注意一下是否读写权限

原文地址:https://blog.csdn.net/qq_39147299/article/details/131517356

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_40644.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注