将ASP.NET Core程序部署到Linux服务器需要以下步骤:
-
在Linux服务器上安装.NET Core运行时环境和ASP.NET Core运行时环境。
-
在Linux服务器上安装Web服务器,如Nginx或Apache。
-
将ASP.NET Core程序发布为自包的可执行文件或Docker容器。
-
配置Web服务器以反向代理到ASP.NET Core程序。
下面是将ASP.NET Core程序部署到Linux服务器的完整攻略:
步骤1:安装.NET Core运行时环境和ASP.NET Core运行时环境
在Linux服务器上安装.NET Core运行时环境和ASP.NET Core运行时环境,需要执行以下步骤:
- 添加Microsoft包存储库
sudo apt-get update
sudo apt-get install -y curl libunwind8 gettext apt-transport-https
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-bionic-prod bionic main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-get update
- 安装.NET Core运行时环境和ASP.NET Core运行时环境
sudo apt-get install -y dotnet-sdk-3.1 aspnetcore-runtime-3.1
步骤2:安装Web服务器
在Linux服务器上安装Web服务器,需要执行以下步骤:
- 安装Nginx
sudo apt-get install -y nginx
- 安装Apache
sudo apt-get install -y apache2
步骤3:发布ASP.NET Core程序
将ASP.NET Core程序发布为自包含的可执行文件或Docker容器,需要执行以下步骤:
- 发布为包含的可执行文件
dotnet publish -c Release -r linux-x64 --self-contained true
- 发布为Docker容器
docker build -t myapp .
步骤4:配置Web服务器
配置Web服务器以反向代理到ASP Core程序,需要执行以下步骤:
- 配置Nginx
sudo nano /etc/nginx/sites-available/default
在上面的文件中添加以下内容:
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 配置Apache
sudo nano /etc/apache2/sites-available/000-default.conf
在上面的文件中添加以下内容:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
示例1:将ASP.NET Core程序部署到Nginx
假设我们有一个名为myapp的ASP.NET Core程序,我们将其发布为自包含的可执行文件,并将其部署到Nginx上。
- 将myapp程序发布为自包含的可执行文件
dotnet publish -c Release -r linux-x64 --self-contained true
- 将myapp程序复制到Linux服务器上
scp bin/Release/netcoreapp3.1/linux-x64/publish/* user@:/var/www/myapp
- 配置Nginx
sudo nano /etc/nginx/sites-available/default
在上面的文件中添加以下内容:
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 重启Nginx
sudo systemctl restart nginx
现在,我们可以通过访问http://example.com来访问myapp程序。
示例2:将ASP.NET Core程序部署到Apache
假设我们有一个名为myapp的ASP.NET Core程序,我们将其发布为Docker容器,并将其部署到Apache上。
- 将myapp程序发布为Docker容器
docker build -t myapp .
- 将myapp程序上传到Docker Hub
docker tag myapp username/myapp
docker push username/myapp
- 在Linux服务器上安装Docker
sudo apt-get install -y docker.io
- 在Linux服务器上运行myapp容器
docker run -d -p 5000:80 username/myapp
- 配置Apache
sudo nano /etc/apache2/sites-available/000-default.conf
在上面的文件中添加以下内容:
<VirtualHost *80>
ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- 重启Apache
sudo systemctl restart apache2
现在,我们可以访问http://example.com来访问myapp程序。