【后端】使用uWSGI部署django项目

背景

用django+vue做了一个小项目,想尝试用uWSGI部署一下,以前都是用的django自带的服务器。简单记录一下。

前提

  • linux服务器 或 虚拟机(我用的是 挂载 Alibaba Cloud Linux3.21.04 的阿里云轻量应用服务器)
  • 一个能正常运行的django项目

准备工作

安装python环境

安装conda

使用任意ssh工具连接至服务器,然后安装conda:清华大学开源软件镜像站
。我个人比较喜欢miniconda

选择一个合适的版本,我们这里要选择以Linux-x86_64.sh结尾的版本。然后 右键-复制链接

在ssh终端中输入,就是刚才复制的链接

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py312_24.5.0-0-Linux-x86_64.sh

等待下载完成后,输入

chmod +755 Miniconda3-py312_24.5.0-0-Linux-x86_64.sh
./Miniconda3-py312_24.5.0-0-Linux-x86_64.sh

进入安装程序后按指引操作即可,注意最后一个选项是问你要不要打开终端时默认启用conda环境,为了方便我们要选择

安装完成后重启终端,命令行开头出现(base)即可,没出现的话就到你的conda安装目录中手动启动

安装python

终端执行

conda create -n <随便取个名字> python=<选择合适的python版本>
#例如
conda create -n django_env python=3.12

安装过程默认回车即可

安装完成后输入

conda activate django_env

(base)会变成(django_env)

进入到环境之后直接用pip安装你的项目需要的包即可

上传项目文件

上传项目文件的方式有很多,比如通过git,通过xftp等,通过pycharm远程主机等等,能传上去就行

测试

进入django项目的根目录下,执行

python manage.py runserver

出现熟悉的django启动打印即可

安装配置uWSGI

安装

终端输入

pip install uwsgi

然后报错

ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (uwsgi)

尝试使用conda安装conda-forge / packages / uwsgi

conda install -c conda-forge uwsgi

等待安装完成后,输入pip list可以看到已经有uWSGI

配置

uwsgi --http :8000 --chdir <项目目录> --moudle <项目名.wsgi:application>

项目名就是包含settings.py文件的目录名
然后我们可以在浏览器访问对应的ip和端口,能正常访问即可,例如

注意,此时不再为你提供静态资源服务,你的页面样式可能会失效。我们稍后再处理

一般来说,我们应该编写一个uwsgi.ini文件,而不是每次都用命令行传递配置参数

参考【django云服务器部署】django+uwsgi+nginx 部署的完整流程


[uwsgi]
# 使用http访问,0表示任何IP,8001表示端口号,要求同上
http = 0:8000
# 项目的绝对路径
chdir = /root/blog
# 项目的wsgi.py文件,如果你怕写乱,此处建议写绝对路径
wsgi-file = /root/blog/myblog/wsgi.py
# 允许主线程存在
master = true
# 开启进程的数量
processes = 1
# 开启多线程
enable-threads = false
# 当服务器退出的时候自动清理环境,删除socket文件和pid文件
vacuum = true
# 使进程在后台运行,并将日志打到指定的日志文件
daemonize = uwsgi.log
# 指定pid文件的位置,记录主进程的pid号,主要用于关闭服务
pidfile = uwsgi.pid

然后启动uwsgi

uwsgi --ini uwsgi.ini

不出意外的话,现在已经可以在浏览器中看到我们的Django项目了。

uwsgi常用命令

# 启动uWSGI服务器
uwsgi --ini uwsgi.ini

# 停止uWSGI服务器
uwsgi --stop uwsgi.pid

# 重启uWSGI服务器
uwsgi --reload uwsgi.pid

# 查看所有uWSGI进程
ps aux | grep uwsgi

# 停止所有uWSGI进程
sudo pkill -f uwsgi -9

关于静态资源

一般来说, 我们的静态资源文件不会用uwsgi来处理,而是用nginx来处理。
关于nginx的安装部署可以看这篇文章Linux系统下安装配置 Nginx 超详细图文教程

大概原理就是,让nginx监听端口,然后堆所有进入这个端口的请求进行路由匹配,然后进行不同的操作,比如/static/ ,nginx直接响应静态文件,对于/api/nginx把这次请求转发给uwsgi处理,处理完成之后交给nginx返回。

意思就是我们现在实际请求的是nginx服务器,由nginx将请求转交给uwsgi服务器,所以即使它不提供静态资源服务,也不会影响我们页面的样式。

如何收集静态资源文件

因为我是前后端分离的项目,所以其实涉及不到这个,简单提一下

在项目目录执行

python manage.py collectstatic

项目的静态资源文件会被复制到STATIC_ROOT指定的目录中
然后将其拷贝到nginx的静态资源目录中并配置静态资源路由即可,上诉的文章有详细的教程

在配置完成后访问nginx的端口就可以访问到我们部署的服务了

结语

一直以来都是用django和flask自带的服务器部署的,想要在后台运行还要使用 nohup 命令。很久之前就了解到了uWSGI,但是一直没有尝试过。部署起来还是有点麻烦,虽然网上的资料比较全,但是或多或少的会遇到一些问题。简单记录一下过程,希望能有所帮助。

最后的最后,推荐一下我的个人博客星眺北海的小窝,萌新站长,求支持。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星眺北海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值