首页 > 系统相关 >Ubuntu服务器使用 Daphne + Nginx + supervisor部署Django项目

Ubuntu服务器使用 Daphne + Nginx + supervisor部署Django项目

时间:2024-02-10 21:33:05浏览次数:34  
标签:supervisor 配置文件 asgi Django nginx proxy Ubuntu 进程

视频:https://www.bilibili.com/video/BV1e6421G7uM/?vd_source=36191bed2c30378060ff2efe6831b331

Django从 3.0版开始加入对ASGI的支持,使Django开始具有异步功能。

截止目前的5.0版,对异步支持逐步也越来越好,相信在未来的版本中异步将会支持的更加完善。

所以说,我们也需要适时的更新我们的技能,学会在asgi异步服务器环境中部署django项目!

在部署之前我们所有的依赖均隔离在python的虚拟环境中,并不是在全局环境中,包括supervisor也是通过pip命令安装到虚拟环境中使用,并不使用 ubuntu的 sudo apt install命令安装在全局环境中,这是需要注意的一点!

在部署之前一定要先激活虚拟环境!

ubuntu激活虚拟环境

source venv/bin/activate

项目依赖安装,根据各自的项目安装,一般标准的项目依赖均收集在项目根目录的requirements.txt文件中!

安装Daphne

Daphne 是一个纯 Python 的 ASGI 服务器,由 Django 项目的成员维护。它充当了 ASGI 的参考服务器。

你可以使用pip 安装 Daphne:

pip install daphne

终端启动命令

daphne -b 0.0.0.0 -p 8000 baykeproject.asgi:application

运行该命令后它将开启一个进程,监听 0.0.0.0:8000。这需要你的项目位于 Python path 上。为了确保这点,你应该在与 manage.py 文件相同的路径中运行这个命令。

但我们总不能每次部署都需要再终端去使用这个命令吧,所以接下来就需要用到一个进程管理工具supervisor来托管该进程!

在此之前,我们需要先在项目根目录中的deploy目录下新建一个asgi的文件夹,并将daphne的ini配置文件放在该目录下deploy/asgi/daphne.ini 以备后续使用!

[fcgi-program:asgi]
# TCP socket used by Nginx backend upstream
# Nginx 后端上游使用的 TCP 套接字
socket=tcp://localhost:8000

# Directory where your site's project files are located
# 站点项目文件所在的目录
directory=/home/qbc/web/code

# Each process needs to have a separate socket file, so we use process_num
# 每个进程都需要有一个单独的socket文件,所以我们使用process_num
# Make sure to update "mysite.asgi" to match your project name
# 确保更新 “mysite.asgi” 以匹配您的项目名称
command=daphne -u /home/qbc/web/deploy/daphne/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-headers baykeproject.asgi:application

# Number of processes to startup, roughly the number of CPUs you have
# 要启动的进程数,大致是你拥有的 CPU 数
numprocs=4

# Give each process a unique name so they can be told apart
# 给每个进程一个唯一的名称,以便区分它们
process_name=asgi%(process_num)d

# Automatically start and recover processes
# 自动启动和恢复进程
autostart=true
autorestart=true

# Choose where you want your log to go
# 选择你希望日志去的地方
stdout_logfile=/home/qbc/web/deploy/asgi/asgi.log
redirect_stderr=true

安装supervisor

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

1. 安装supervisor 的方式

安装supervisor的方式非常多,最简便的就是以下两种,直接安装在整个系统当中或者安装在python项目的虚拟环境当中!

直接安装在系统当中,整个环境中都有

sudo apt-get install supervisor

可以在虚拟环境中通过pip安装

pip3 install supervisor

2. 生成supervisor配置文件

echo_supervisord_conf > /home/qbc/web/deploy/supervisord.conf

备注:在任意文件夹下运行该命令,如果后边未指定存放配置文件的路径,而是单纯的指定了supervisord.conf的配置文件名,那么他会在当前文件夹下生成默认配置!

修改配置文件supervisord.conf

注意以下几处的配置路径,可自行修改,我们这里就全部存放到项目的deploy目录中

在这里插入图片描述

如果下边两项被注释掉了,那么取消注释,否则supervisorctl的相关命令无法运行!

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

将我们之前存放daphne配置文件的路径引入到最后
在这里插入图片描述

