跳到主要内容
版本:3.0.0

Linux 应用部署

Aegis 3.x 应用在 Linux 上的发布、运行和托管方式。不讨论 Aegis.Documents 体系依赖的浏览器、LibreOffice、Python 等组件环境。

如果应用启用了文档处理能力,请在完成应用部署后,再补充阅读部署菜单中的 文档组件运行环境

适用范围

  • Aegis 3.x
  • .NET 8
  • systemd 托管的 Linux 服务

推荐部署流程

1. 准备发布产物

在构建机或开发机执行:

dotnet publish YourApp.csproj -c Release -o ./publish

publish/ 目录整体上传到目标服务器,例如:

/opt/aegis/your-app

2. 准备 .NET 8 运行时

目标服务器至少需要可运行 ASP.NET Core 应用的 .NET 8 运行时。

先检查当前环境:

dotnet --info
dotnet --list-runtimes

如果输出中已经包含 .NET 8Microsoft.AspNetCore.App 8.*,可以直接继续部署。

3. 验证应用可以直接启动

先以命令行方式验证应用本身能够启动:

cd /opt/aegis/your-app
dotnet YourApp.dll --urls "http://0.0.0.0:8000"

建议先完成以下检查:

  • 端口已按预期监听
  • appsettings.Production.json 或其他生产配置已经准备好
  • 应用依赖的数据库、Redis、配置中心等外部资源可以访问

确认无误后再停止进程,继续配置 systemd

使用 systemd 托管

1. 创建服务文件

sudo vim /etc/systemd/system/your-app.service

示例内容如下:

[Unit]
Description=Aegis Application
After=network.target

[Service]
WorkingDirectory=/opt/aegis/your-app
ExecStart=/usr/bin/dotnet /opt/aegis/your-app/YourApp.dll --urls http://0.0.0.0:8000
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=your-app
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

按实际情况调整以下值:

  • WorkingDirectory
  • ExecStart
  • User
  • 监听端口

2. 重新加载并启动服务

sudo systemctl daemon-reload
sudo systemctl start your-app.service
sudo systemctl status your-app.service

3. 设置开机自启

sudo systemctl enable your-app.service

4. 查看日志

journalctl -u your-app.service -f

网络与防火墙

如果服务器启用了防火墙,需要开放应用实际监听的端口,例如:

sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent
sudo firewall-cmd --reload

如果前面还挂有 Nginx、Ingress 或其他网关,请以网关转发端口为准。

验收清单

  • systemctl status your-app.service 显示服务为 active
  • 应用首页、健康接口或 Swagger 可以正常访问
  • 生产配置已生效
  • 数据库、缓存、消息等外部资源连接正常
  • 重启服务器后服务可以自动拉起

常见问题

提示缺少 ASP.NET Core 运行时

通常表示服务器只有 dotnet 基础运行时,没有 Microsoft.AspNetCore.App 8.*。请补齐 ASP.NET Core 运行时后再启动。

命令行能启动,systemd 启动失败

优先检查:

  • WorkingDirectory 是否正确
  • ExecStart 中的 dll 路径是否正确
  • User 是否有读取目录和配置文件的权限
  • 环境变量是否在服务文件里声明

应用已经部署,但文档处理失败

这通常不是应用部署本身的问题,而是文档组件运行环境未准备完整。请继续阅读:

  • 文档组件环境准备
  • Windows/RHEL/Debian 文档组件离线准备
  • 文档组件 Docker 环境