Linux部署.Net Core 3.1服務,並使用Nginx托管


准備.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM