当前位置:首页 > Linux > 正文

.net core 如何部署linux

Linux上部署.NET Core,先安装SDK或运行时,通过命令行工具构建和发布应用,再将发布文件传输到服务器,最后使用命令运行或配置为系统服务

当今的软件开发领域,.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仓库中转方式

  1. 在服务器上安装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命令可查看公钥,将公钥复制到代码仓库的公钥管理中进行配置。

  2. 在本地将代码推送到Git仓库,然后在服务器中执行克隆命令:
    mkdir core50test
    cd core50test
    git clone ssh://git@your_git_repo_url.git

运行.NET Core应用程序

切换到上传或克隆的应用程序目录,使用以下命令运行应用程序:

.net core 如何部署linux  第1张

dotnet MyApplication.dll

该命令将在默认端口(通常为5000)上启动应用程序,如果需要指定其他端口,可以使用--urls参数,

dotnet MyApplication.dll --urls="http://:8081;http://:8082" --environment=Development

设置反向代理(可选)

为了提高安全性、实现负载均衡以及更好地提供静态内容,通常会在.NET Core应用程序前面设置反向代理,如Nginx或Apache。

Nginx反向代理配置示例

  1. 安装Nginx:

    sudo apt install nginx
  2. 创建/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;
        }
    }
  3. 把配置文件链接到sites-enabled目录:

    sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
  4. 测试配置文件,然后重启Nginx服务:

    sudo nginx -t
    sudo systemctl restart nginx

Apache反向代理配置示例

  1. 安装Apache:

    sudo apt install apache2
  2. 启用proxyproxy_http模块:

    sudo a2enmod proxy proxy_http
  3. 创建/etc/apache2/sites-available/myapp.conf配置文件,内容如下:

    <VirtualHost :80>
        ServerName example.com
        ProxyPreserveHost On
        ProxyPass / http://localhost:5000/
        ProxyPassReverse / http://localhost:5000/
    </VirtualHost>
  4. 启用站点配置,然后重启Apache服务:

    sudo a2ensite myapp.conf
    sudo systemctl restart apache2

安装SSL证书(可选)

使用SSL保护应用程序对于保护敏感数据至关重要,Let’s Encrypt提供免费的SSL证书,Certbot是一个流行的获取和更新Let’s Encrypt证书的工具。

Nginx安装SSL证书示例

  1. 安装Certbot和Nginx插件:
    sudo apt-get install certbot python3-certbot-nginx
  2. 获取并安装证书:
    sudo certbot --nginx -d example.com

Apache安装SSL证书示例

  1. 安装Certbot和Apache插件:
    sudo apt-get install certbot python3-certbot-apache
  2. 获取并安装证书:
    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服务来实现应用程序的自动启动,以下是一般的步骤:

  1. 创建一个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表示当应用程序意外退出时会自动重启,UserGroup分别指定了运行应用程序的用户和用户组,Environment可以设置应用程序的环境变量,请根据实际情况修改这些参数的值。

重新加载Systemd守护进程以使新的服务文件生效:

sudo systemctl daemon-reload

启动服务并设置为开机自启:

sudo systemctl start myapp.service
sudo systemctl enable myapp.service

通过以上步骤,当Linux系统启动时,Systemd会自动启动指定的.NET Core应用程序,并且如果应用程序意外停止,它还会自动尝试重启

0