.Net Core程序基于Linux平台开发与部署详解

一、开发环境搭建

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:
  1. 安装VS Code:sudo apt install code(或从官网下载)。
  2. 安装C#扩展:在扩展市场搜索“C#”并安装(由Microsoft发布)。
  3. 配置调试:通过.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-tracedotnet-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应用的开发、部署和运维。关键点包括:

  1. ​开发阶段​​:利用VS Code或Rider快速构建跨平台应用。
  2. ​部署阶段​​:选择框架依赖或独立部署模式,通过systemd实现生产级服务管理。
  3. ​运维阶段​​:通过日志、监控和性能工具保障应用稳定性。

.NET的跨平台能力使其成为Linux服务器开发的理想选择,结合现代工具链和云原生支持,能够满足从微服务到企业级应用的多样化需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code_shenbing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值