【Django】在Linux上部署Django(nginx+uwsgi)

这篇具有很好参考价值的文章主要介绍了【Django】在Linux上部署Django(nginx+uwsgi)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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应该是可以正常访问了

一般来说,如果是Django项目与nginx处于同一台服务器,sock文件的方式会比IP端口更高效一点,但是使用sock文件的时候注意一下是否有读写权限文章来源地址https://www.toymoban.com/news/detail-522040.html

到了这里,关于【Django】在Linux上部署Django(nginx+uwsgi)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django使用uwsgi+nginx部署,admin没有样式解决办法

    若在服务器上部署的项目admin没有样式,则检查下一下配置: settings uwsgi.ini urls nginx.conf } 如果使用了虚拟环境则修改nginx.conf文件中的/static/路径为你虚拟环境的路径,没有使用虚拟环境则改为你python安装路径下的static 修改完后,cd/usr/sbin,使用./nginx -s reload,重启nginx,重启项目

    2024年02月14日
    浏览(43)
  • Ubuntu纯净服务器系统使用Nginx+uwsgi部署django项目

    当前文章依赖最新的ubuntu-22.04.3-live-server-amd64服务器系统,python3-10版本,django为5.0版! 该服务器系统我们可以通过虚拟机来在本地安装,也可以使用云服务器,操作方式方法大同小异! 这里我们以开源项目baykeshop为基础来演示! 开源地址:baykeShop: baykeshop是一款python栈采用

    2024年01月17日
    浏览(48)
  • 2-Docker-应用-多容器部署Django+Vue项目(nginx+uwsgi+mysql)

    基于Linux CentOS 7系统(虚拟机),使用Docker,多容器部署Django+Vue项目 整体部署用到了:Django+Vue+nginx+mysql+uwsgi 先每一个容器单独部署,最后用Docker compose 语法整合,统一部署 参考文章:https://blog.csdn.net/qq_45445505/article/details/135563784 章标题:Docker介绍 节标题:Docker安装 总结梳

    2024年03月10日
    浏览(103)
  • nginx uwsgi配置django

    uwsgi文件 nginx.conf electric目录 nginx access.log查看 技术无止境

    2024年02月15日
    浏览(49)
  • 设置nginx连接uWSGI的配置(nginx-uwsgi-django)

    1:non_idempotent是指POST、LOCK、PATCH请求方法的处理。 2:uwsgi_cache与uwsgi_store指令不可在同一指令域中同时使用。 3:除uwsgi_cache_path指令外,uWSGI模块指令均可编写在http、server、location指令域中。 4:uwsgi_cache_path指令只能编写在http指令域中。 uWSGI模块配置指令 指令名称 指令值格式 默

    2024年02月17日
    浏览(53)
  • Django+Nginx+uWSGI+Supervisor实战

    大家好,真的是许久没有更新文章了,甚是想念,最近这段时间事情很多,家里的事情、工作的事情,真没有太多时间去码文章,其实已经搁置了些许文章,没有整理,趁着这段时间风平浪静,我还是不忘初心,给大家分享。 唠嗑下网络自动化(NetDevOps): 为什么要讨论这个,

    2024年02月09日
    浏览(46)
  • Django笔记四十三之使用uWSGI部署Django系统

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十三之使用uWSGI部署Django系统 目前部署 Django 的方式一般来说是使用 Nginx + uWSGI + Django 来实现。 处理流程是,当一个请求发送过来会先经过 Nginx,如果是静态文件请求,Nginx 这一层直接处理,如果是后端动态接口,则会发送

    2024年02月05日
    浏览(67)
  • linux安装python和部署Django项目

    1 python安装 官网地址:https://www.python.org/ 本次下载的python安装包地址:https://www.python.org/ftp/python/3.8.16/Python-3.8.16.tgz 解压下载的python压缩包 编辑文件 vim /usr/bin/yum ,将首行修改为 #!/usr/bin/python2 。 2 Django项目部署 编写一个django.ini文件,文件内容如下 在nginx中配置下面信息,就

    2024年02月14日
    浏览(44)
  • 【学习心得】如何用uwsgi快速部署Django

    问题描述: 有时候,只想快速的部署一个Django项目实现项目迭代开发。本文介绍不使用Nginx只用uwsgi如何实现Django项目的快速部署。 如果还不会创建Ubuntu中的Python虚拟环境,可以参考我之前的文章: 【学习心得】Linux下的Python虚拟环境搭建_linux python虚拟环境搭建 优点:最简

    2024年02月12日
    浏览(46)
  • Python web实战 | Docker+Nginx部署python Django Web项目详细步骤【干货】

      在这篇文章中,我将介绍如何使用 Docker 和 Nginx 部署 Django Web 项目。一步步讲解如何构建 Docker 镜像、如何编写 Docker Compose 文件和如何配置 Nginx。 1.1 配置 Django 项目 在开始之前,我们需要有一个 Django 项目。如果你还没有 Django 项目,可以按照 Django 官方文档的指导创建一

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包