1-首先你首先要整一台CentOS7雲服務器是吧(簡單粗暴)
cat /etc/redhat-release 查看當前服務器版本信息
2.1 添加.NET相關
為了安裝.NET,需要注冊微軟簽名密鑰和添加微軟相關的支持。這個操作每台機器只能做一次。
打開命令行,輸出以下命令,注冊Microsoft需要的依賴環境;:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc">/etc/yum.repos.d/dotnetdev.repo'
2.2 安裝.NET Core Runtime(其實如果你直接在linux開發程序,是不需要安裝SDK的)
①更新可用的安裝包:sudo yum update
②安裝.NET需要的組件,libunwind和libicu庫:sudo yum install libunwind libicu
③安裝runtime 命令:sudo yum install aspnetcore-runtime-3.1
④檢測是否安裝成功 命令:dotnet --info
這樣子就代表runtime安裝成功了.
3.使用VS2019發布Asp.net Core WebApi (這里只是用了Webapi模板程序)
①創建webapi Demo項目
② 發布Webapi 到本地文件夾
項目右鍵-》發布=》選擇發布的文件夾 =》點擊發布
③ 通過ftp工具 並上傳到CentOS 自定義的發布文件夾中
備注:我這里是用的 Xshell配套的 xftp上傳的(xftp去申請個人版是免費的的)
4.配置Nginx代理
(這里nginx代理了80端口,用戶訪問80端口,nginx轉發到服務器內部的5000端口。這樣目的是可以防止服務器端口直接暴露出來,相對安全一點)
4.1 准備工作
① yum install epel-release (安裝CentOS的 EPEL倉庫)
② yum install nginx (安裝Nginx)
③ systemctl start nginx (啟動Nginx)
④ systemctl enable nginx(默認啟動Nginx)
⑤查看firewall 狀態, 並啟動防火牆:
yum install firewalld (安裝)
systemctl status firewalld (查看防火牆狀態)
systemctl start firewalld (啟動防火牆 執行下面的⑥中命令一定要先開啟防火牆)
⑥使用如下命令, 允許HTTP和HTTPS通過防火牆:
firewall-cmd --permanent --zone=public --add-service=http //允許HTTP
firewall-cmd --permanent --zone=public --add-service=https //允許HTTPS
firewall-cmd --reload
firewall-cmd --list-ports //查看開放的端口
⑦在瀏覽器地址欄輸入你服務器的IP地址 如果出現如下路徑頁面 /usr/share/nginx/html/index.html 代表成功
4.2 修改Nginx的配置文件,並自定義配置文件
① vi /etc/nginx/nginx.conf (編輯nginx默認配置文件) 注釋掉server的部分
② 自定義Nginx配置文件xxxx.conf (名字可以自己取)
server { listen 80; 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; } }
保存后上傳到 /etc/nginx/conf.d 目錄下,然后重啟Nginx 命令:nginx –s reload 或者 systemctl reload nginx.service
驗證Nginx是否重啟成功,命令: systemctl status nginx.service ( 查看nginx狀態)
這里總結一下 nginx相關命令:
yum install nginx (安裝Nginx)
systemctl start nginx.service / systemctl start nginx (開啟nginx )
systemctl status nginx.service (查看nginx狀態)
systemctl reload nginx.service (重啟nginx)
systemctl stop nginx.service (關閉nginx)
4.3 將Nginx添加到SELinux白名單 (SELinux是Security Enhanced Linux的縮寫)
①修改SELINUX狀態
vi /etc/selinux/config 將該字段由false改成 enforcing,特別注意改完之后需要重啟,我用的是reboot命令
重啟完后輸入 getenforce 命令,如果顯示Enforcing 代表生效
②使用如下命令, 將Nginx添加至SELinux白名單,依次執行以下命令
yum install policycoreutils-python cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx semodule -i mynginx.pp
③ 進入到 步驟 3-③ 中的文件夾執行命令 dotnet WebapiTest1.dll
你看執行后的結果是不是和我們在VS2019控制台一樣的,接下來我們瀏覽器輸入Demo提供的默認api驗證一下
接口地址:http://你的服務器IP:80/WeatherForecast (因為我們在4.2- ②步驟中nginx配置監聽端口是80)
你不是奇怪為啥了瀏覽器只有ip沒有端口號,因為只輸入ip的話默認訪問80端口。
如果你想要nginx代理別的端口只需要在4.2- ②步驟中改這個端口就行,不過開啟了防火牆的話,你可能需要在你雲服務器后台加一個下行規則,去開放端口。
還有一個問題要注意:.netcore 默認走的是https即使你輸入http也會轉成https 所以你得在core的pipeline管道配置中把 https重定向中間件暫時去掉 (Startup的 Configure方法中)
后續如果為了api安全起見公司強制走https 就只能去申請證書了。這一部分我還沒驗證,只是提供一個思路。
5. 配置守護進程Supervisor
but ! 你有沒有發現當我們手動部署時,我們無法在頁面進行別的操作。一旦我們命令行工具關閉了,發布的程序就不再訪問了。這時候Supervisor就登場了(原理自己百度)
①安裝Supervisor,兩條命令
yum install python-setuptools easy_install supervisor
② 配置Supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf (為Supervisor生成默認的配置文件)
vi /etc/supervisor/supervisord.conf (進入文件修改一些配置)
(1)將這三個文件路徑修改,原來是在tmp文件夾下由於(tmp文件夾是臨時文件夾linux可能會刪除掉,不方便我們看一些日志信息)
(2)將nodaemon改成true,這一步目的是當我們重啟系統時,supervisor也能自啟動
(3)這一步的目的是當supervisor啟動時會自動加載supervisored.d 文件夾下的所有 ini文件
(文件最后一行)
③ 新建supervisord.service文件 拷貝至 /usr/lib/systemd/system 路徑下
# dservice for systemd (CentOS 7.0+)# by ET-CS (https://github.com/ET-CS) [Unit] Description=Process Monitoring and Control Daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
④ 為我們部署的WebapiTest1添加進程配置文件 WebapiTest1.ini (名字自取)
[program:WebapiTest1] command=dotnet WebapiTest1.dll --urls http://*:5000 ; 運行程序的命令 directory=/root/TestApi ; 命令執行的目錄 autorestart=true ; 程序意外退出是否自動重啟 stderr_logfile=/root/TestApi/Log/WebapiTest1.err.log ; 錯誤日志文件 stdout_logfile=/root/TestApi/Log/WebapiTest1.out.log ; 輸出日志文件 environment=ASPNETCORE_ENVIRONMENT=Development ; 進程環境變量 user=root ; 進程執行的用戶身份 stopsignal=INT
保存成功后,移動到supervisord.d文件夾。
⑤啟動supervisord
systemctl enable supervisord.service systemctl start supervisord.service 或 supervisord -c /etc/supervisor/supervisord.conf
ps aux | grep supervisord / ps aux | grep WebapiTest
執行這兩條命令驗證,證明啟動成功接下來訪問接口是否能訪問到數據。(如下圖所示,接口能訪問到數據)
⑥ supervisord 相關命令總結
systemctl status supervisord.service (查看supervisord進程狀態)
systemctl enable supervisord.service
systemctl start supervisord.service (啟動)
systemctl restart supervisord.service (重啟,當我們改了相關配置文件時,重新加載配置)
systemctl stop supervisord.service (關閉)
5. 驗證SuperVisor
1-WebapiTest1意外關閉是否能夠被Supervisor重新拉起運行 (驗證成功)
2-啟動重啟后能否自啟動Supervisor (驗證成功)
6. 補充內容
其他linux命令參考:
find / -name supervisor.sock
unlink /run/supervisor.sock
ps aux | grep supervisord 通過進程名查看進程狀態
cat /var/log/supervisord.log 查看文件
cat -n /var/log/supervisord.log 行號查看
: > /var/log/supervisord.log 清空文件
kill 2020(pid) 通過pid結束進程
ip端口測試命令:
ping IP / 測試IP、端口:telnet IP Port
參考:
https://blog.csdn.net/tangmou_ren/article/details/83657294
https://my.oschina.net/u/3772973/blog/4626133
https://blog.csdn.net/binggoogle/article/details/53203991
https://blog.csdn.net/u014729212/article/details/101288635
說明: 如果給您帶來了誤導請在評論區指出,相互交流交互進步。郵箱交流也可以 16620834081@163.com over...