[include]
files = /home/qbc/web/deploy/asgi/*.ini

备注:files的路径可自行指定,不是必须非要存放在这里!

4. 启动supervisor

supervisord -c /home/qbc/web/deploy/supervisord.conf

备注:-c后边的路径为supervisor配置文件,即supervisord.conf的绝对路径!

运行之后deploy目录则会如下图所示

在这里插入图片描述

杀死supervisor进程:kill -s SIGTERM 3652

安装Nginx

sudo apt-get install nginx

检查nginx是否安装成功:nginx -v 查看nginx的版本,如果正确显示格式如这样 nginx version: nginx/1.18.0 (Ubuntu),那么证明安装成功!

创建nginx配置文件

sudo touch /etc/nginx/conf.d/django_daphne_nginx.conf

使用vim将下边配置信息写入该配置文件中

sudo vim /etc/nginx/conf.d/django_daphne_nginx.conf

打开输入英文字母i,进入写入模式,根据配置文件修改为自己的信息,绑定域名,完成按Esc键退出编辑模式,之后按:wq回车退出

upstream channels-backend {
   server localhost:8000;
}

server {
   listen 80;
   server_name 192.168.113.178;
   charset     utf-8;
   # max upload size
   client_max_body_size 75M;    # adjust to taste

   # location 配置请求静态文件多媒体文件。
   location /media {
       alias  /home/qbc/web/code/media/;
   }
   # 静态文件访问的url
   location /static {
       # 指定静态文件存放的目录
       alias /home/qbc/web/code/static/;
   }

   location / {
       try_files $uri @proxy_to_app;
   }

   location @proxy_to_app {
       proxy_pass http://0.0.0.0:8000;

       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";

       proxy_redirect off;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Host $server_name;
   }
}

重载Nginx配置文件

sudo service nginx reload

访问站点,测试是否部署成功!

标签:supervisor,配置文件,asgi,Django,nginx,proxy,Ubuntu,进程
From: https://www.cnblogs.com/zdwzdwzdw/p/18013048

相关文章

  • python3.9+django4.1+vue3 ,后端项目运行时,报错了,WSGI application 'XXX.wsgi.applicat
    python3.9+django4.1+vue3,后端项目运行时,报错了; 报错信息,如下:django.core.exceptions.ImproperlyConfigured:WSGIapplication'StudentMgrBE.wsgi.application'couldnotbeloaded;Errorimportingmodule.     ------------------------------百度......
  • python django4.1 pycharm,报错,Conflicting 'xxx' models in application 'xxx': <
    遇到了一个报错,不知道咋么解决,pythondjango3pycharm,报错。不晓得怎么解决;Conflicting'xxx'modelsinapplication'xxx':<class'xxx'>and<class'xxx'>.这个是 报错误 信息,如下:RuntimeError:Conflicting'faculty'modelsin......
  • Ubuntu源码安装Python
    Ubuntu源码安装Python目前Ubuntu电脑需要升级Python,但根据源来升级,会出现报错,故记录用源码升级的方法。从官方链接下载源码:https://www.python.org/downloads/source/根据自己需求下载对应版本即可。这里笔者下载的是Python-3.10.0rc2.tgz解压:tar-zxvfPython-3.10.0rc......
  • go简单部署到ubuntu
    一、概述做了一个简单的服务用来下载文件,这里主要使用来下载apk,然后生成一个二维码给用户下载apk使用。 二、步骤1.在ubuntu上安装go环境并配置环境变量(网上一大堆)2.在Windows交叉打包一个可以运行在ubuntu上的可执行文件。打包命令file_download_service:可......
  • Django知识笔记1
    本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计RESTAPI,通过使用Django来实现一个RESTAPI为例,明确后端开发RESTAPI要做的最核心工作,然后介绍DjangoRESTframework能帮助我们简化开发RESTAPI的工作。Web应用模式在开发Web应用中,有两种应用模式:前后端不分离......
  • 在ubuntu上用命令烧写SD卡&&在Windows上用Win32DiskImager工具一键烧写SD卡
    准备一张16GB以上的SD卡。linux系统上的操作:将SD卡插入PC主机。输入命令lsblk查看SD卡名称: 输入 sudoumount/dev/sdb*  输入命令进行烧写:pv-tprebde10-nano-sdcard.img|sudoddof=/dev/sdbbs=1M 从ubuntu上卸载SD卡,拔掉SD卡插到DE10-Nano开发板。Windows......
  • Ubuntu安装PHP8.2 编译安装 oci8 pdo_oci扩展
    PHP8.2是PHP语言的最新版本。新特性包括,只读类,允许布尔值作为独立类型等。从mysqli中删除libmysql的支持等。时至今天,主流的HTTP服务器已不是Apache,我们推荐使用Nginx作为HTTP服务器,Nginx相对于Apache来说简单且性能更好。本教程将向您展示如何在Ubuntu20.04安装PHP8.2并将其......
  • Django
    Django一、MTV和MVC的区别首先介绍Django的设计模式,也就是MTV,在这之前我们先了解MVC模式。1、MVC设计模式MVC是Model-View-Controller的缩写Model代表数据存储层,是对数据表的定义和对数据的增删改查;View代表视图层,是系统前段显示部分,它负责显示什么和如何进行显示;Controll......
  • Ubuntu18.04定时备份MySQL、PostgreSQL数据库
    1、备份MySQL数据库脚本LOG_DATE=`date+'%Y-%m-%d%H:%M:%S'`LOG_PATH=/home/dbserver/script_data/backup.logecho"$LOG_DATE=======>开始备份以下mysql数据库:">>${LOG_PATH}DUMP=/usr/bin/mysqldumpOUT_DIR=/home/dbserver/backup/mysql_backupLINU......
  • ubuntu linux服务器nginx安装手册
    ubuntulinux服务器nginx安装手册一、连接服务器注意登录服务器的用户角色,这里显示为root是已经使用sudo-s进行了提权操作二、安装nginx到指定目录1、安装编译依赖在开始之前,需要确保安装了编译Nginx所需的依赖包。这些依赖可能包括但不限于gcc、g++、make、libpcre3-dev......