找回密码
 立即注册
首页 业界区 安全 在Ubuntu中部署.NET 8 Minimal WebAPI项目

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

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

系统:Ubuntu 22.04 64位
配置:2核(vCPU) 2 GiB
允许远程SSH访问。
二、安装Nginx
  1. # 更新系统包
  2. sudo apt update
  3. # 安装 Nginx
  4. sudo apt install nginx
  5. # 开放防火墙端口,允许HTTP流量
  6. sudo ufw allow 'Nginx HTTP'  
复制代码
三、安装.NET 8运行环境
  1. # 添加微软包源
  2. wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb
  3. sudo dpkg -i packages-microsoft-prod.deb
  4. rm packages-microsoft-prod.deb
  5. # 安装SDK(开发环境可选)或运行时
  6. sudo apt-get update
  7. sudo apt-get install -y aspnetcore-runtime-8.0  # 仅运行时
  8. sudo apt-get install -y dotnet-sdk-8.0          # 完整SDK
复制代码
可以使用以下指令,判断是否有成功安装环境;
  1. # 查看已安装的.NET 运行时版本
  2. dotnet --list-runtimes
  3. # 查看已安装的.NET SDK 版本
  4. dotnet --list-sdks
  5. # 查看默认.NET 版本
  6. 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服务;
具体内容如下:
  1. [Unit]
  2. Description=MinimalWebApi
  3. After=network.target
  4. [Service]
  5. WorkingDirectory=/usr/MinimalWebApi
  6. ExecStart=/usr/bin/dotnet /usr/MinimalWebApi/MinimalWebApi.dll
  7. Restart=always
  8. User=www-data
  9. Environment=ASPNETCORE_ENVIRONMENT=Production
  10. Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
  11. [Install]
  12. WantedBy=multi-user.target
复制代码
4.3.2 启动Systemd服务

确保 /usr/MinimalWebApi 目录中存在 MinimalWebApi.dll文件,并同步确认本地的发布文件复制至服务器时没有缺失。
然后执行以下代码,以启动Systemd服务
  1. # 重新加载Systemd配置
  2. sudo systemctl daemon-reload
  3. # 启动指定Systemd服务
  4. sudo systemctl start MinimalWebApi
  5. # 启用指定Systemd服务的开机自启功能
  6. sudo systemctl enable MinimalWebApi
复制代码
4.3.3 检查服务是否正常运行
  1. # 查看指定Systemd服务状态
  2. sudo systemctl status MinimalWebApi
复制代码
如果出现绿色字体的显眼提示 active (running) ,则代表WebApi服务启动成功。
4.3.4 其他可能有用的指令

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

5.1 创建 Nginx 配置文件

在 /etc/nginx/conf.d/ 目录下新建配置文件(如 MinimalWebApi.conf),内容如下:
  1. server {
  2.     listen 80;# 对外暴露的端口,默认80
  3.     server_name yourdomain.com; # 配置你的域名或者IP地址
  4.     location / {
  5.         proxy_pass http://localhost:5000;# IP端口需与WebApi程序监听的端口保持一致
  6.         proxy_http_version 1.1;
  7.         proxy_set_header Upgrade $http_upgrade;
  8.         proxy_set_header Connection keep-alive;
  9.         proxy_set_header Host $host;
  10.         proxy_cache_bypass $http_upgrade;
  11.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  12.         proxy_set_header X-Forwarded-Proto $scheme;
  13.     }
  14. }
复制代码
5.2 启用配置
  1. # 检查Nginx语法,无错误提示则配置正确
  2. sudo nginx -t
  3. # 重载Nginx
  4. sudo systemctl reload nginx
复制代码
5.3 其他Nginx命令
  1. # 查看 Nginx 服务状态
  2. sudo systemctl status nginx
  3. # 启动 Nginx
  4. sudo systemctl start nginx
  5. # 停止 Nginx
  6. sudo systemctl stop nginx
  7. # 重启 Nginx
  8. sudo systemctl restart nginx
复制代码
六、检查权限(可选)

6.1 检查服务器文件夹权限

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

如果云服务器有开启防火墙,防火墙可能会阻止对 Nginx 服务的访问。
所以,需要确保防火墙允许 HTTP(端口 80)或者 HTTPS(端口 443)流量通过。
  1. # 允许HTTP流量
  2. sudo ufw allow 'Nginx HTTP'
  3. # 允许HTTPS流量
  4. sudo ufw allow 'Nginx HTTPS'
复制代码
6.3 检查云服务器出入站规则

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

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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册