在 Rocky Linux 9 上部署一个 ASP.NET Core 应用程序(如 Web API 或 Web App),需要完成以下关键步骤:
✅ 假设你已有一个发布好的 ASP.NET Core 程序(
.dll文件)
✅ 目标:以 systemd 服务 方式运行,配合 Nginx 反向代理,支持开机自启、日志管理、HTTPS(可选)
🧰 一、前提条件
- Rocky Linux 9 已安装并联网
- 已安装 .NET 8 Runtime(或 SDK)
- 你的 ASP.NET Core 应用已发布(可通过
dotnet publish -c Release生成)
🔧 第一步:安装 .NET 8 运行时(如未安装)
# 添加 Microsoft 仓库
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/9/packages-microsoft-prod.rpm
# 安装 ASP.NET Core 8 运行时
sudo dnf install -y aspnetcore-runtime-8.0
# 验证
dotnet --list-runtimes
📂 第二步:部署应用程序文件
1. 创建应用目录
sudo mkdir -p /var/www/myapp
2. 将发布文件复制到服务器(通过 scp、rsync 或 Git)
# 示例:从本地复制(在你开发机上执行)
scp -r ./bin/Release/net8.0/publish/* user@your-server:/var/www/myapp/
💡 发布命令(在开发机):
dotnet publish -c Release -o ./publish
3. 设置权限(安全最佳实践)
# 创建专用用户(不要用 root 运行!)
sudo useradd -r -s /sbin/nologin myappuser
# 授权
sudo chown -R myappuser:myappuser /var/www/myapp
sudo chmod -R 755 /var/www/myapp
⚙️ 第三步:创建 systemd 服务(实现后台运行 + 开机自启)
创建服务文件:
sudo tee /etc/systemd/system/myapp.service <<EOF
[Unit]
Description=My ASP.NET Core App
After=network.target
[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/YourAppName.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=myapp
User=myappuser
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
# 可选:设置环境变量(如数据库连接字符串)
# Environment=ConnectionStrings__DefaultConnection=Server=...
[Install]
WantedBy=multi-user.target
EOF
🔁 替换
YourAppName.dll为你的实际 DLL 名称(如MyWebApi.dll)
启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now myapp.service
查看状态和日志
# 检查状态
sudo systemctl status myapp
# 实时日志
sudo journalctl -u myapp -f
✅ 此时你的应用已在 http://localhost:5000(默认端口)运行
🌐 第四步:配置 Nginx 反向代理(推荐)
1. 安装 Nginx
sudo dnf install -y nginx
sudo systemctl enable --now nginx
2. 创建站点配置
sudo tee /etc/nginx/conf.d/myapp.conf <<EOF
server {
listen 80;
server_name your-domain.com; # 或服务器公网 IP
location / {
proxy_pass http://localhost:5000; # 转发到 Kestrel
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_cache_bypass \$http_upgrade;
proxy_buffering off;
}
}
EOF
🔁 替换
your-domain.com为你的域名或 IP
3. 测试并重载 Nginx
sudo nginx -t && sudo systemctl reload nginx
现在可通过 http://your-server-ip/ 访问你的应用!
🔒 第五步:(可选)启用 HTTPS(Let's Encrypt)
# 安装 certbot
sudo dnf install -y certbot python3-certbot-nginx
# 获取证书并自动配置 HTTPS
sudo certbot --nginx -d your-domain.com
# 自动续期(已自动配置 cron)
sudo certbot renew --dry-run
✅ 完成后,Nginx 会自动重定向 HTTP → HTTPS
🛡️ 安全加固建议
防火墙放行 80/443
sudo firewall-cmd --permanent --add-service={http,https} sudo firewall-cmd --reload禁止直接访问 Kestrel 端口(5000)
sudo firewall-cmd --permanent --remove-port=5000/tcp定期更新系统和 .NET
sudo dnf update -y
🧪 验证部署是否成功
curl http://localhost # 应返回网页内容
curl -I http://your-domain.com # 检查 HTTP 状态码
🗑️ 卸载(如需)
# 停止并删除服务
sudo systemctl disable --now myapp
sudo rm /etc/systemd/system/myapp.service
# 删除应用文件
sudo rm -rf /var/www/myapp
# 删除 Nginx 配置
sudo rm /etc/nginx/conf.d/myapp.conf
sudo systemctl reload nginx
✅ 总结架构
Internet
↓
[Firewall: 80/443]
↓
Nginx (反向代理 + SSL)
↓
Kestrel (.NET Core App on localhost:5000)
↓
Your ASP.NET Core Application