.NET 跨平台部署linux

在Linux上使用Systemd来部署和管理.NET应用程序是一个常见且推荐的做法。Systemd不仅可以确保你的应用在系统启动时自动运行,还可以处理自动重启、日志记录等功能。以下是详细的步骤说明,指导你如何设置一个Systemd服务来管理你的.NET应用程序。

Systemd用于启动、停止、重启和监控.NET应用程序。它是一个系统和服务管理器,能够确保你的应用在服务器启动时自动运行,并且在崩溃或异常终止后能自动重启。实际应用中可以搭配nginx一起使用。本文只是一个简单的例子。

搭建环境

首先需要搭建一个linux的环境,本文使用的是Ubuntu 22.04.5 LTS。

然后我们打开一个shell输入一下代码:

# 切换到root用户,并以root权限打开一个shell。
sudo -i
# 切换目录到根目录(/)
cd /
# 列出当前目录中的所有文件和目录。
ls
# 创建一个名为coreapi的新目录。
mkdir coreapi
# 递归地更改coreapi目录及其内容的权限,使所有人具有读取、写入和执行权限
chmod -R 777 coreapi/

这样已经成功的在指定目录创建了一个文件夹,接下来我们发布程序。然后我们把发布的代码放进去就好了。

发布程序

本文使用的是visual studio 2022。

新建项目,创建一个DemoApi的webapi项目。然后右键项目发布,按照图片进行配置。

我们把打包的文件放在刚才的目录,然后直接运行试一下。如果提示权限不足,就是因为少执行了一句命令。

# 给DemoApi文件添加执行权限,适用于文件所有者、所属组及其他用户。	
chmod +x DemoApi
# 执行位于当前目录中的名为DemoApi的可执行文件。
./DemoApi

运行完毕后,我们打开网页看一下是没问题的。

创建和启动服务

linux运行.net的项目是可以了,但是如果关闭shell的话,程序就不能用了。所以我们需要把项目部署再linux的服务了。就是本文说的systemd。

systemd通常会在/etc/systemd/system/目录下创建一个.service文件,例如myapp.service。那么我们按照这个目录创建一个coreapi.service的文件。

继续执行一下代码:

# 切换到指定目录
cd /etc/systemd/system
# 启动vim编辑器打开或创建一个coreapi.service 的Systemd服务配置文件。
vim coreapi.service

我们把下面的内容通过vim编辑器粘贴再coreapi.service中。其中的参数

[Unit]
Description=My .NET Application Service
# 确保网络目标已启动后再启动此服务,确保网络接口可用。
After=network.target

[Service]
# 设置工作目录为应用程序所在的路径。
WorkingDirectory=/var/coreapi

# 指定启动应用程序的命令。确保路径正确指向你的可执行文件或dotnet运行时与dll文件。
# ExecStart=/usr/bin/dotnet /var/coreapi/DemoApi.dll
ExecStart=/var/coreapi/DemoApi

# 当服务停止后总是尝试重启它。
Restart=always

# 如果服务崩溃,在10秒后自动重启。
RestartSec=10

# 为日志条目指定一个标识符,方便识别。
SyslogIdentifier=myapp

# 设置环境变量,指示应用程序当前处于生产环境。
Environment=ASPNETCORE_ENVIRONMENT=Production

# 指定运行服务的用户。使用非特权用户提高安全性。
User=www-data

# 可选:设置应用程序监听的URL(如果需要自定义)。
# Environment=ASPNETCORE_URLS=http://localhost:5000

# 可选:禁用.NET Core遥测消息。
# Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

# 可选:设置应用程序日志级别(例如,仅记录错误)。
# Environment=ASPNETCORE_LOGGING__LOGLEVEL=Error

[Install]
# 定义服务在多用户模式下被启用。
WantedBy=multi-user.target

然后我们设置启用和启动命令。

# 启用 coreapi.service 服务,使其在系统启动时自动运行
systemctl enable coreapi.service
# 启动 coreapi.service 服务。
systemctl start coreapi.service 

其他

我们还可以status和stop命令查看服务的状态或者关闭服务

# 查看 coreapi.service 服务的状态
systemctl status coreapi.service
# 停止 coreapi.service 服务。
systemctl stop coreapi.service

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从前是晴天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值