.net core 如何部署linux
- Linux
- 2025-07-09
- 3994
当今的软件开发领域,.NET Core作为一种跨平台的开发框架,为开发人员提供了在不同操作系统上部署和运行应用程序的灵活性,以下是关于如何在Linux系统上部署.NET Core应用程序的详细指南:
安装.NET Core运行时或SDK
不同的Linux发行版有不同的包管理工具和安装命令,以下是一些常见发行版的安装方式:
| 发行版 | 安装命令 | 
|---|---|
| Ubuntu/Debian | sudo apt-get update<br>sudo apt-get install -y dotnet-sdk-{版本号}</br>(如需安装运行时,将dotnet-sdk-{版本号}替换为dotnet-runtime-{版本号}) | 
| CentOS/RHEL | sudo yum check-update<br>sudo yum install -y libunwind<br>sudo yum install -y dotnet-sdk-{版本号}</br>(如需安装运行时,将dotnet-sdk-{版本号}替换为dotnet-runtime-{版本号}) | 
发布.NET Core应用程序
在Windows或其他开发环境中,使用.NET Core的CLI工具来发布应用程序,在项目根目录下执行以下命令:
dotnet publish -c Release -r linux-x64 --self-contained true该命令将以Release配置发布应用程序,并指定目标运行时为Linux-x64。--self-contained参数表示生成一个独立的、自包含的应用程序包,其中包含了.NET Core运行时和应用程序的所有依赖项,如果目标Linux系统已经安装了相应版本的.NET Core运行时,可以省略此参数,进行框架依赖的部署,这样生成的部署包会更小。
上传应用程序到Linux服务器
可以使用多种方式将已发布的应用程序从本地目录传输到远程Linux服务器,常见的有SCP和Git仓库中转:
SCP方式
使用SCP命令将本地的发布目录上传到Linux服务器。
scp -r ./publish username@your_production_server:/path/to/destinationusername是你的Linux服务器用户名,your_production_server是服务器的IP地址或域名,/path/to/destination是服务器上的目标目录。
Git仓库中转方式
- 在服务器上安装Git客户端,并配置SSH公钥(配置公钥的目的是拉取私有的仓库,公开的仓库无需配置公钥),以CentOS为例,执行以下命令安装Git: yum -y install git然后通过以下命令生成SSH key: ssh-keygen -t rsa -C "xx@xxx.com"按照提示,按三次回车,即可生成SSH key,通过 cat ~/.ssh/id_rsa.pub命令可查看公钥,将公钥复制到代码仓库的公钥管理中进行配置。
- 在本地将代码推送到Git仓库,然后在服务器中执行克隆命令: mkdir core50test cd core50test git clone ssh://git@your_git_repo_url.git
运行.NET Core应用程序
切换到上传或克隆的应用程序目录,使用以下命令运行应用程序:

dotnet MyApplication.dll该命令将在默认端口(通常为5000)上启动应用程序,如果需要指定其他端口,可以使用--urls参数,
dotnet MyApplication.dll --urls="http://:8081;http://:8082" --environment=Development设置反向代理(可选)
为了提高安全性、实现负载均衡以及更好地提供静态内容,通常会在.NET Core应用程序前面设置反向代理,如Nginx或Apache。
Nginx反向代理配置示例
-  安装Nginx: sudo apt install nginx
-  创建 /etc/nginx/sites-available/myapp配置文件,内容如下:server { listen 80; server_name example.com; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
-  把配置文件链接到 sites-enabled目录:sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
-  测试配置文件,然后重启Nginx服务: sudo nginx -t sudo systemctl restart nginx
Apache反向代理配置示例
-  安装Apache:  sudo apt install apache2
-  启用 proxy和proxy_http模块:sudo a2enmod proxy proxy_http
-  创建 /etc/apache2/sites-available/myapp.conf配置文件,内容如下:<VirtualHost :80> ServerName example.com ProxyPreserveHost On ProxyPass / http://localhost:5000/ ProxyPassReverse / http://localhost:5000/ </VirtualHost>
-  启用站点配置,然后重启Apache服务: sudo a2ensite myapp.conf sudo systemctl restart apache2
安装SSL证书(可选)
使用SSL保护应用程序对于保护敏感数据至关重要,Let’s Encrypt提供免费的SSL证书,Certbot是一个流行的获取和更新Let’s Encrypt证书的工具。
Nginx安装SSL证书示例
- 安装Certbot和Nginx插件: sudo apt-get install certbot python3-certbot-nginx
- 获取并安装证书: sudo certbot --nginx -d example.com
Apache安装SSL证书示例
- 安装Certbot和Apache插件: sudo apt-get install certbot python3-certbot-apache
- 获取并安装证书: sudo certbot --apache -d example.com
FAQs
问题1:如何在Linux系统中查看已安装的.NET Core版本?
解答:在Linux系统中,可以通过执行dotnet --info命令来查看已安装的.NET Core的版本信息、运行时环境等详细信息,该命令会输出包括.NET Core的SDK版本、运行时版本以及相关的依赖项等信息,帮助用户确认当前系统上的.NET Core环境配置情况,在终端中输入dotnet --info后,可能会显示类似以下的内容:
.NET Core SDK (reflecting any global.json):
 Version:   5.0.100
 Commit:    04b93f7ac5
Runtime Environment:
 OS Name:     Ubuntu
 OS Version:  20.04
 OS Platform: Linux
 RID:         linux-x64
 Base Path:   /usr/share/dotnet/sdk/5.0.100/
Host (useful for support):
  Version: 5.0.11
  Commit:  04b93f7ac5
.NET Core SDKs installed:
  5.0.100 [/usr/share/dotnet/sdk]
.NET Core runtimes installed:
  Microsoft.AspNetCore.App 5.0.10 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 5.0.10 [/usr/share/dotnet/shared/Microsoft.NETCore.App]问题2:在Linux上部署.NET Core应用程序时,如何设置应用程序自动启动?

解答:在Linux上部署.NET Core应用程序时,可以通过创建Systemd服务来实现应用程序的自动启动,以下是一般的步骤:
- 创建一个Systemd服务文件,例如/etc/systemd/system/myapp.service,在文件中定义服务的描述、启动命令、工作目录等信息,对于一个名为MyApplication的.NET Core应用程序,服务文件的内容可能如下:
[Unit]
Description=My .NET Core Application
After=network.target
[Service]
ExecStart=/usr/bin/dotnet /path/to/your/application/MyApplication.dll
WorkingDirectory=/path/to/your/application
Restart=always
User=your_username
Group=your_groupname
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.targetExecStart指定了启动应用程序的命令,WorkingDirectory设置了应用程序的工作目录,Restart设置为always表示当应用程序意外退出时会自动重启,User和Group分别指定了运行应用程序的用户和用户组,Environment可以设置应用程序的环境变量,请根据实际情况修改这些参数的值。
重新加载Systemd守护进程以使新的服务文件生效:
sudo systemctl daemon-reload启动服务并设置为开机自启:
sudo systemctl start myapp.service
sudo systemctl enable myapp.service通过以上步骤,当Linux系统启动时,Systemd会自动启动指定的.NET Core应用程序,并且如果应用程序意外停止,它还会自动尝试重启
 
  
			