一、準備工作
(一)創(chuàng)建一個測試程序
使用VS創(chuàng)建一個WebApi項目:

本地訪問路徑:http://localhost:5000/WeatherForecast
(二)將WebApi項目發(fā)布

發(fā)布后生成的文件

(三)下載遠程操作工具
-
Xshell 使用 windows 遠程連接 Linux 系統(tǒng)上
image.png -
winscp 使用windows 遠程上傳文件到Linux上
image.png
二、阿里云服務(wù)器的配置
(一)購買阿里云服務(wù)器
- 直接在網(wǎng)上購買即可(可選擇學生服務(wù),會有優(yōu)惠)阿里云學生地址
- 進入控制臺,相當于查看所有的實例(其實控制臺就相當于是總的管理器)
image.png
若沒有實例,請先創(chuàng)建實例
image.png
遠程連接時會使用實例用戶與密碼,可在下圖位置進行設(shè)置
image.png
(二)安裝 Ubuntu 的鏡像
1.如果已經(jīng)安裝了其他的操作系統(tǒng),可以重新更換操作系統(tǒng)。


自定義的密碼就是后面用遠程工具進行連接的,登錄密碼和登錄名。
(三)安全組配置
安裝組其實就是用來放行端口的。通俗來說就是管大門的。具體的可以參考這個文章::阿里云安全組詳細解說



1. 常用的幾個端口
- 3389端口:遠程桌面的
- 20/21端口:FTP,上傳下載文件的;文件傳輸?shù)?/li>
- 22端口:ssh 安全登錄
- 443: HTTPS 服務(wù)器
- 25:e-mail 的默認端口
- 3306端口:MySQL
- 1521: Oracle 數(shù)據(jù)庫
- 6379: redis 數(shù)據(jù)庫
- 8888:寶塔面板初試接口
- 80端口:一般做個人網(wǎng)站要配置的
- icmp用來ping的
2. 安裝組的參數(shù)具體含義 - 優(yōu)先級:從一到一百的數(shù)字,數(shù)字越小,優(yōu)先級越高。
- 協(xié)議:自定義TCP就行了(具體是干啥的我不知道)
- 端口范圍:這個一定要寫個范圍,哪怕是只有一個端口,也還是 80/80 這么寫。
-
授權(quán)對象: 如果我們是想讓所有的人都可以訪問,那么就是默認的 0.0.0.0 / 0
一般配置這個的時候,都是選擇公網(wǎng)入方向,進行配置。授權(quán)對象實際上是運行方位的 ip 地址,如果允許所有的人進行訪問,就是 0.0.0.0/0 ,如果是多個用戶的話,可以中間用 , 隔開。
3. 安全組和防火墻的區(qū)別 - 云防火墻可以根據(jù)機器學習結(jié)果,自動將安全域進行分組;而安全組完全依賴于您靜態(tài)的手動劃分。
- 云防火墻在訪問控制策略生效之前,存在大量的模擬過程,可以幫助您保障策略的正確性;而安全組中規(guī)則在配置之后即刻生效,一旦訪問規(guī)則配置錯誤可能直接導致業(yè)務(wù)中斷。
- 在云防火墻中您可以監(jiān)控高危端口的訪問情況。例如,查看3306端口是否有來自外部(互聯(lián)網(wǎng))流量的訪問。
- 云防火墻還可以幫助您進行服務(wù)器變更前的確認。例如,某個服務(wù)器需要下線時,您可以通過云防火墻查看該服務(wù)器是否仍有訪問流量,從而判斷服務(wù)器下線是否影響業(yè)務(wù)
(四)安裝寶塔(不必須,但強烈建議)
寶塔可以讓你通過瀏覽器可視化操作云服務(wù)器,允許你在一定程度上可以像使用windows一樣使用Ubuntu系統(tǒng)
- 寶塔安裝詳見寶塔面板安裝命令
image.png -
安裝成功后會有相關(guān)的網(wǎng)址與賬號密碼
image.png -
使用外網(wǎng)地址登錄到寶塔面板后臺,第一次會自動彈出套件推薦安裝對話框,選擇安裝“LNMP套件”
image.png
三、安裝dotnet運行時
直接去微軟官網(wǎng)查找,對應(yīng)版本上的dotnet運行環(huán)境相關(guān)操作,此處的連接在unbuntu上安裝.net core。直接在Xshell執(zhí)行相應(yīng)的命令行,復制粘貼就可以了。具體操作如下
1.使用 APT 進行安裝可通過幾個命令來完成。 安裝 .NET 之前,請運行以下命令,將 Microsoft 包簽名密鑰添加到受信任密鑰列表,并添加包存儲庫。在終端中,運行以下命令:
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
.NET SDK 使你可以通過 .NET 開發(fā)應(yīng)用。 如果安裝 .NET SDK,則無需安裝相應(yīng)的運行時。 若要安裝 .NET SDK,請運行以下命令:
sudo apt-get update;
sudo apt-get install -y apt-transport-https &&
sudo apt-get update &&
sudo apt-get install -y dotnet-sdk-3.1
- 通過 ASP.NET Core 運行時,可以運行使用 .NET 開發(fā)且未提供運行時的應(yīng)用。 以下命令將安裝 ASP.NET Core 運行時,這是與 .NET 最兼容的運行時。 在終端中,運行以下命令:
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-3.1
4.可以執(zhí)行下邊的命令,來運行一下試試,如果安裝成功,會有反應(yīng),如果沒有安裝上,會提示錯誤
dotnet --info
四、使用WinSCP 傳送文件
使用實例名稱與密碼將 WinScp 連接到云服務(wù)器,連接成功后,進入home 目錄,普通用戶都是在home 目錄下進行操作,一般你也可以建立一個自己的文件夾,把東西都放在同一個文件夾里,我這里創(chuàng)建了demo文件夾。將左側(cè)本地文件直接拖拽到右側(cè)的demo文件夾中,就可完成文件上傳到云服務(wù)器。

