1. 程式人生 > 實用技巧 >DotNetCore 結合 Nginx 將網站部署到阿里雲

DotNetCore 結合 Nginx 將網站部署到阿里雲

基礎環境配置#

域名和伺服器請先自行購買

基於雲伺服器ECS建立一個應用例項,選擇系統映象為Ubuntu 16.04,在本機通過SSH進行遠端連線,並進行相關配置

Copy
ssh root@http://39.108.48.203/

sudo apt-get update
sudp apt-get upgrade
sudo apt-get autoremove
sudo apt-get clean

Nginx 配置#

Copy
sudo apt-get install nginx
sudo service nginx start

# 備份原始配置檔案
sudo cp /etc/nginx/sites-available/default etc/nginx/sites-available/default.bak

sudo vim /etc/nginx/sites-available/default

配置 default 檔案,如下所示

Copy
server {
    listen        80;
    server_name   example.com *.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; } }

檢測配置並更新

Copy
sudo nginx -t
sudo nginx -s reload

sudo service nginx stop
sudo service nginx start

安裝 DotNetCore

Copy
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-3.1

請參考官網最新安裝說明:.NetCore Download

程式打包#

開啟VisualStudio2017右鍵要釋出的專案,點選publish,並參考下圖進行相關配置。

點選Save按鈕並執行釋出操作。然後將 publish 資料夾上傳至伺服器相應位置,上傳成功後執行

Copy
dotnet run app.dll

或者通過命令列打包釋出

Copy
dotnet publish -c release
dotnet publish -c release -r ubuntu.18.04-x64

如果不出意外的,這個時候,你就可以通過 IP 或者 你的網站域名來進行訪問了。

建立守護程序#

執行上述操作之後,我們的程式還是不能正在長時間執行,因此我們需要通過守護程序來管理我們的網站

Copy
sudo apt-get install supervisor
sudo vim /ect/supervisor/conf.d/helloworld.conf

配置 website.conf 檔案

Copy
[program:HelloWebApp]

command=/usr/bin/dotnet helloworld.dll ;要執行的命令
directory=/home/hippie/helloworld/bin/release/netcoreapp3.1/publish ;命令執行的目錄
environment=ASPNETCORE__ENVIRONMENT=Production ;環境變數
user=root  ;程序執行的使用者身份
stopsignal=INT
autostart=true ;是否自動啟動
autorestart=true ;是否自動重啟
startsecs=1 ;自動重啟間隔
stderr_logfile=/var/log/helloworld.err.log ;標準錯誤日誌
stdout_logfile=/var/log/helloworld.out.log ;標準輸出日誌

這個時候,我們執行下述命令啟動守護程序

Copy
sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf

# 關閉所有服務
sudo supervisorctl shutdown 

# 檢視狀態
sudo supervisorctl status

sudo service supervisor start/stop

# 檢視指定埠對應程式
netstat -ap | grep 5000

# 關閉指定埠對應程式
kill -9 PID

好了,這個時候你可以嘗試關閉遠端連線進行網站訪問,如果能正常訪問的話,說明你的配置已經起作用了.

配置 HTTPS#

配置 HTTPS 需要使用證書,對應的有免費和收費版,我這裡使用的是 免費版本Certbot,直接執行下述命令即可:

Copy
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python-certbot-nginx

sudo certbot --nginx

# sudo certbot renew --dry-run

sudo ufw allow https

sudo systemctl restart nginx

基礎環境配置#

域名和伺服器請先自行購買

基於雲伺服器ECS建立一個應用例項,選擇系統映象為Ubuntu 16.04,在本機通過SSH進行遠端連線,並進行相關配置

Copy
ssh root@http://39.108.48.203/

sudo apt-get update
sudp apt-get upgrade
sudo apt-get autoremove
sudo apt-get clean

Nginx 配置#

Copy
sudo apt-get install nginx
sudo service nginx start

# 備份原始配置檔案
sudo cp /etc/nginx/sites-available/default etc/nginx/sites-available/default.bak

sudo vim /etc/nginx/sites-available/default

配置 default 檔案,如下所示

Copy
server {
    listen        80;
    server_name   example.com *.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;
    }
}

檢測配置並更新

Copy
sudo nginx -t
sudo nginx -s reload

sudo service nginx stop
sudo service nginx start

安裝 DotNetCore

Copy
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-3.1

請參考官網最新安裝說明:.NetCore Download

程式打包#

開啟VisualStudio2017右鍵要釋出的專案,點選publish,並參考下圖進行相關配置。

點選Save按鈕並執行釋出操作。然後將 publish 資料夾上傳至伺服器相應位置,上傳成功後執行

Copy
dotnet run app.dll

或者通過命令列打包釋出

Copy
dotnet publish -c release
dotnet publish -c release -r ubuntu.18.04-x64

如果不出意外的,這個時候,你就可以通過 IP 或者 你的網站域名來進行訪問了。

建立守護程序#

執行上述操作之後,我們的程式還是不能正在長時間執行,因此我們需要通過守護程序來管理我們的網站

Copy
sudo apt-get install supervisor
sudo vim /ect/supervisor/conf.d/helloworld.conf

配置 website.conf 檔案

Copy
[program:HelloWebApp]

command=/usr/bin/dotnet helloworld.dll ;要執行的命令
directory=/home/hippie/helloworld/bin/release/netcoreapp3.1/publish ;命令執行的目錄
environment=ASPNETCORE__ENVIRONMENT=Production ;環境變數
user=root  ;程序執行的使用者身份
stopsignal=INT
autostart=true ;是否自動啟動
autorestart=true ;是否自動重啟
startsecs=1 ;自動重啟間隔
stderr_logfile=/var/log/helloworld.err.log ;標準錯誤日誌
stdout_logfile=/var/log/helloworld.out.log ;標準輸出日誌

這個時候,我們執行下述命令啟動守護程序

Copy
sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf

# 關閉所有服務
sudo supervisorctl shutdown 

# 檢視狀態
sudo supervisorctl status

sudo service supervisor start/stop

# 檢視指定埠對應程式
netstat -ap | grep 5000

# 關閉指定埠對應程式
kill -9 PID

好了,這個時候你可以嘗試關閉遠端連線進行網站訪問,如果能正常訪問的話,說明你的配置已經起作用了.

配置 HTTPS#

配置 HTTPS 需要使用證書,對應的有免費和收費版,我這裡使用的是 免費版本Certbot,直接執行下述命令即可:

Copy
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python-certbot-nginx

sudo certbot --nginx

# sudo certbot renew --dry-run

sudo ufw allow https

sudo systemctl restart nginx