重新整理 .net core 实践篇 ———— linux 上线篇 [外篇]
前言
简单整理一个linux 简单上线。 这个是该系列的外篇,该系列继续更新。献给刚学的人。
正文
安装实例
dotnet new webapp -n AspNetCoreDemo -o firstwebapp
编译并运行:
dotnet run
查看网络情况:
netstat -anpl
将项目发布到指定位置:
dotnet publish -o /var/testdotnet/
将打包好的运行起来:
dotnet /var/testdotnet/AspNetCoreDemo.dll
配置nginx
这个时候是外面是访问不了的,原因如下:
这里绑定的是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
然后配置文件改成这样:
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
然后我这里访问一下:
这样就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 是管理服务的用户。 它应存在于系统中,并具有相应的应用程序文件所有权。
可以在服务文件中设置任意数量的环境变量。
然后查看一下:
然后这里有一个disable,这个意思是系统重启后不会去启动这个。
设置enable:systemctl enable AspNetCoreDemo
这里就会创建一个链接过去。 这里面的就是开启启动的。
这样就ok了。
安全
说到安全就要说下iptable 了。
这个就是一个轻量的防火墙了,比较实用。
但是这里面有一个问题,那就iptable 配置很复杂,有多复杂呢? 可以看下我的linux 系列。
所以就有个开发了配置工具,可以理解为iptable的客户端吧。
这里解释一个ufw这个,市面上有很多,可以找到适合自己的。
安装很简单:
yum install ufw
-
运行命令检查 ufw 的 sudo ufw status verbose 状态。 默认情况下,ufw 未启用且处于非活动状态。
-
运行 sudo ufw default allow 命令。 由于除了默认的“allow”规则之外,没有其他规则,因此 VM 上的每个端口都将被视为已打开。
为什么ufw 有这个设置allow 的东西呢? 这跟iptable 的模式有关,iptable 两种模式,一个是allow 一种是 reject,如果设置了allow,那么就配置不允许的,就是规则里面没有的就允许,反之亦然。
-
可以通过运行 sudo ufw default deny 命令将默认规则更改为拒绝来实现此操作。 仅允许 SSH 和 HTTP 协议。 其他协议将被拒绝。
-
通过运行 sudo ufw allow http允许 HTTP 协议。 TTP 是在 /etc/services 文件中定义的已知协议。 因此,可以使用协议名称,并且可以运行该 sudo ufw allow http 命令。 运行 sudo ufw allow 80 也完全有效。
测试一下哈: sudo ufw deny http
这里设置http为不允许:
这样就可以了,然后就访问不了了。
多实例
如果想部署多个在同一台机器的话,那么创建另外一个service,然后配置一下环境:
Environment=ASPNETCORE_URLS=http://localhost:6001
这样就启动的是另外一个端口了。
那么nginx 做负载均衡,这个已经在nginx 系列了,就不罗嗦了。
结
下一结利用一些工具在nginx 排查和监控netcore的运行情况。