五、使用Xshell執(zhí)行dotnet 命令
在項目文件目錄下運行下面命令:
dotnet AliyunDemo.dll

發(fā)現(xiàn) http://<云服務(wù)器公網(wǎng)IP>:<端口號> 在瀏覽器根本打不開網(wǎng)頁,于是
netstat -tnl
查看端口5000是否正常

發(fā)現(xiàn)5000端口,只對本地127.0.0.1有效,當然我們客戶端沒法訪問了,此時有兩種方法可以云解決
-
修改WebApi項目中的 Programe.cs 文件
image.png
2.在運行命令中指定URL
dotnet AliyunDemo.dll --urls http://*:5000

注意:
若你進行了寶塔安裝,且安裝了“LNMP套件”,此時仍然打不開網(wǎng)頁,原因是LNMP中的Nginx進行了路由,所以此時需要我們配置一下Nginx。
六、寶塔中配置Nginx
登錄到寶塔,進入管理頁面


此時再進行第五步,運行起項目,使用Nginx配置的端口80,就可以在瀏覽器中訪問到了。

七、守護進程
完成上面步驟后,雖然可以訪問了,但當Xshell關(guān)閉后,就不可以訪問了。這是因為Xshell啟動的項目是前臺進程,我們需要讓項目啟動變動后臺進程。
守護進程是安裝一個類似于Windows Service一樣的服務(wù), 能實時監(jiān)控程序狀態(tài),異常退出時能自動重啟。Supervisor 是用Python開發(fā)的Linux/Unix系統(tǒng)下的一個進程管理工具。它可以使進程(類似Windows Service)脫離終端,變?yōu)楹笈_守護進程(daemon)。能實時監(jiān)控進程狀態(tài),異常退出時能自動重啟。詳細文檔請查看官網(wǎng)。配置守護進程Supervisor, 讓我們的程序能365天24小時不間斷運行。
(一)安裝Supervisor
- 安裝可以使用一下命令:
sudo apt-get install supervisor
安裝成功后,supervisor就會默認啟動,有很多方法添加進程,看了很多博客上的介紹和加上我的實際使用,我認為一下方法最好用,將每個進程的配置文件單獨拆分,放在/etc/supervisor/conf.d/目錄下,以.conf作為擴展名,例如dotnetdemo.conf定義的一個簡單的HTTP服務(wù)器

- 文件內(nèi)容配置如下:

配置說明
[program:CoreWebTest] ;自定義進程名稱, 根據(jù)自己喜好命名
command=dotnet CoreWebTest.dll ;程序啟動命令 使用dotnet 命令
directory=/home/wwwroot/CoreWebTest ;命令執(zhí)行的目錄 你.NET Core 程序存放目錄
autostart=true ;在Supervisord啟動時,程序是否啟動
autorestart=true ;程序退出后自動重啟
startretries=5 ;啟動失敗自動重試次數(shù),默認是3
startsecs=1 ;自動重啟間隔
user=root ;設(shè)置啟動進程的用戶,默認是root
priority=999 ;進程啟動優(yōu)先級,默認999,值小的優(yōu)先啟動
stderr_logfile=/var/log/CoreWebTest.err.log ;標準錯誤日志 路徑可以自定義
stdout_logfile=/var/log/CoreWebTest.out.log ;標準輸出日志 路徑可以自定義
environment=ASPNETCORE_ENVIRONMENT=Production ;進程環(huán)境變量
stopsignal=INT ;請求停止時用來殺死程序的信號
- 重啟supervisor,讓配置文件生效,然后啟動CoreWebTest進程:
supervisorctl reload
supervisorctl start CoreWebTest
到此,就可以長久正常訪問項目接口了。
supervisorctl 使用說明
supervisorctl start programxxx,啟動某個進程
supervisorctl restart programxxx,重啟某個進程
supervisorctl stop groupworker: ,重啟所有屬于名為groupworker這個分組的進程(start,restart同理)
supervisorctl stop all,停止全部進程,注:start、restart、stop都不會載入最新的配置文件。
supervisorctl reload,載入最新的配置文件,停止原有進程并按新的配置啟動、管理所有進程。
supervisorctl update,根據(jù)最新的配置文件,啟動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啟。
supervisor啟動和停止的日志文件存放在/var/log/supervisor/supervisord.log
注意:顯式用stop停止掉的進程,用reload或者update都不會自動重啟








