• 将asp.net core程序部署到Linux服务器上(2)---以守护进程方式


    上一篇只是简单的使用控制台启动方式,启动core程序。终端关闭进程也停止了。

    下面首先介绍下如何使用Nginx做反向代理,转发请求到后端服务。

    我们可以在nginx服务器上做负载均衡,处理高并发请求(基于服务集群节点而言)。

    关于Nginx的安装,看下我另外一个博客:Nginx服务器在Linux上的安装

    现通过控制台方式启动asp.net core web api程序。

    然后打开nginx.conf文件进行配置:

     

    1. server {
    2. listen 指定的端口号;
    3. server_name ip地址或者域名;
    4. location / {
    5. proxy_pass http://目标地址ip:端口号;
    6. }
    7. }

    注意:如果防火墙开启的话,将端口号加入防火墙,然后重新启动下防火墙。

    如果是云服务器,防火墙规则开放此端口

     显示上图,说明nginx反向代理配置的没问题了。关于nginx后期会写个专栏继续分享。

    1.为web api服务创建Linux守护进程

    在Linux系统中为应用服务添加守护进程,它是一种运行在后台的特殊进程,可以周期性的执行应用程序或用于监听端口处理网络请求。守护进程还会在系统重启或意外关闭服务后自动开启应用服务,并且不会因为远程连接的终端工具断开而中断,除非系统关闭它才会退出。

    比较常用的两种方式:

    1.创建Linux系统中的服务(service)实现

    2.Supervisor进程管理工具

    这里我只介绍第一种,另外一种也有很多人介绍,自行谷歌吧。

    为了方便演示,将发布目录的文件复制到

    /var/aspnetcoreprojects/release 下

    1. mkdir -p /var/aspnetcoreprojects/
    2. cp -r /AspNetCoreProjects/AutoMapperWebApiTest/bin/Release/netcoreapp3.1/* /var/aspnetcoreprojects/release

     复制完,尝试下能否正常启动。

    类似于Windows一样,Linux系统中也有“服务”这一说法,服务相当于一个后台进程,在进程中自动运行处理某个应用程序,基于它可以带给其中应用程序一定的维稳性,因此我们又将它称为守护进程。所以我们经常将一些需要长时间运行的程序以服务的方式运行。Linux中的服务是以service的形式来体现,服务的创建方式主要是通过配置service文件来实现。

    1.切换root用户

    配置服务的一些列行为需要管理员的权限,所以我们先将当前的账号切换为root用户

    2.进入Linux的Daemon管理路径

    cd /etc/systemd/system

     

     3..创建service配置文件

    vim webapi.service
    1. [Unit]
    2. Description=ASP .NET Web Application
    3. [Service]
    4. User=root
    5. Group=root
    6. WorkingDirectory=/var/aspnetcoreprojects/release
    7. ExecStart=/usr/bin/dotnet /var/aspnetcoreprojects/release/WebApiTest.dll
    8. Restart=always
    9. RestartSec=10
    10. SyslogIdentifier=netcore-demo
    11. Environment=ASPNETCORE_ENVIRONMENT=Production
    12. [Install]
    13. WantedBy=multi-user.target

    Restart=always #服务推出后,不管是什么退出原因,总是重启
    RestartSec=10 #重启服务之前,需要等待的秒数
    User=root #使用该服务的用户

    WorkingDirectory:设置为ASP.NET Core应用发布文件的所在目录;

    ExecStart:启动服务的执行命令,该命令需要设置为可以启动我们的ASP.NET Core应用程序的命令,命令中主要分为3部分,每部分又空格隔开:

    • 第一部分为常量值:/usr/bin/dotnet(相当用于启动.Net程序的工具);
    • 第二部分是我们ASP.NET Core应用程序中启动项目的DLL所在目录;
    • 第三部分是设置ASP.NET Core中Web主机服务监听的端口;

    注意:为确保该服务配置文件能够正常启动我们的ASP.NET Core应用程序,我们可以事先在命令行中测试运行下ExecStart中的命令,看是否能够正常执行

    :wq 保存退出.

    5.加载服务配置文件

    systemctl daemon-reload
    

    6.将服务设置为开机启动 

    1. systemctl enable 服务文件名或者全名

      比如 systemctl enable webapi.service 或者systemctl enable webapi

    7.启动服务

    systemctl start 服务文件名
    

    8.查看服务状态

    systemctl status 服务文件名

     

    将所有终端关闭,然后重新打开:查看服务运行状态:

     这样说明,我们的Linux守护进程已经创建成功了。

    下面说下,配置中遇到的坑:

     How To Deploy .Net Core Application On Linux

    之前借鉴的老外的一篇文章,如何部署的,但是创建守护进程一直失败。

    其实是配置中,少了user参数。 

    systemctl服务部署错误:code=exited, status=217/USER

    这篇文章帮我解决了问题。

  • 相关阅读:
    通过async方式在浏览器中调用web worker
    【后端】经典面试题——GET和POST的区别
    13 Pearson检验
    SpringBoot中15个常用启动扩展点,你用过几个?
    详解设计模式:责任链模式
    JAVA:实现在给定的链表中找到一个随机节点算法(附完整源码)
    局域网下多台windows电脑时间同步
    逆置链表(原地逆置链表)
    有序管理SSH Keys,爆击Permission denied
    【前端技巧】css篇
  • 原文地址:https://blog.csdn.net/qq_34550459/article/details/126713948