服务器利用宝塔面板部署Django项目

目录

  • 1. 使用命令启动Django项目
    • 1.1 使用 Xshell 连接服务器
    • 1.2 安装Anaconda
    • 1.3 启动Django项目
    • 1.4 使用tmux实现项目的后台运行
  • 2. 使用Python项目管理器部署项目
    • 2.1 安装宝塔面板和软件
    • 2.2 添加站点
    • 2.3 上传项目文件
      • 2.3.1 收集静态文件
      • 2.3.2 生成依赖文件
    • 2.4 安装安装Python项目管理器
    • 2.5 创建配置文件
    • 2.6 在Python项目管理器中添加项目
    • 2.7 访问项目
  • 3. 使用『Python项目』部署项目(推荐)
    • 3.1 上传项目文件
    • 3.2 创建python项目
    • 3.3 访问项目
  • 4. 相关知识
    • 4.1 正向代理和方向代理
    • 4.2 WSGI/uwsgi/uWSGI的区别

记录服务器部署Django项目的三种方法,由于项目没有用到数据库服务,所以部署过程不涉及数据库相关的连接和配置(后续使用到数据库再补充)。服务器规格如下:

服务器CPU&内存系统
华为云 Flexus L 实例2核 2 GiBCentOS 7.9 64bit

1. 使用命令启动Django项目

1.1 使用 Xshell 连接服务器

Xshell和Xftp免费下载,下载安装 Xshell 和 Xftp(后续用于传输文件到服务器),随后使用用户名(服务器给的用户名是 root)和密码(远程连接之前需重置实例密码)连接到服务器。

1.2 安装Anaconda

服务器自带的Python版本较低且不支持pip指令:
因此自己安装Anaconda比较靠谱,在[Anaconda官网]选择需要安装的版本(自行按需选择):
image-20240702200444818
命令行输入:

wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh

运行sh命令安装anaconda:

sh Anaconda3-2022.05-Linux-x86_64.sh

然后一直Enter,输入yes之后完成安装:

输入yes后自动为配置 Anaconda 的环境变量。

此时命令行输入python时出现的还是服务器自带的版本,需要重新加载配置文件才能让安装的Anaconda生效:

source ~/.bashrc

在这里插入图片描述

在命令行手动安装项目所需的依赖包(如Django),torch的安装指令如下(使用清华源镜像下载更快):

pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

1.3 启动Django项目

在服务器端和宝塔端放行对应端口,将settings.py文件中的ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ['*'],命令行输入如下指令启动Django项目:

python manage.py runserver 0.0.0.0:8000

runserver 会自动处理静态资源的请求,因此无需像其他两种部署方式一样配置静态资源路径。
启动成功之后浏览器地址栏输入公网IP:8000即可访问项目。

1.4 使用tmux实现项目的后台运行

项目启动之后,屏幕睡眠或者手动关闭Xshell客户端时,项目的运行会被中断,此时浏览器访问不到项目资源。使用tmux后,在不手动关闭tmux会话的情况下,无论是屏幕睡眠还是关闭Xshell,项目的运行都不会被中断,tmux 会话仍然会在后台继续运行项目
新建一个名为task1的会话:

tmux new -s task1

启动tmux后,底部[0] 表示第0个tmux会话,再启动一个tmux会话则为[1],依次递增。在tmux的会话窗口执行的任务能够实现长期运行,除非手动关闭。

常用指令:

# 默认进入第一个会话
tmux a
# 进入到名称为demo的会话
tmux a -t demo# 关闭所有会话
tmux kill-server
# 关闭指定对话
tmux kill-session -t 会话名# 查看所有对话
tmux ls

更多命令可参考[1分钟掌握tmux使用]。

2. 使用Python项目管理器部署项目

部署方法参考自[将Django项目部署到服务器]。

2.1 安装宝塔面板和软件

使用 Xshell 连接服务器后在命令行输入指令安装宝塔面板:

yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

根据宝塔面板提供的账号和密码登录到宝塔面板,安装软件:
在这里插入图片描述

2.2 添加站点

输入公网IP后其他默认设置(可以修改根目录的位置)即可,站点建立后将目录下的两个html文件删除。
在这里插入图片描述

2.3 上传项目文件

2.3.1 收集静态文件

上传项目前先收集项目所有的静态文件,将其放到项目根目录下的static目录中。在本地Django项目的settings.py文件中配置STATIC_ROOT

STATIC_URL = '/static/']
# 静态文件将被收集到这个目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

在命令行执行:

 python manage.py collectstatic

