【.NET Core & Linux】项目部署步骤和注意事项

概述

在开发过程中,可以通过Kestre服务器 or IIS启动项目,进行本地访问。但是想让项目在外网被访问到,就需要把项目部署到能被外网访问到的服务器上,下面就分享下.net core项目在linux服务器上的部署。

跨平台项目部署

服务器使用的是腾讯云轻量应用服务器,Linux系统 ,版本:CentOs 7.6,部署的项目版本为.NET Core 3.1

  1. 发布需要部署到服务器上的项目, 填写发布选项并进行项目发布
    在这里插入图片描述

  2. 根据发布的目标位置,找到相应打包后的项目文件夹
    在这里插入图片描述

  3. 使用工具FinalSell or(xshell、sftp)打开Linux服务器;
    (没有服务器的小伙伴可以到腾讯云、阿里云、百度云进行购买)
    在这里插入图片描述

  4. 安装.NET Core的依赖环境

    注册Microsoft密钥
    sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

    更新yum库
    sudo yum update

    安装 .NET Core 运行时
    sudo yum -y install aspnetcore-runtime-3.1

    安装 .NET Core SDK 运行时
    sudo yum -y install dotnet-sdk-3.1

     若需要部署高版本项目的小伙伴可以选择对应版本的runtime和sdk
    

    查看Dotnet 信息
    dotnet --info

    查看Dotnet 版本
    dotnet --version

    若安装yum过程中,遇到问题or错误可以查看该文章:
    重装yum: https://blog.csdn.net/homewm/article/details/80642851
    
  5. 将压缩包上传到Linux服务器中,并进行解压:unzip publish.zip
    在这里插入图片描述

  6. 解压后,运行项目:dotnet NswagCodeGenerators.dll在这里插入图片描述

  7. 项目运行正常,nice!
    访问的端口号需要进行开放,不然会被防火墙拦截,导致无法访问
    在这里插入图片描述

守护进程的使用

我们关闭FinalShell后,会发现原本运行正常的项目无法访问,因为在我们断开linux的链接时,把当前的进程进行的了清除。所以我们为了保证项目的稳定性,需要使用Linux的守护进程,保证我们的项目运行.
在这里插入图片描述

Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等…

  1. 创建服务文件
    sudo nano /etc/systemd/system/KestrelSer.service

  2. 文件代码

    [Unit]
    Description=Kestrel running on CentOS
    [Service]
    WorkingDirectory=/projects/wwwroot/code_generators/publish/
    Type=simple
    User=root
    Group=root
    ExecStart=/usr/share/dotnet/dotnet /projects/wwwroot/code_generators/publish/NswagCodeGenerators.dll
    Restart=always
    # Restart service after 10 seconds if the dotnet service crashes:
    RestartSec=10
    SyslogIdentifier=dotnet-example
    Environment=ASPNETCORE_ENVIRONMENT=Production
    Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
    [Install]
    WantedBy=multi-user.target
    

    按CTRL+O保存,CTRL+X退出

  • Linux 具有区分大小写的文件系统。 将 ASPNETCORE_ENVIRONMENT 设置为“生产”会导致搜索配置文件 appsettings.Production.json,而不是 appsettings.production.json
  • 早期版本的dotnet安装的是/usr/bin/下,因此环境变量也就在该目录,后期的版本则安装到了/usr/share/dotnet下
  • 如果通过控制台直接进行复制,代码不会进行换行,因为代码中有注释,所以文件会无法运行成功,直接打开KestrelSer.service文件,进行复制即可。
    在这里插入图片描述
  1. 保存文件并启用服务(按需选择即可)
    systemctl enable KestrelSer.service # 将服务设置为每次开机启动
    systemctl start KestrelSer.service # 服务立即启动 下次不启动
    systemctl enable --now KestrelSer.service # 立即启动且每次重启也启动
  2. 查看守护进程的运行状态
    systemctl status KestrelSer.service
  3. 查看日志
    sudo journalctl -fu KestrelSer.service
  4. 最后断开连接,看看效果
    在这里插入图片描述
    在这里插入图片描述
    7.重启服务
    systemctl restart KestrelSer.service

参考文章:
Linux部署.NET Core: https://www.cnblogs.com/fancunwei/p/9308953.html
重装yum: https://blog.csdn.net/homewm/article/details/80642851
dotnet安装目录:https://blog.csdn.net/yedajiang44/article/details/121848792

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