.net core 如何部署linux
- Linux
- 2025-07-09
- 3564
当今的软件开发领域,.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/destination
username
是你的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.target
ExecStart
指定了启动应用程序的命令,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应用程序,并且如果应用程序意外停止,它还会自动尝试重启