随着时代的发展以及近年来信创工作和…废话就不多说了,这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来,看操作。

上一篇介绍了如何在银河麒麟操作系统上安装Nginx,这篇文章详细介绍下在银河麒麟操作系统上,使用Nginx+.NET程序实现自启动。

回顾一下之前的文章,.NET程序运行,我们使用下面的命令:

dotnet WebAPI.dll

这时我们可以看到,程序的端口号是5000,上一篇文章也说到,Nginx默认端口是80,这时我们会将Nginx配置为反向代理,以便将端口80上发出的请求路由到侦听端口5000的ASP.NET Core应用程序。

接下来,我们切换到/usr/local/nginx/conf目录,编辑nginx.conf文件。 将下面的配置放到location /配置中

proxy_pass http://localhost:5000;

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection $connection_upgrade;

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;

保存退出编辑。 将下面的配置放到http中

map $http_connection $connection_upgrade {

"~*Upgrade" $http_connection;

default keep-alive;

}

完成这些配置后,重启nginx:

systemctl restart nginx

重启nginx后,我们需要马不停蹄的回到.NET的目录中,应该是这样的:

cd /var/www

ls

dotnet WebAPI.dll

程序将会启动,如下图: 这时,打开浏览器,输入IP地址。一切正常。

这说明配置的反向代理生效了,接下来,就是如何使.NET程序自动启动了。 到目前为止,Nginx和.NET程序已经可以协同工作了,Nginx侦听80端口,并将请求路由到侦听端口为5000的.NET应用程序,但每次重启服务器或者是退出Shell客户端,都必须手动重启.NET应用程序,这不是实际的解决办法,因此,我们需要进一步配置,以便应用程序可以自动启动。

在Windows上,使用IIS作为代理来运行.NET应用,IIS相关模块会确保.NET程序会自动启动,在Linux上可以吗?也是可以的,我们可以通过 supervisor来守护进程,也可以使用.service服务文件来实现.NET程序自动启动。

我使用.service服务文件实现程序自动启动。回想上一篇文章,在/etc/systemd/system目录下,创建过一个nginx.service来实现Nginx自动启动,我们再回到这个目录,创建一个webapi.service来实现.NET程序的自动启动,废话不多说,开干。

首先创建一个www用户并设置一个密码

useradd www

passed www

注意:www账户只是一个服务账户,在系统中并没有太大意义,所以为了安全,防止该账户登录是有意义的。使用下面的命令禁止该账户通过SSH 以交互方式登录到系统。 sudo usermod -s /usr/sbin/nologin www

设置完成后,使用下面命令查看账户状态

cat /etc/passwd | grep www

可以看到,www用户无法使用 SSH 以交互方式登录系统了。

接下来,使用下面的命令,创建webapi.service

cd /etc/systemd/system

vim webapi.service

将下面的配置放到webapi.service中。

[Unit]

Description=Example .NET Web API App running on Kylin Linux

[Service]

WorkingDirectory=/var/www

ExecStart=/root/dotnet/dotnet /var/www/WebAPI.dll

Restart=always

RestartSec=10

KillSignal=SIGINT

SyslogIdentifier=dotnet-example

User=www

Environment=ASPNETCORE_ENVIRONMENT=Production

Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]

WantedBy=multi-user.target

解释下参数: WorkingDirectory 是发布应用程序的目录。 ExecStart 是启动应用程序的实际命令(必须使用绝对路径)。 Restart=always 如果由于某种原因(无论是手动还是由于崩溃)而停止,则自动启动。 RestartSec=10 进程停止后,10 秒后自动启动。 SyslogIdentifier 很重要。 它表示“系统日志标识符”。 有关守护程序的信息记录在此名称下的系统日志中。 还可以使用此标识符查找进程的 PID。 User 是管理服务的用户。 它应存在于系统中,并具有相应权限。

创建成功后,保存退出。 使用下面的命令,启动服务

systemctl start webapi.service

使用下面的命令查看下当前状态

systemctl status webapi.service

看到服务已经启动了。返回浏览器,访问下我们的WebAPI服务。 可以正常访问了。 到目前为止,服务正在运行但还未启用,通过下面的命令确保启动服务

systemctl enable webapi.service

致此,操作系统层面的问题已经全部完成了。接下来的文章,透过一个完整权限管理系统,来进一步探索国产化。

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: