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 8 和 Microsoft.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
按实际情况调整以下值:
WorkingDirectoryExecStartUser- 监听端口
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 环境