之后会在项目根目录下生成static文件夹,里面存放项目所有的静态文件,static文件夹的目录结构如下:

├─admin
│  ├─css
│  │  └─vendor
│  │      └─select2
│  ├─img
│  │  └─gis
│  └─js
│      ├─admin
│      └─vendor
│          ├─jquery
│          ├─select2
│          │  └─i18n
│          └─xregexp
├─css
├─img
└─js

收集静态文件时,static 文件夹中会多出一个 admin 文件夹,它包含了 Django 管理后台(Django Admin)的静态文件,这些文件是 Django 自带的管理后台所需要的 CSS、JavaScript、图片等资源。

2.3.2 生成依赖文件

在项目目录中打开终端运行如下命令:

pip freeze > requirements.txt

目录中会生成依赖文件requirements.txt,可以只留下关键的依赖包,其他的可以删掉:

Django==4.2.13
numpy
pandas

不指定版本时默认下载最新版本,后面添加项目时Python项目管理器会根据依赖文件下载对应的依赖包。

收集完静态资源后使用Xftp将整个项目文件上传到站点指定的目录下。

2.4 安装安装Python项目管理器

在软件商店中安装Python项目管理器 :
在这里插入图片描述
选择python版本(尽量与本地保持一致):
在这里插入图片描述

2.5 创建配置文件

在项目根目录下创建uwsgi.ini文件,内容如下:

#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:8000
#配置项目路径,项目的所在目录
chdir=/www/wwwroot/113.45.149.184/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录
wsgi-file=prediction/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=/www/wwwlogs/python/113.45.149.184/uwsgi.log

配置站点的配置文件:
在这里插入图片描述

location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8000;  #端口要和uwsgi里配置的一样uwsgi_param UWSGI_SCRIPT prediction.wsgi;  #wsgi.py所在的目录名+.wsgiuwsgi_param UWSGI_CHDIR /www/wwwroot/113.45.149.184/; #项目路径
}

我没配置如下静态资源的路径,因为压根就没有起作用。

location /static/ {alias /www/wwwroot/1.14.122.151/static/; #静态资源路径
}

这里注意一下,uwsgi.ini

daemonize=/www/wwwlogs/python/113.45.149.184/uwsgi.log

记录的是 uWSGI 的启动信息、请求日志、错误日志和服务器活动日志(会记录Django项目的报错信息,可以根据报错信息完善项目配置),站点配置文件中的

access_log /www/wwwlogs/113.45.149.184.log;
error_log /www/wwwlogs/113.45.149.184.error.log;

记录的是nginx的日志信息,一般用处不大。

2.6 在Python项目管理器中添加项目

在这里插入图片描述
勾选安装依赖模块时会根据requirements.txt文件来安装依赖包,requirements.txt中的torch无法安装(而且在模块界面中手动安装时也安装不了),只能自己在命令行安装


添加项目后会在项目根目录下随之创建一个虚拟环境:
在这里插入图片描述
我的虚拟环境如下:
在这里插入图片描述
命令行安装torch:

d91a2f87349da87b741376f807c777e9_venv/bin/pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

安装时会出现线程终结(killed)的错误,提示是由于运行内存不足导致,多试几次就能安装上。

2.7 访问项目

在服务器和宝塔上放行对应端口后,浏览器输入公网IP访问项目时出现错误:
在这里插入图片描述
修改项目settings.py文件中允许访问的地址,将ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ['*']即可访问。

此时使用公网IP:8000是访问不到项目的,这是因为Nginx配置的反向代理隐藏了原始服务器的真实 IP 地址(8000端口),用户只能通过80端口发送请求(在面板中添加网站后,会默认将请求通过端口 80【HTTP】或 443【HTTPS】进行处理),然后Nginx服务器再将改请求转发到原始服务器 (uWSGI)的8000端口。

3. 使用『Python项目』部署项目(推荐)

部署方法参考自[最新宝塔面板部署Django项目教程(踩坑无数板,保姆级教学)]。

3.1 上传项目文件

参照⌈2.3⌋收集静态文件并生成依赖文件,然后将项目上传到/www/wwwroot目录下:
在这里插入图片描述

3.2 创建python项目

在这里插入图片描述

创建环境时,requirements.txt里的torch能够成功安装(但是安装的版本号是2.3.1,原因未知,能用就行),在模块中手动安装反而安装不了,依赖如下:

Django==4.2.14
numpy
pandas
torch==1.10.0
torchaudio==0.10.0
torchvision==0.11.0

但是pandas安装失败,需要在模块中手动添加:
在这里插入图片描述

3.3 访问项目

