Microbubu的迷你实验室

在Linux上部署.NetCore项目

字数统计: 1.3k阅读时长: 5 min
2019/01/25 Share

去年六月份的时候在Vultr上搭建了自己的SSR工具,用的是一台CentOS服务器,这款服务器上面除了SSR基本就没有其他任务在跑,所以,是时候用它来做点其他事情了。

Linux管理工具宝塔面板的使用

安装

具体方法可以参考宝塔官网,下面仅总结一下要点:

  1. yum安装宝塔面板(6.8版本):
1
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh
  1. 升级宝塔面板:
1
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh

使用

默认端口是8888,登陆之前可以通过终端更改面板的用户名和密码:

bt后端设置

之后便可以使用浏览器直接访问面板了,建议登录之后首先更改默认端口以及登录入口。

宝塔面板提供很多功能,包括服务器的监控、网站的一键搭建、FTP服务器的一键搭建、数据库及文件管理,另外还可以运行计划任务,也可以通过面板管理部分软件及运行环境,比如可以安装apache服务器软件、ngnix服务器软件以及php运行环境等,是一款很不错的Linux管理面板,并且该软件还有Windows Server版本。

.NetCore SDK的安装

由于宝塔面板中没有集成.NetCore SDK,所以我们只能通过yum在终端手动安装。

各个不同Linux发行版的安装方法大同小异,在这个官方页面均有详细介绍,这里我用的是CentOS,所以使用yum安装。

  1. 根据官方的说法,在安装DotNetCore环境之前需要注册Microsoft Key以及Product Repository,并且还需要安装一些依赖,这一步每台机器只需要运行一次,具体命令如下:
1
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
  1. 安装dotnet-sdk-2.2:
1
2
3
~$ sudo yum update

~$ sudo yum install dotnet-sdk-2.2
  1. 测试是否安装成功:
1
2
3
4
5
// 直接看版本:
~$ dotnet --version

// 使用yum查看info
~$ yum info dotnet-sdk-2.2

本地新建.NetCore WebApi项目

虽然在服务器上安装了.NetCore SDK,也可以用命令行直接在服务器上新建项目,但是鉴于Visual Studio强大的功能,我们选择在本地构建应用,然后部署到服务器即可。下面就编写一个简易的WebApi,注意新建项目的时候不要选择“为HTTPS配置”,因为服务器上的ngnix并没有启用https。

新建一个UsersController,代码编写如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
[HttpGet]
public ActionResult<IEnumerable<SysUser>> Get()
{
return SysUser.Users;
}
}

public class SysUser
{
public int Id { get; set; }

public string Name { get; set; }

public string Password { get; set; }

public string Description { get; set; }

public static List<SysUser> Users = new List<SysUser>()
{
new SysUser()
{
Id=1,
Name="张三",
Password="Not Set",
Description="我是张三"
},
new SysUser()
{
Id=2,
Name="李四",
Password="Not Set",
Description="我是李四"
}
};
}

正如你所见,我们的WebApi只能使用Http的Get方法获取地址api/users的数据,后台会返回一个SysUser数组,这是我们预期的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{
"id":1,
"name":"张三",
"password":"Not Set",
"description":"我是张三"
},
{
"id":2,
"name":"李四",
"password":"Not Set",
"description":"我是李四"
}
]

接着先将服务部署到本地文件系统上面,之后打成压缩包然后通过宝塔面板上传至服务器并解压。

在Linux上面运行项目

在服务器上进入部署文件所在目录,然后使用dotnet命令启动服务:

启动.NetCore应用

但是现在我们还不能直接访问到我们新部署的WebApi服务,需要使用ngnix设置反向代理,将特定的端口代理到http://localhost:5000,这一步可以通过宝塔面板来完成,步骤如下:

  1. 在宝塔面板上新建一个网站,设置为静态网站即可,如果当前宝塔面板已经有多个项目,注意设置好端口即可,这里我设置成了81端口。

  2. 在刚才新建的网站中设置反向代理,目标URL填写http://localhost:5000即可,发送域名留空。

现在可以直接在浏览器中使用url访问刚才部署的url服务,如下图:

查看结果

但是现在还有个问题,就是当我们关闭xShell等ssh工具的时候服务进程也会停止运行,下面就说说解决方法。

解决关闭Shell之后进程停止的问题

这个问题可以通过yum安装screen解决:

1
~$ yum install screen

screen的原理大概是新建一个终端进程,然后其他运行的任务可以附加到新建的这个进程运行,这样退出shell的时候我们的webapi服务便不会终止运行了。

下面是几个常用的screen命令:

  1. 新建一个screen(这里取名为box):
1
~$ screen -S box
  1. 查看当前存在的screen列表(这个命令会输出存在的所有screen实例的进程pid以及名称):
1
~$ screen -ls
  1. 关闭一个screen(关闭其对应的进程即可,以pid=1086为例):
1
~$ kill 1086
CATALOG
  1. 1. Linux管理工具宝塔面板的使用
    1. 1.1. 安装
    2. 1.2. 使用
  2. 2. .NetCore SDK的安装
  3. 3. 本地新建.NetCore WebApi项目
  4. 4. 在Linux上面运行项目
  5. 5. 解决关闭Shell之后进程停止的问题