准備.NET Core環境
1.注冊 Microsoft 密鑰和源
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
2.安裝 .NET Core SDK
sudo yum install dotnet-sdk-3.1
3.安裝 ASP.NET Core 運行時
sudo yum install aspnetcore-runtime-3.1
站點部署
1.創建目錄
mkdir /usr/dotnet
2.將發布文件上傳到服務器目錄,我使用的是WinSCP工具上傳的文件,這里不做介紹
3.啟動服務
進入站點目錄 cd /usr/dotnet
啟動服務 dotnet *****.dll
啟動成功后我們可以看到服務端口號
4.訪問站點
5.如果訪問失敗,需要檢查防火牆是否有開放端口及阿里雲是否有配置端口
開放端口:sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent 如果是FirewallD is not running狀態,則執行:systemctl start firewalld,執行成功后,再重新配置端口
查服務進程:ps -aux | grep "TuoKeWeb.dll" 強制殺掉進程:kill -9 進程ID
重啟防火牆 sudo firewall-cmd --reload 查看防火牆開放的端口 sudo firewall-cmd --list-ports
安裝配置Nginx
1.安裝Nginx
sudo yum -y install nginx
2.啟動Nginx並查看Nginx狀態
systemctl enable nginx --設置開機啟動 service nginx start --啟動nginx ps -ef | grep nginx --查看端口號
3.為.NET Core服務站點配置反向代理
找到nginx配置文件,我的路徑是:/etc/nginx/nginx.conf,將以下配置復制到配置文件
worker_processes 1; #設置值和CPU核心數一致 error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志級別 pid /usr/local/webserver/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; #charset gb2312; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #limit_zone crawler $binary_remote_addr 10m; #下面是server虛擬主機的配置 server { listen 80; server_name core.yz0735.cn; 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; } location ~ .*\.(js|css)?$ { expires 15d; # access_log off; } access_log off; } }
4.重新加載配置,訪問站點
service nginx reload
配置好后,我們就可以通過域名+端口號訪問服務了
5.通過域名不帶端口訪問需要進行如下配置,端口為站點端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 5000 另外如果防火牆重新啟動,該命令就會失效,可以使用下面的命令把該規則保存到iptables里面。 service iptables save
配置好后,我們可以直接通過域名不帶端口號訪問站點
創建Supervisor進程守護監控
1.先安裝epel,軟件包更豐富點
yum install epel-release
2.安裝Supervisor
yum install -y supervisor systemctl enable supervisord # 開機自啟動 systemctl start supervisord # 啟動supervisord服務
3.創建.Net Core項目的Supervisor配置文件
#進入supervisord.d目錄 cd /etc/supervisord.d #新建NetCore進程配置文件 sudo touch DemoNetCore.ini #查看和編輯DemoNetCore.ini配置文件 sudo vim DemoNetCore.ini #進入文件后,按“i”或者“a”進入插入模式,插入下面的配置信息
將以下配置復制到剛創建的DemoNetCore.ini配置文件
#配置程序名稱, [program:DemoNetCore] #運行程序的命令 command=dotnet TuoKeWeb.dll --urls="http://*:5000;" #命令執行的目錄 directory=/usr/dotnet #進程環境變量 environment=ASPNETCORE_ENVIRONMENT=Production #進程執行的用戶身份 user=root #進程停止信號,可以為TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信號默認為TERM 。當用設定的信號去干掉進程,退出碼會被認為是expected,非必須設置 stopsignal=INT #如果是true的話,子進程將在supervisord啟動后被自動啟動,默認就是true,非必須設置 autostart=true #這個是設置子進程掛掉后自動重啟的情況,有三個選項,false,unexpected和true。如果為false的時候,無論什么情況下,都不會被重新啟動,如果為unexpected,只有當進程的退出碼不在下面的exitcodes里面定義的退出碼的時候,才會被自動重啟。當為true的時候,只要子進程掛掉,將會被無條件的重啟 autorestart=true #這個選項是子進程啟動多少秒之后,此時狀態如果是running,則我們認為啟動成功了,默認值為1 。非必須設置 startsecs=1 #錯誤日志文件 stderr_logfile=/var/log/DemoNetCore.err.log #輸出日志文件 stdout_logfile=/var/log/DemoNetCore.out.log
#按ESC,輸入命令保存配置文件 :wq (保存編輯操作退出) :wq! (保存編輯強制退出) :w ! sudo tee %
#通過配置文件來啟動supervisor sudo supervisord -c /etc/supervisord.conf #啟動supervisorctl sudo supervisorctl -c /etc/supervisord.conf #重新加載配置文件 reload #查看運行的狀態 status
#查看相關進行 ps -aux | grep "TuoKeWeb.dll" #訪問啟動的站點 curl http://localhost:5000/Home/Test
如下圖所示,Supervisor已經開啟了dotnet進程,訪問接口地址,返回數據成功
5.配置Supervisor開機自啟動
#進入system目錄 cd /usr/lib/systemd/system #編輯supervisord.service文件 sudo vim supervisord.service
supervisord.service文件內容如下
[Unit] Description=Process Monitoring and Control Daemon After=rc-local.service nss-user-lookup.target [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42 [Install] WantedBy=multi-user.target
編輯好后保存退出,然后執行命令,查看是否啟動成功
#啟動服務 systemctl enable supervisord #驗證一下是否為開機啟動 systemctl is-enabled supervisord
6.驗證進程守護監控效果
#查看dotnet進程 ps -aux|grep dotnet #強制殺死dotnet進程 kill -9 %PID #再次查看dotnet進程 ps -aux|grep dotnet
Supervisor常用命令
# 啟動所有
supervisorctl start all
# 重啟所有
supervisorctl restart all
# 停止所有
supervisorctl stop all
#PS:要操作某個服務,把all換成服務名即可
#查看服務狀態
supervisorctl status