赞
踩
服务器 | CPU&内存 | 系统 |
---|---|---|
华为云 Flexus L 实例 | 2核 2 GiB | CentOS 7.9 64bit |
Xshell和Xftp免费下载,下载安装 Xshell 和 Xftp(后续用于传输文件到服务器),随后使用用户名(服务器给的用户名是 root)和密码(远程连接之前需重置实例密码)连接到服务器。
服务器自带的Python版本较低且不支持pip指令:
因此自己安装Anaconda比较靠谱,在[Anaconda官网]选择需要安装的版本(自行按需选择):
命令行输入:
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
在服务器端和宝塔端放行对应端口,将settings.py
文件中的ALLOWED_HOSTS = []
改为ALLOWED_HOSTS = ['*']
,命令行输入如下指令启动Django项目:
python manage.py runserver 0.0.0.0:8000
runserver 会自动处理静态资源的请求,因此无需像其他两种部署方式一样配置静态资源路径。
启动成功之后浏览器地址栏输入公网IP:8000
即可访问项目。
项目启动之后,屏幕睡眠或者手动关闭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使用]。
部署方法参考自[将Django项目部署到服务器]。
使用 Xshell 连接服务器后在命令行输入指令安装宝塔面板:
yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
根据宝塔面板提供的账号和密码登录到宝塔面板,安装软件:
输入公网IP后其他默认设置(可以修改根目录的位置)即可,站点建立后将目录下的两个html文件删除。
上传项目前先收集项目所有的静态文件,将其放到项目根目录下的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、图片等资源。
在项目目录中打开终端运行如下命令:
pip freeze > requirements.txt
目录中会生成依赖文件requirements.txt
,可以只留下关键的依赖包,其他的可以删掉:
Django==4.2.13
numpy
pandas
不指定版本时默认下载最新版本,后面添加项目时Python项目管理器会根据依赖文件下载对应的依赖包。
收集完静态资源后使用Xftp将整个项目文件上传到站点指定的目录下。
在软件商店中安装Python项目管理器 :
选择python版本(尽量与本地保持一致):
在项目根目录下创建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所在的目录名+.wsgi
uwsgi_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的日志信息,一般用处不大。
勾选安装依赖模块时会根据requirements.txt
文件来安装依赖包,requirements.txt
中的torch无法安装(而且在模块界面中手动安装时也安装不了),只能自己在命令行安装。
添加项目后会在项目根目录下随之创建一个虚拟环境:
我的虚拟环境如下:
命令行安装torch:
d91a2f87349da87b741376f807c777e9_venv/bin/pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
安装时会出现线程终结(killed)的错误,提示是由于运行内存不足导致,多试几次就能安装上。
在服务器和宝塔上放行对应端口后,浏览器输入公网IP
访问项目时出现错误:
修改项目settings.py
文件中允许访问的地址,将ALLOWED_HOSTS = []
改为ALLOWED_HOSTS = ['*']
即可访问。
此时使用
公网IP:8000
是访问不到项目的,这是因为Nginx配置的反向代理隐藏了原始服务器的真实 IP 地址(8000端口),用户只能通过80端口发送请求(在面板中添加网站后,会默认将请求通过端口 80【HTTP】或 443【HTTPS】进行处理),然后Nginx服务器再将改请求转发到原始服务器 (uWSGI)的8000端口。
部署方法参考自[最新宝塔面板部署Django项目教程(踩坑无数板,保姆级教学)]。
参照⌈2.3⌋收集静态文件并生成依赖文件,然后将项目上传到/www/wwwroot
目录下:
创建环境时,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安装失败,需要在模块中手动添加:
在设置中将启动用户从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服务器的运行日志。
正向代理通常用于访问控制和隐私保护,反向代理通常用于负载均衡和资源缓存。
因此,WSGI 是 Python Web 应用程序与 Web 服务器之间的接口规范,定义了应用程序和服务器之间的标准接口。而 uwsgi 则是 uWSGI 服务器与应用程序之间的通信协议。
三者的关系图示1如下:
Nginx 是常用的反向代理服务器,用于处理静态请求或将动态请求转发给 uWSGI。对于静态文件(例如HTML、CSS、JavaScript、图片等),Nginx 可以直接从文件系统中提供这些文件给客户端。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。