1.大致工作介绍
一般windows系统中(本地)我们写好的项目都不属于正式的生产环境,无法稳定的运行。因此,我们需要把我们的项目上传到服务器上配置好相关环境后部署在服务器上,进行一个稳定环境的运行。
前期准备:
1.项目完成本地代码的编写以及对接
2.写好接口文档/README.md给后来者提供项目的相关说明文档
3.环境配置文档requirement.txt
4.服务器连接工具,例如Mobaxterm、Vscode中的ssh插件连接、xshell、FinalShell等工具皆可
5.熟悉基本的linux的相关指令
2.连接服务器
首先,我们需要知道服务器的ip、服务器的用户和密码来进行连接
2.1 以Moxterm为例
1.下载并安装后Mobaxterm以后,进入软件以后点击左上角的Session,新建一个服务器连接会话
2.这里我们选择以SSH的方式来连接服务器,接着在Remote host、username处分别输入服务器ip和选择登陆的用户
3.由于我们第一次新建会话连接,我们之前没有存储过登陆的用户信息,所以我们需要先点击上图的username框后面的小人添加会话用户登陆信息。点开下图的New我们开始新建登陆用户信息
4.我们需要在此处填写name、username、password三个信息,其中name是我们为这个用户登陆信息取的一个名字(按个人喜好填写就行,目的是方便自己记忆这是哪个服务器的用户登陆信息),username是我们登陆服务器的用户名,password是我们登陆的服务器的用户名对应的密码。填写完成以后我们点击ok就可以看到这条会话用户登陆信息被存储了。
5.接着我们选中我们刚才添加的用户登陆信息,点击OK完成新建会话。
6.我们点击我们刚才添加的session,右侧会提示login as: 这里是需要我们输入登录服务器的用户名,我们刚才添加的username信息是root,所以在这里我们输入root即可。
7.接着我们需要输入 root用户对应的密码完成登录操作
8.当看到左侧的文件夹的时候就代表我们连接服务器成功了
3.项目部署
3.1 环境准备
之前,我们在本地写项目的时候专门为项目创建过虚拟环境,当时创建虚拟环境的作用是希望在项目部署的时候,可以很好地一致项目环境,也是为了将项目环境很好地隔离,避免不同项目的环境有冲突。为了在服务器上部署我们的项目,我们需要在服务器上有一个和本地的项目环境一致或者兼容的项目环境,如果在服务器上一个一个安装python包非常的麻烦,这里我们只需要在本地生成一个requeirments.txt就可以在服务器上便捷的安装。下文,我的虚拟环境将以myVenv为例演示如何操作。
3.1.1 生成requirements.txt
方法一(requirements.txt)
step1.我们需要在环境中安装一个pipreqs包(项目对应的虚拟环境)
pip install pipreqs
step2.项目终端输入命令生成requirements.txt
pipreqs ./ --encoding=utf8 --force
方法二(requirements.txt)
step1.直接在终端输入指令即可,这种方法只建议项目有对应的虚拟环境时使用
这个指令用于查看当前环境下的安装包,可以检查一下是否一致
pip freeze
接下来的指令用于生成requirements.txt
pip freeze > requirements.txt
执行完成以后,我们可以看到左边的项目目录下多了一个requirements.txt文件,点进去就可以看到我们项目虚拟环境的所有安装包
3.1.2 服务器环境
3.1.2.1 上传项目
在这一步,我们首先需要先将本地项目上传至服务器上(使用Mobaxterm/Vscode都可以,下文我将以Mobaxterm为例掩饰)。建议在/data下起一个见名知意的目录后,上传本地项目。例如:/data/qi/djangoProject
创建文件夹操作如下:
方法一
在左上角的目录处现输入/data来到data路径,然后点击标红的文件夹的图标会弹出一个窗口,输入要创建的文件夹的名字。例如我就在/data的路径下创建了一个名为qi的文件夹
方法二
在右侧终端输入下面指令进入/data文件夹
cd /data
接着输入下面指令创建文件夹。例如我想创建一个qi文件夹的话,我的命令就是:mkdir qi
mkdir 你的文件夹名
输入ls 以后我们可以看到我们刚才创建成功的名为qi的文件夹
上述方法二选一即可☑️
完成创建文件夹目录以后,我们将项目文件上传到我们创建的文件夹下,这里就很简单,我们将项目文件夹使用拖拽的方式放到服务器上,看到下方的进度条完成以后,就代表项目文件上传完成。
3.1.2.2 创建虚拟环境
首先在右侧终端输入指令切换到我们刚才的项目路径下,比如上图中,我的项目路径是/data/qi/djangoProject,那么我就在右侧终端输入:
cd /data/qi/djangoPeoject
当看到标红处的路径变为了项目名称就代表切换成功
接着,项目代码上传完成之后,我们需要创建一个服务器上的python环境。服务器上本身已经有pyhton3,我们只需要创建一个项目虚拟环境即可。在我们的项目目录下,输入指令创建服务器上的python虚拟环境。其中👇的指令中venv后跟着的是我们自己自定义的虚拟环境的名字。所以,我下面的指令翻译过来就是,在项目目录下创建一个名为qi的虚拟环境,你也可以替换成你自定义的名字,比如myVenv,Venv1.
python3 -m venv qi
环境创建完成以后,我们可以在项目目录下看到多了一个和我们的虚拟环境同名的文件夹
3.1.2.3 激活虚拟环境
创建完虚拟环境以后,我们刷新一下左侧的项目目录,我们可以看到多了一个以我们刚才的虚拟环境名生成的文件夹。和我们之前在本地写代码的流程一致,我们还需要激活这个虚拟环境。输入下述指令激活我们刚才创建的虚拟环境。其中qi的位置需要替换成你的虚拟环境的名称,例如:source myVenv/bin/activate。
source qi/bin/activate
激活完虚拟环境以后,我们可以看到我们的终端路径前比原来多了一个(虚拟环境名称),这样就代表激活成功,我们接下来的所有python相关操作,都会在这个虚拟环境中实现。
(qi)就是当前激活的虚拟环境
3.1.2.4 安装相关包
激活虚拟环境以后,我们需要安装项目运行所需的各种包。我们之前生成的requirements.txt在这个时候就起到了作用,ls查看到requirements.txt以后我们输入如下指令 安装项目执行所需的各种安装包⬇️
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
除此以外,之前的课中提到了我们需要使用uwsgi启动项目来稳定运行,所以除了安装requirements.txt以外我们还需要安装一个uwsgi,和本地安装python包的指令一致,我们只需要在虚拟环境下输入下面命令安装即可。
pip install uwsgi
到此,我们的服务器后端环境就创建完成了。
3.2 启动项目及部署
在使用uwsgi运行环境之前,我们先使用python manage.py runserver 来启动一下看看有没有什么报错
3.2.1 python启动项目
在项目目录终端输入python manage.py runerver
python manage.py runserver
看到这样就证明项目启动没有报错 然后我们尝试用uwsgi去启动项目
3.2.2 uwsgi启动项目
终端输入
uwsgi --ini uwsgi.ini
然后查看uwsgi的进程执行情况,以及项目目录下新增的uwsgi.sock,uwsgi.pid,uwsgi.log证明项目运行成功
ps aux | grep uwsgi
3.3 接口测试
3.3.1 apifox测试
由于我在nginx里配置好了后端的访问端口9200,所以当我使用uwsgi启动了项目以后,我可以通过apifox对地址【服务器ip:9200】进行访问来测试项目接口,前端也可以直接通过【服务器ip:9200】来测试,下图是我在apifox中用【服务器ip:9200】来进行测试
同时,上面的这条apifox中发起的后端请求,可以在我的uwsgi.log中查看到请求记录 ,到此服务器的后端部署就全部完成了👍
ps:如果你也想通过【服务器ip:端口】来测试后端接口,需要在nginx.conf中配置一下
3.3.2 nginx配置后端
101的服务器的nginx.conf在/usr/local/nginx/conf的路径下,我们通过Mobaxterm进入到/usr/local/nginx/conf路径下,点击nginx.conf文件进行相关配置的编写
点进nginx.conf进行修改
上图9200是我的配置,可以仿照我的配置来编写一个其他端口,建议用920x的端口,例如9201,模板如下,修改为你的相关配置后ctrl+s保存文件以后,继续执行下述操作。
server {
listen 9201;
server_name 填写服务器ip;
charset utf-8;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# 指定项目路径uwsgi
location /你的接口 {
include uwsgi_params;
uwsgi_connect_timeout 30;
uwsgi_pass unix:你的项目路径下的uwsgi.sock的位置;
}
}
保存好nginx.conf以后,我们的终端需要在/usr/local/nginx/sbin目录下(别的路径也行,你用绝对路径就好),检查配置文件是否修改正确,如果配置文件修改不正确是没法正确加载nginx的
./nginx -t #检查文件是否编写正确
如果看到successful就证明文件没问题,接着重新加载nginx
./nginx -s reload
像这样nginx就重新加载好了,可以测测3.3.1中的步骤
3.4 nginx前端
3.5 注意事项
⚠️:每次进行和项目有关的操作的时候,注意是否激活了对应的虚拟环境。比如每次关闭Mobaxterm连接或者断开服务连接以后,再次进来的时候都需要重新激活对应的项目环境。
相关命令如下:注意终端的当前路径!!
#以下的命令皆以在项目路径下为例 我的项目路径 /data/qi/djangoProject
cd /文件夹1/文件夹2... #切换至某个文件夹路径
cd .. #返回上级文件路径
mkdir filename #在当前路径下创建名为filename的文件夹 不要用中文!
python3 -m venv myVenv #在当前路径下创建一个名为 myVenv的虚拟环境 可以自己起环境的名字
source 虚拟环境名称/bin/activate #激活名称对应的虚拟环境 注意路径
deactivate #退出当前虚拟环境
uwsgi --ini uwsgi.ini #以uwsgi启动项目 注意uwsgi.ini的位置
uwsgi --stop uwsgi.pid #用uwsgi停止项目 注意uwsgi.pid所在的位置
ps aux | grep uwsgi #查看uwsgi的进程执行情况
ls #查看当前路径下的所有文件
pip install package名 #安装相关的包注意先激活虚拟环境
pip uninstall package名 #卸载相关的python包 注意先激活虚拟环境
pip list #查看当前环境的包安装情况
./nginx -t #检查nginx.conf的文件是否有错 注意路径要在sbin下 不然就用绝对路径
./nginx -s reload #重新记载nginx配置文件
./nginx -s stop #停止nginx
./nginx #启动nginx