在设置中将启动用户从www改成root,在服务器端和宝塔端放行对应端口,将settings.py文件中的ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ['*']。使用公网IP:8000能访问到项目但是无法加载静态资源:

在项目的uwsgi.ini文件(创建python项目后自动生成)或者在设置--> uwsgi配置中添加:

static-map = /static=/www/wwwroot/userfeed/static

作用:将请求的静态文件路径映射到服务器上的实际文件系统路径,即当 uWSGI 服务器收到特定 URL 前缀的请求时,它可以直接从指定的文件系统路径提供静态文件,而不通过应用程序处理。这样可以减少应用程序的负载,提高静态文件的传输效率。

这种部署方式没有使用到Nginx服务器(仅使用到uWSGI服务器),所以需要在uwsgi.ini中指明静态资源位置。


重新访问网页即可正常显示,可以在项目日志中查看uWSGI服务器的运行日志。
在这里插入图片描述

4. 相关知识

4.1 正向代理和方向代理

  • 正向代理:位于客户端和原始服务器之间的代理服务器。当客户端发起请求时,请求首先发送到正向代理服务器,然后由代理服务器转发请求到后端的原始服务器,最后将原始服务器的响应返回给客户端。正向代理隐藏了客户端的真实 IP 地址,同时可以提供一些额外的功能,比如缓存、安全性增强等。一句话,就是帮你搭梯子的
  • 反向代理:位于原始服务器和客户端之间的代理服务器。当客户端发起请求时,请求会先发送到反向代理服务器,然后由反向代理服务器将请求转发到后端的原始服务器(可以将请求分发到多个后端服务器,从而提高系统的稳定性和性能),最后将原始服务器的响应返回给客户端。反向代理隐藏了原始服务器的真实 IP 地址,同时可以提供负载均衡、安全性增强、缓存等功能。一句话,就是帮服务器减压的

正向代理通常用于访问控制和隐私保护,反向代理通常用于负载均衡和资源缓存。

4.2 WSGI/uwsgi/uWSGI的区别

  • WSGI(Web Server Gateway Interface,Web服务器网关接口):WSGI 是一个 Python Web 应用程序与 Web 服务器之间的接口规范,它定义了应用程序和服务器之间的标准接口,使得应用程序可以在不同的 Web 服务器上运行。WSGI 协议使得不同的 Python Web 框架(例如 Flask、Django 等)能够在不同的 Web 服务器上运行。
  • uWSGI:uWSGI 是一个实现了WSGI、uwsgi、HTTP等协议的Web 服务器
  • uwsgi:是一个与 uWSGI 服务器相关的协议。uwsgi 协议是一种二进制协议,它定义了 uWSGI 服务器与应用程序之间的通信协议。

因此,WSGI 是 Python Web 应用程序与 Web 服务器之间的接口规范,定义了应用程序和服务器之间的标准接口。而 uwsgi 则是 uWSGI 服务器与应用程序之间的通信协议。


三者的关系图示1如下:
image-20240715112507421

Nginx 是常用的反向代理服务器,用于处理静态请求或将动态请求转发给 uWSGI。对于静态文件(例如HTML、CSS、JavaScript、图片等),Nginx 可以直接从文件系统中提供这些文件给客户端


  1. WSGI,uwsgi,uWSGI梳理 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488085.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】学习记录

2024年7月23日 1.图的5中存储方式 2.二叉树的先序,中序,后序遍历。 学了图的存储方式之后,二叉树好像就是小菜一碟一样。注意一下名词的顺序就可以了。 所谓先中后序,就是先根,中根,后根的差别。没有其…

FoundationDB 基本使用

目录 一、FoundationDB介绍 二、安装单机版FoundationDB 2.1 下载安装程序 2.2 安装FoundationDB 2.3 修改配置信息 2.4 管理FoundationDB服务 三、fdbcli的常用命令 3.1连接数据库 3.2退出fdbcli 3.3查看版本 3.4 写模式 3.5写入键值 3.6读取键值 3.7删除键值 …

学习笔记之JAVA篇(0724)

p 方法 方法声明格式: [修饰符1 修饰符2 ...] 返回值类型 方法名(形式参数列表){ java语句;......; } 方法调用方式 普通方法对象.方法名(实参列表)静态方法类名.方法名(实参列表) 方法的详…

Java之泛型基础

泛型 1 问题引入 在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。 观察下…

视频去水印免费电脑版 pdf压缩在线免费网页版 pdf压缩在线免费 简单工具软件详细方法步骤分享

