重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

时间:2022-10-29 15:07:26

前言

简单整理一个linux 简单上线。 这个是该系列的外篇,该系列继续更新。献给刚学的人。

正文

安装实例

dotnet new webapp -n AspNetCoreDemo -o firstwebapp

编译并运行:

dotnet run

查看网络情况:

netstat -anpl

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

将项目发布到指定位置:

dotnet publish -o /var/testdotnet/

将打包好的运行起来:

dotnet /var/testdotnet/AspNetCoreDemo.dll 

配置nginx

这个时候是外面是访问不了的,原因如下:

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

这里绑定的是127.0.0.1,这个是内网的,所以无法访问到。

然后这里解释一下为什么localhost可以访问哈:

因为host: localhost 127.0.0.1 这个是默认的。

当然我们可以改成0.0.0.0 去启动,但是一般不会这么干。

这里说明一下,为什么我们一般有一个nginx 代理一个应用程序。

那是因为nginx 做的不仅仅是代理,nginx 有安全模块,有限流模块,这样我们就不用再应用程序中写了。

大大减少了项目的复杂度。

那么安装一下nginx:

yum install nginx -y

然后启动一下:

sudo systemctl start nginx

然后配置文件改成这样:

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        location / {
         proxy_pass         http://localhost:5000;
         proxy_http_version 1.1;
         proxy_set_header   Upgrade $http_upgrade;
         proxy_set_header   Connection keep-alive;
         proxy_set_header   Host $host;
         proxy_cache_bypass $http_upgrade;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header   X-Forwarded-Proto $scheme;
        }

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

然后nginx 重新加载配置一下:

nginx -s reload

然后我这里访问一下:

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

这样就ok了。

创建服务文件

什么是服务文件?

在 Linux 中,还有具有“.service”扩展名的单元配置文件,用于在进程退出时控制守护程序的行为。 这些文件也称为 服务文件、 单元文件和 服务单元文件。

这些服务文件位于以下目录之一:

/usr/lib/systemd/system:存储已下载应用程序的服务文件
/etc/systemd/system/:存储由系统管理员创建的服务文件

这两个分别放什么呢?

比如这种nginx 一般是第三方的程序,就放在/usr/lib/systemd/system下面。

一般yum安装都在里面。

然后/etc/systemd/system/ 这里放的是我们自己的应用程序。

这里就可以在这个目录下写一个:

[Unit]
Description= AspNetCoreDemo
[Service]
WorkingDirctory:/var/testdotnet/
ExecStart=/usr/bin/dotnet /var/testdotnet/AspNetCoreDemo.dll
Restart=aways
RestartSec=10
SyslogIdentifier=AspNetCoreDemo
User=root
Environment=ASPNETCORE_ENVIRONMENT=Development
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target

简单解释一下:

WorkingDirectory 是发布应用程序的目录。
ExecStart 是启动应用程序的实际命令。
Restart=always 是自言自明的。 如果由于某种原因(无论是手动还是由于崩溃)而停止,则始终会启动此过程。
RestartSec=10 也是自言自明的。 进程停止后,将在经过 10 秒后启动。
SyslogIdentifier 很重要。 它表示“系统日志标识符”。 有关守护程序的信息记录在此名称下的系统日志中。 还可以使用此标识符查找进程的 PID。
User 是管理服务的用户。 它应存在于系统中,并具有相应的应用程序文件所有权。
可以在服务文件中设置任意数量的环境变量。

然后查看一下:

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

然后这里有一个disable,这个意思是系统重启后不会去启动这个。

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

设置enable:systemctl enable AspNetCoreDemo

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

这里就会创建一个链接过去。 这里面的就是开启启动的。

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

这样就ok了。

安全

说到安全就要说下iptable 了。

这个就是一个轻量的防火墙了,比较实用。

但是这里面有一个问题,那就iptable 配置很复杂,有多复杂呢? 可以看下我的linux 系列。

所以就有个开发了配置工具,可以理解为iptable的客户端吧。

这里解释一个ufw这个,市面上有很多,可以找到适合自己的。

安装很简单:

yum install ufw
  1. 运行命令检查 ufw 的 sudo ufw status verbose 状态。 默认情况下,ufw 未启用且处于非活动状态。

  2. 运行 sudo ufw default allow 命令。 由于除了默认的“allow”规则之外,没有其他规则,因此 VM 上的每个端口都将被视为已打开。

为什么ufw 有这个设置allow 的东西呢? 这跟iptable 的模式有关,iptable 两种模式,一个是allow 一种是 reject,如果设置了allow,那么就配置不允许的,就是规则里面没有的就允许,反之亦然。

  1. 可以通过运行 sudo ufw default deny 命令将默认规则更改为拒绝来实现此操作。 仅允许 SSH 和 HTTP 协议。 其他协议将被拒绝。

  2. 通过运行 sudo ufw allow http允许 HTTP 协议。 TTP 是在 /etc/services 文件中定义的已知协议。 因此,可以使用协议名称,并且可以运行该 sudo ufw allow http 命令。 运行 sudo ufw allow 80 也完全有效。

测试一下哈: sudo ufw deny http

这里设置http为不允许:

重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]

这样就可以了,然后就访问不了了。

多实例

如果想部署多个在同一台机器的话,那么创建另外一个service,然后配置一下环境:

Environment=ASPNETCORE_URLS=http://localhost:6001

这样就启动的是另外一个端口了。

那么nginx 做负载均衡,这个已经在nginx 系列了,就不罗嗦了。

下一结利用一些工具在nginx 排查和监控netcore的运行情况。