锄淫鲷 发表于 2025-5-31 23:12:46

在Ubuntu中部署.NET 8 Minimal WebAPI项目

以下步骤,均已多次在实战项目中实现,遂在此分享。
如有错漏之处,感谢斧正。
原文链接:https://mp.weixin.qq.com/s/iBzh5vVh7xhmOBhd1IN-xA
发布时间:2025-5-18
一、服务器环境准备

系统:Ubuntu 22.04 64位
配置:2核(vCPU) 2 GiB
允许远程SSH访问。
二、安装Nginx

# 更新系统包
sudo apt update

# 安装 Nginx
sudo apt install nginx

# 开放防火墙端口,允许HTTP流量
sudo ufw allow 'Nginx HTTP'三、安装.NET 8运行环境

# 添加微软包源
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

# 安装SDK(开发环境可选)或运行时
sudo apt-get update
sudo apt-get install -y aspnetcore-runtime-8.0# 仅运行时
sudo apt-get install -y dotnet-sdk-8.0          # 完整SDK可以使用以下指令,判断是否有成功安装环境;
# 查看已安装的.NET 运行时版本
dotnet --list-runtimes

# 查看已安装的.NET SDK 版本
dotnet --list-sdks

# 查看默认.NET 版本
dotnet --version四、部署.NET 8 Minimal WebApi项目

4.1 发布项目到本地文件夹

使用VS2022,将项目发布(Build)到本地文件夹,相关配置如下:

[*]目标位置:D:\MinimalWebApi
[*]删除现有文件:true
[*]配置:Release
[*]目标框架:net8.0
[*]目标运行时:linux-x64
4.2 将发布文件复制到服务器指定目录

将本地目录 D:\MinimalWebApi 中的文件,通过远程工具复制到服务的 /usr/MinimalWebApi 目录中;
工具推荐使用,FinalShell,或者云服务器厂商自带的远程功能。
4.3 配置Systemd系统服务

为了保持Minimal WebApi项目持续运行并实现自动重启,需使用Systemd服务。
4.3.1 创建Systemd服务文件

在 /etc/systemd/system 目录下,创建名为 MinimalWebApi.service Systemd服务;
具体内容如下:

Description=MinimalWebApi
After=network.target


WorkingDirectory=/usr/MinimalWebApi
ExecStart=/usr/bin/dotnet /usr/MinimalWebApi/MinimalWebApi.dll
Restart=always
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false


WantedBy=multi-user.target4.3.2 启动Systemd服务

确保 /usr/MinimalWebApi 目录中存在 MinimalWebApi.dll文件,并同步确认本地的发布文件复制至服务器时没有缺失。
然后执行以下代码,以启动Systemd服务
# 重新加载Systemd配置
sudo systemctl daemon-reload

# 启动指定Systemd服务
sudo systemctl start MinimalWebApi

# 启用指定Systemd服务的开机自启功能
sudo systemctl enable MinimalWebApi4.3.3 检查服务是否正常运行

# 查看指定Systemd服务状态
sudo systemctl status MinimalWebApi如果出现绿色字体的显眼提示 active (running) ,则代表WebApi服务启动成功。
4.3.4 其他可能有用的指令

Systemd相关
sudo systemctl start <service>   # 启动服务
sudo systemctl stop <service>      # 停止服务
sudo systemctl restart <service>   # 重启服务
sudo systemctl reload <service>    # 重新加载配置(无需重启服务)
sudo systemctl enable <service>    # 开启开机自启
sudo systemctl disable <service>   # 关闭开机自启
systemctl is-enabled <service>   # 检查自启状态
systemctl status <service>         # 查看服务状态(含进程树和最新日志)
systemctl list-dependencies <unit> # 查看服务依赖关系
systemctl list-unit-files          # 列出所有单元文件
sudo systemctl daemon-reload       # 修改服务文件后重载配置系统日志相关
journalctl                     # 查看所有日志
journalctl -u <service>          # 过滤指定服务日志
journalctl -f                  # 实时跟踪日志(类似 `tail -f`)
journalctl -b                  # 查看本次启动后的日志
journalctl -p err                # 按日志级别过滤(如 err/warn/info)
journalctl _PID=<pid>            # 按进程ID过滤
journalctl --since "2025-05-16 09:00" --until "10:00"# 按时间范围过滤
journalctl --disk-usage          # 查看日志占用空间
sudo journalctl --vacuum-time=7d # 清理7天前的日志
sudo journalctl --rotate         # 归档当前日志并创建新文件系统启动分析相关
systemd-analyze                     # 总启动耗时
systemd-analyze blame               # 各服务启动耗时排序
systemd-analyze critical-chain      # 显示启动关键路径
systemd-analyze blame | head -n 10# 找出耗时最长的服务五、配置Nginx反向代理

5.1 创建 Nginx 配置文件

在 /etc/nginx/conf.d/ 目录下新建配置文件(如 MinimalWebApi.conf),内容如下:
server {
    listen 80;# 对外暴露的端口,默认80
    server_name yourdomain.com; # 配置你的域名或者IP地址

    location / {
      proxy_pass http://localhost:5000;# IP端口需与WebApi程序监听的端口保持一致
      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;
    }
}5.2 启用配置

# 检查Nginx语法,无错误提示则配置正确
sudo nginx -t

# 重载Nginx
sudo systemctl reload nginx5.3 其他Nginx命令

# 查看 Nginx 服务状态
sudo systemctl status nginx

# 启动 Nginx
sudo systemctl start nginx

# 停止 Nginx
sudo systemctl stop nginx

# 重启 Nginx
sudo systemctl restart nginx六、检查权限(可选)

6.1 检查服务器文件夹权限

确保 Nginx 有权限访问网站文件。你可以使用以下命令更改文件所有权和权限:
sudo chown -R www-data:www-data /usr/MinimalWebApi
sudo chmod -R 755 /usr/MinimalWebApi6.2 检查云服务器的防火墙设置

如果云服务器有开启防火墙,防火墙可能会阻止对 Nginx 服务的访问。
所以,需要确保防火墙允许 HTTP(端口 80)或者 HTTPS(端口 443)流量通过。
# 允许HTTP流量
sudo ufw allow 'Nginx HTTP'

# 允许HTTPS流量
sudo ufw allow 'Nginx HTTPS'6.3 检查云服务器出入站规则

在云服务器的防火墙(安全组)规则中,分别添加出入站规则,需支持HTTP,视情况支持HTTPS。
七、验证成功

在任意浏览器,输入http://你的IP地地址/swagger/index.html便可正常访问你的.Net 8 Minimal WebApi服务站点了,如果你有启动swagger的话。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 在Ubuntu中部署.NET 8 Minimal WebAPI项目