一、开发环境搭建
1.1 安装.NET SDK
在Linux系统上安装.NET SDK(以Ubuntu 20.04为例):
# 1. 下载并安装Microsoft包签名密钥和仓库配置
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# 2. 更新包列表并安装.NET SDK(以.NET 8为例)
sudo apt-get update
sudo apt-get install -y dotnet-sdk-8.0
# 3. 验证安装
dotnet --version # 输出类似:8.0.100
关键说明:
- 支持的Linux发行版:Ubuntu、Debian、CentOS/RHEL、Fedora、openSUSE等(官方支持列表)。
- 开发工具推荐:Visual Studio Code(安装C#扩展)或JetBrains Rider(跨平台IDE)。
1.2 开发工具配置
使用Visual Studio Code:
- 安装VS Code:
sudo apt install code
(或从官网下载)。 - 安装C#扩展:在扩展市场搜索“C#”并安装(由Microsoft发布)。
- 配置调试:通过
.vscode/launch.json
文件配置调试参数(自动生成或手动编写)。
使用Rider:
- 直接从JetBrains官网下载Linux版本安装包,支持完整的.NET开发功能(包括调试、性能分析等)。
二、开发实践
2.1 创建项目
# 创建控制台应用
dotnet new console -n MyLinuxApp
cd MyLinuxApp
# 创建Web应用(ASP.NET Core)
dotnet new webapp -n MyWebApp
cd MyWebApp
项目结构说明:
Program.cs
:主入口文件(.NET 6+使用顶级语句简化代码)。MyLinuxApp.csproj
:项目配置文件(定义依赖项、目标框架等)。
2.2 编译与运行
# 编译项目(生成DLL文件)
dotnet build
# 运行程序(依赖.NET运行时)
dotnet run
# 发布独立部署版本(包含运行时,无需目标机器安装.NET)
dotnet publish -c Release -r linux-x64 --self-contained true
关键参数:
-r linux-x64
:指定目标平台为Linux 64位。--self-contained true
:生成独立部署包(文件较大,但无需目标机器安装.NET)。--self-contained false
:生成框架依赖部署包(需目标机器安装对应版本的.NET运行时)。
三、Linux平台部署
3.1 部署模式选择
模式 | 描述 | 适用场景 |
---|---|---|
框架依赖部署 | 仅发布应用代码和依赖项,依赖目标机器已安装.NET运行时 | 服务器已统一管理.NET版本,节省磁盘空间 |
独立部署 | 发布应用代码+依赖项+运行时 | 目标机器无.NET环境或需隔离版本 |
3.2 部署步骤(以独立部署为例)
1. 发布应用
# 在开发机上发布
dotnet publish -c Release -r linux-x64 --self-contained true -o ./publish
生成的publish
目录包含:
MyLinuxApp
(可执行文件,Linux权限为755)- 依赖的DLL文件
- 配置文件(如
appsettings.json
)
2. 传输到Linux服务器
# 使用scp传输(从本地到服务器)
scp -r ./publish user@your-server-ip:/home/user/myapp
3. 在Linux服务器上配置
# 1. 创建专用用户(可选,增强安全性)
sudo useradd -m myappuser
sudo passwd myappuser
# 2. 切换到应用目录并设置权限
sudo chown -R myappuser:myappuser /home/user/myapp
cd /home/user/myapp
# 3. 运行应用(前台运行)
./MyLinuxApp
# 4. 后台运行(使用nohup或systemd)
nohup ./MyLinuxApp > app.log 2>&1 &
# 或配置systemd服务(推荐生产环境使用)
3.3 配置Systemd服务(生产环境推荐)
创建服务文件/etc/systemd/system/mylinuxapp.service
:
[Unit]
Description=My .NET Linux App
After=network.target
[Service]
User=myappuser
WorkingDirectory=/home/user/myapp
ExecStart=/home/user/myapp/MyLinuxApp
Restart=always
RestartSec=10
Environment="ASPNETCORE_ENVIRONMENT=Production" # 针对Web应用
[Install]
WantedBy=multi-user.target
管理服务:
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start mylinuxapp
# 设置开机自启
sudo systemctl enable mylinuxapp
# 查看状态和日志
sudo systemctl status mylinuxapp
journalctl -u mylinuxapp -f # 实时日志
四、关键注意事项
4.1 文件权限与用户隔离
- 避免使用root运行:创建专用用户(如
myappuser
)运行应用,降低安全风险。 - 目录权限:确保应用目录对运行用户可读写(如日志、配置文件目录)。
4.2 环境变量配置
- 生产环境变量:通过
Environment
文件或systemd的Environment
指令传递(如数据库连接字符串)。 - 敏感信息:使用密钥管理工具(如Vault)或Linux的
secret
机制。
4.3 日志管理
- 控制台输出:默认输出到stdout/stderr,可通过
journalctl
查看(systemd服务)。 - 文件日志:在代码中配置日志框架(如Serilog)写入文件,并定期轮转(使用
logrotate
工具)。
五、性能优化与监控
5.1 性能调优
- GC设置:通过环境变量调整垃圾回收器行为(如
COMPlus_GCCpuGroup=1
启用多核GC)。 - 线程池:针对高并发场景调整
ThreadPool
设置(如DOTNET_THREADPOOL_MIN_THREADS
)。
5.2 监控与诊断
- 健康检查:ASP.NET Core内置
/health
端点(需配置HealthChecks
中间件)。 - 性能分析:使用
dotnet-trace
、dotnet-dump
等工具收集性能数据。 - 指标监控:集成Prometheus(通过
Prometheus.NET
库)或Azure Application Insights。
六、常见问题解决
6.1 依赖库缺失
- 错误示例:
error while loading shared libraries: libssl.so.1.1: cannot open shared object file
。 - 解决方案:
# Ubuntu/Debian安装依赖 sudo apt-get install -y libssl1.1 libgdiplus # CentOS/RHEL sudo yum install -y openssl11 libgdiplus
6.2 跨平台路径问题
- 代码适配:使用
Path.Combine
代替硬编码路径分隔符(/
或\
)。 - 配置文件路径:通过
IConfiguration
读取配置,避免直接拼接路径。
6.3 防火墙与端口
- 开放端口:确保服务器防火墙允许应用端口(如Web应用的80/443或API的5000)。
# Ubuntu使用ufw
sudo ufw allow 5000/tcp
sudo ufw enable
七、总结
通过以上步骤,开发者可以高效地在Linux平台上完成.NET应用的开发、部署和运维。关键点包括:
- 开发阶段:利用VS Code或Rider快速构建跨平台应用。
- 部署阶段:选择框架依赖或独立部署模式,通过systemd实现生产级服务管理。
- 运维阶段:通过日志、监控和性能工具保障应用稳定性。
.NET的跨平台能力使其成为Linux服务器开发的理想选择,结合现代工具链和云原生支持,能够满足从微服务到企业级应用的多样化需求。