消除视频中的恼人水印,是许多视频编辑爱好者的常见需求。在这篇文章中,我们将探讨几种视频去水印的技巧,在数字化时代,视频和图片的传播越来越方便,但随之而来的水印问题也让人头疼。本文将为您详细介绍视频剪辑去水印…

vue环境安装

安装node.js 网址:https://nodejs.org/en/download/ 直接点击下载就ok 一路next,这里可以改一下保存路径 选第一个 安装后,找到node.js的安装目录,创建这两个文件夹 之后打开命令提示符,右键以管理员身份运行 将新创…

智能猫砂盆买开放式还是封闭式?四年养猫老手实用测评三个品牌!

有没有人跟我一样,买过封闭式的智能猫砂盆回来,结果猫咪不爱用,死活不肯进去,搞得智能猫砂盆白买了,但是平时上班太忙碌,真的很需要一个可以帮自己铲屎的智能猫砂盆,后面恶补了一下知识&#xf…

通信原理-思科实验四:静态路由项配置实验

实验四 静态路由项配置实验 一:实验内容 二:实验目的 三、实验原理 四、实验步骤 选择三个2811型号的路由器 R1、R2、R3 路由器默认只有两个快速以太网接口,为路由器R1和R3增加快速以太网接口模块NM-1FE-TX,安装后检查路由器的接…

JavaSE--基础语法--继承和多态(第三期)

一.继承 1.1我们为什么需要继承? 首先,Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是 现实世界错综复杂,事物之间可能会存在一些关联,那在设计程…

麦歌恩MT6521-第三代汽车磁性角度传感器芯片

磁性编码芯片 -在线编程角度位置IC 描述: MT6521是麦歌恩微电子推出的新一代基于水平霍尔及聚磁片(IMC)技术原理的磁性角度和位置检测传感器芯片。该芯片内部包含了两对互成90放置的水平霍尔阵列及聚磁片,能够根据不同的型号配置来实现对XY&#xff0…

android前台服务

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、使用2.1 添加权限2.2 新建…

MT2142 逆序(树状数组)

思路: 开始完全没有思路,还是想问题的方法不对(应该先暴力模拟,然后再想可以优化的方法)。 后来看了解析,用chang[]来存储每个元素删除后(或者是该元素前面的元素删除后)对record造成…

肿瘤演变指标预测局部晚期前列腺癌10年以上的复发| 文献速递-基于人工智能(AI base)的医学影像研究与疾病诊断

Title 题目 Tumor evolution metrics predict recurrence beyond 10 years in locally advanced prostate cancer 肿瘤演变指标预测局部晚期前列腺癌10年以上的复发 01 文献速递介绍 癌症演变为预测肿瘤学奠定了基础。测试进化指标需要在控制临床试验中进行定量测量。我们…

STM32---HAL库基础配置记录之基础配置

一:第一步是时钟RCC的使能配置 时钟配置界面如下,当我们选定好芯片型号时,首先需要配置的是RCC,如下图: 其中第一个HSE代表的是时钟树的高速外部时钟对应下图中的1,LSE代表的是下图中的2 如下图&#xff0c…

GIS场景升级:支持多种影像协议与天气效果

在GIS场景编辑领域,升级视效的需求日益增加。有一款名为山海鲸可视化的免费工具,本人亲测能够完美满足这一需求。山海鲸可视化不仅支持多种GIS影像协议(如TMS、WMS、WMTS等),还能一键添加天气效果,瞬间提升…

本地电脑连接阿里云

系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、方法1二、使用步骤1.引入库 前言 一、方法1 本地连接远程服务器的时候提示出现身份验证错误的几种解决方法 二、使用步骤 …

算法——滑动窗口(day8)

30.串联所有单词的子串 30. 串联所有单词的子串 - 力扣(LeetCode) 必看!!!本题是我们上次写的438.异位词的进阶版,可参考本篇文章:算法——滑动窗口(day7)-CSDN博客来…

MySQL数据库安装使用

我们都知道数据库又分为关系型数据库和非关系型数据库; 关系型数据库指采用了关系模型来组织数据的数据库,指的就是二维表格模型。可以先初步理解为Excel表格。非关系型数据库又被称为NoSQL,对NoSQL 最普遍的定义是“非关联型的”&#xff0…

Android平台RTSP|RTMP直播播放器技术接入说明

技术背景 大牛直播SDK自2015年发布RTSP、RTMP直播播放模块,迭代从未停止,SmartPlayer功能强大、性能强劲、高稳定、超低延迟、超低资源占用。无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以Android平台…

免费【2024】springboot 编程语言在线学习平台的设计与实现

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…