在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]