准备环境
-
购买一个云服务器(我用的是Amazon的Ubuntu),并记录/查询当前用户ubuntu的公网IP。
-
登录服务器后查询Ubuntu公网IP::
curl ifconfig.me
(如果没有curl
,先安装一下:sudo apt-get install curl
) -
PS:服务器需要提前安装好前后端需要的包,比如相关sdk,runtime,一些框架等。
-
-
查看npm和node是否安装:
npm -v node -v
-
本地前后端分离项目(我用的是ASP.NET Core WebAPI + React等)前端项目名:
my-webapp.zip
,后端项目名:TestWebAPI.zip
本地项目上传到服务器
-
在ubuntu上
~
目录下新建一个目录testapi-deploy
:mkdir testapi-deploy cd testapi-deploy
-
在本地Terminal中执行命令
scp -r 本地前端项目路径 本地后端项目路径 服务器用户名@公网IP:需要上传到的目录路径
(不要在服务器上执行,否则会报以下错误),然后输入服务器密码。
-
在服务器上查看是否已经成功上传
-
解压文件(unzip好像不能批量解压)
unzip my-webapp.zip unzip TestWebAPI.zip
服务器运行后端项目
-
进入项目目录:
cd TestWebAPI/TestWebAPI
。(因为是dotnet项目,其他不同后端项目根据文件路径进入文件) -
运行项目.NET项目:
dotnet run
。(根据后端技术选择运行命令) -
运行成功如下图所示,监听端口为
5000
和5001
nohup把进程放入后台运行
问题1:因为前后端分离项目,我们需要先运行后端,才能跑前端代码,但是如果新开一个terminal重新ssh连接服务器运行前端代码的话,会报错。(即:后端项目在ubuntu运行的时候怎么运行前端项目)
问题2:一旦关闭Terminal,会发现所有进程都被杀死了,后端服务立刻停止。
如何解决? -> 我们需要把后端项目的服务放在后台运行,使用 nohup
命令。nohup
把一个进程放到后台去运行而不会被关闭(即:如何在terminal关闭后始终保持服务运行)
具体解决步骤:回到放前后端项目的目录下,执行 nohup dotnet run &
,回车后会在当前目录下输出一个 nohup.out
的日志文件(如果在本地文件中指定输出内容的话该文件就是那些内容,比如“当前服务已经监听到..端口”)。执行成功如下图所示:
服务器运行前端项目
进入前端项目目录下,执行以下命令,执行成功如下图所示:(我用的react,所以用 npm start
运行,如果是其他前端技术,则根据情况修改此行)
cd my-webapp
npm start
配置服务器端口开放(安全组)
-
问题:我们用
公网IP:端口号
访问网页,发现网页仍然无法访问 -
原因:公网对应的我们需要的3000端口没有开放,需去服务器官网配置
-
我用的服务器是亚马逊的,亚马逊的安全组端口配置流程:https://www.cnblogs.com/huangkenicole/p/16607079.html