重新整理 .net core 實踐篇 ———— linux 上線篇 [外篇]
- 2022 年 10 月 29 日
- 筆記
- .net core(web)
前言
簡單整理一個linux 簡單上線。 這個是該系列的外篇,該系列繼續更新。獻給剛學的人。
正文
安裝實例
dotnet new webapp -n AspNetCoreDemo -o firstwebapp
編譯並運行:
dotnet run
查看網絡情況:
netstat -anpl
將項目發佈到指定位置:
dotnet publish -o /var/testdotnet/
將打包好的運行起來:
dotnet /var/testdotnet/AspNetCoreDemo.dll
配置nginx
這個時候是外面是訪問不了的,原因如下:
這裡綁定的是127.0.0.1,這個是內網的,所以無法訪問到。
然後這裡解釋一下為什麼localhost可以訪問哈:
因為host: localhost 127.0.0.1 這個是默認的。
當然我們可以改成0.0.0.0 去啟動,但是一般不會這麼干。
這裡說明一下,為什麼我們一般有一個nginx 代理一個應用程序。
那是因為nginx 做的不僅僅是代理,nginx 有安全模塊,有限流模塊,這樣我們就不用再應用程序中寫了。
大大減少了項目的複雜度。
那麼安裝一下nginx:
yum install nginx -y
然後啟動一下:
sudo systemctl start nginx
然後配置文件改成這樣:
server {
listen 80;
listen [::]:80;
server_name _;
location / {
proxy_pass //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;
}
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
然後nginx 重新加載配置一下:
nginx -s reload
然後我這裡訪問一下:
這樣就ok了。
創建服務文件
什麼是服務文件?
在 Linux 中,還有具有「.service」擴展名的單元配置文件,用於在進程退出時控制守護程序的行為。 這些文件也稱為 服務文件、 單元文件和 服務單元文件。
這些服務文件位於以下目錄之一:
/usr/lib/systemd/system:存儲已下載應用程序的服務文件
/etc/systemd/system/:存儲由系統管理員創建的服務文件
這兩個分別放什麼呢?
比如這種nginx 一般是第三方的程序,就放在/usr/lib/systemd/system下面。
一般yum安裝都在裏面。
然後/etc/systemd/system/ 這裡放的是我們自己的應用程序。
這裡就可以在這個目錄下寫一個:
[Unit]
Description= AspNetCoreDemo
[Service]
WorkingDirctory:/var/testdotnet/
ExecStart=/usr/bin/dotnet /var/testdotnet/AspNetCoreDemo.dll
Restart=aways
RestartSec=10
SyslogIdentifier=AspNetCoreDemo
User=root
Environment=ASPNETCORE_ENVIRONMENT=Development
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
簡單解釋一下:
WorkingDirectory 是發佈應用程序的目錄。
ExecStart 是啟動應用程序的實際命令。
Restart=always 是自言自明的。 如果由於某種原因(無論是手動還是由於崩潰)而停止,則始終會啟動此過程。
RestartSec=10 也是自言自明的。 進程停止後,將在經過 10 秒後啟動。
SyslogIdentifier 很重要。 它表示「系統日誌標識符」。 有關守護程序的信息記錄在此名稱下的系統日誌中。 還可以使用此標識符查找進程的 PID。
User 是管理服務的用戶。 它應存在於系統中,並具有相應的應用程序文件所有權。
可以在服務文件中設置任意數量的環境變量。
然後查看一下:
然後這裡有一個disable,這個意思是系統重啟後不會去啟動這個。
設置enable:systemctl enable AspNetCoreDemo
這裡就會創建一個鏈接過去。 這裏面的就是開啟啟動的。
這樣就ok了。
安全
說到安全就要說下iptable 了。
這個就是一個輕量的防火牆了,比較實用。
但是這裏面有一個問題,那就iptable 配置很複雜,有多複雜呢? 可以看下我的linux 系列。
所以就有個開發了配置工具,可以理解為iptable的客戶端吧。
這裡解釋一個ufw這個,市面上有很多,可以找到適合自己的。
安裝很簡單:
yum install ufw
-
運行命令檢查 ufw 的 sudo ufw status verbose 狀態。 默認情況下,ufw 未啟用且處於非活動狀態。
-
運行 sudo ufw default allow 命令。 由於除了默認的「allow」規則之外,沒有其他規則,因此 VM 上的每個端口都將被視為已打開。
為什麼ufw 有這個設置allow 的東西呢? 這跟iptable 的模式有關,iptable 兩種模式,一個是allow 一種是 reject,如果設置了allow,那麼就配置不允許的,就是規則裏面沒有的就允許,反之亦然。
-
可以通過運行 sudo ufw default deny 命令將默認規則更改為拒絕來實現此操作。 僅允許 SSH 和 HTTP 協議。 其他協議將被拒絕。
-
通過運行 sudo ufw allow http允許 HTTP 協議。 TTP 是在 /etc/services 文件中定義的已知協議。 因此,可以使用協議名稱,並且可以運行該 sudo ufw allow http 命令。 運行 sudo ufw allow 80 也完全有效。
測試一下哈: sudo ufw deny http
這裡設置http為不允許:
這樣就可以了,然後就訪問不了了。
多實例
如果想部署多個在同一台機器的話,那麼創建另外一個service,然後配置一下環境:
Environment=ASPNETCORE_URLS=//localhost:6001
這樣就啟動的是另外一個端口了。
那麼nginx 做負載均衡,這個已經在nginx 系列了,就不羅嗦了。
結
下一結利用一些工具在nginx 排查和監控netcore的運行情況。