九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
ASP.NET Core在CentOS上的最小化部署實踐

引言

本文從Linux小白的視角, 在CentOS服務器上搭建一個Nginx-Powered AspNet Core Web準生產(chǎn)應用。在開始之前,我們還是重溫一下部署原理,正如你所常見的.Net Core 部署圖:

在Linux上部署.Net Core App最好的方式是使用Kestrel 服務在端口5000上支撐web應用;然后設置Nginx作為反向代理服務器,將輸入請求轉(zhuǎn)發(fā)給Kestrel服務器, 這個模式稱為 邊緣代理服務器(edge-origin proxy)。

部署模型優(yōu)勢:

  • 可擴展性:反向代理服務器和Web服務器可以設置在一臺或者不同的機器上,為伸縮部署提供可能, 可按需部署多個Web服務器,Nginx反向代理服務器本身可充當優(yōu)秀的負載均衡器。

  • 數(shù)據(jù)安全性:edge-origin 模式隱藏了 Web服務器進程的細節(jié),對外只暴露80端口,對外暴露的只有Nginx 反向代理服務器,減少了網(wǎng)絡攻擊的可能性。

  • 高性能:反向代理服務器可以為后端服務器配置 內(nèi)容緩存,減少對后端服務器的請求,這是個很重要的性能提升,避免DDOS攻擊和暴力惡意攻擊。

  • 多功能性:本文雖然是在講述Linux-only 部署, 這種模式允許你高效、透明地混合使用Linux和Windows服務器,以上Web服務器也可以是 IIS-Powered的Web服務器。

知識準備

首先明確dotnet程序是一個獨立進程, 原本可不依賴反向代理服務器運行;
第二明確Nginx反向代理服務器的作用,  這里需要為.NetCore 程序添加必要的轉(zhuǎn)發(fā)中間件

// Invoke the UseForwardedHeaders middleware and configure it to forward the X-Forwarded-For and X-Forwarded-Proto headers.
// NOTE: This must be put BEFORE calling UseAuthentication or similar authentication scheme middlewares.
// ref.: https://www.ryadel.com/en/asp-net-core-2-publish-deploy-web-application-linux-centos-tutorial-guide-nginx
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

第三明確 dotnet程序需要在Linux系統(tǒng)中以守護進程的方式運行,可使用 supervisor、systemd等管控工具。

CentOS部署

1. 安裝環(huán)境

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
-- rpm是一種軟件包管理方式,這里的微軟軟件包倉庫以rpm包的形式提供,包含倉庫配置和供發(fā)行版認證軟件包的公鑰,你可以理解為添加了一個nuget包倉庫

sudo yum update
sudo yum install aspnetcore-runtime-2.2                             
-- yum基于rpm包管理,能夠從指定服務器自動下載rpm包并且安裝,可自動處理依賴關系,并一次安裝所有依賴軟件包。

2. dotnet程序發(fā)布、測試

  • 使用VS項目右鍵發(fā)布到指定目錄
  • 使用zip方式打包
  • 使用scp、SFTP工具上傳到Linux服務器, 一般情況下拷貝到var目錄
scp D:\production\eqidproxyServer.zip root@10.201.80.126:/var/www --以下命令將zip包拷貝到 /var/www目錄下
  • 在CentOS服務器上解壓
unzip -d eqidproxyServer eqidproxyServer.zip
  • 執(zhí)行dotnet EqidProxyServer.dll

3. 使用systemd將dotnet進程設置成Linux守護進程

完成以上步驟,dotnet程序并不能在后臺作為服務運行,Nginx雖然能作為反向代理服務器轉(zhuǎn)發(fā)請求到dotnet進程, 但是并不具備管理dotnet進程的能力。

下面使用 systemd來將dotnet進程設定為系統(tǒng)服務。

systemd是一個Linux的系統(tǒng)服務管理器,其作用是提供系統(tǒng)服務依賴管理 、實現(xiàn)系統(tǒng)初始化時服務的并行啟動。

① 創(chuàng)建服務文件:vim /etc/systemd/system/kestrel-eqidproxyserver.service

[Unit]
Description=EqidProxyServer deploy on centos

[Service]
WorkingDirectory=/var/www/eqidproxyserver/eqidproxyServer
ExecStart=/usr/bin/dotnet /var/www/eqidproxyserver/eqidproxyServer/EqidProxyServer.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
TimeoutStopSec=90
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

紅色背景行是需要你注意配置的,這里我們使用root來執(zhí)行dll, 一般情況下需要創(chuàng)建一個web賬戶,并給予項目文件夾owner權限。
下面在root用戶組下創(chuàng)建www-data用戶,并給予owner權限

 sudo useradd -m -g root www-data
sudo chown www-data var/www/eqidproxyserver

注意:Linux 是大小寫敏感的文件系統(tǒng),設定ASPNETCORE_ENVIRONMENT=Production 會在配置文件中搜索如下配置文件:appsettings.Production.json, 故配置和文件名需要留意匹配。

② 啟用、啟動服務

sudo systemctl enable kestrel-eqidproxyserver.service       // 啟用服務
sudo systemctl start kestrel-eqidproxyserver.service        // 指定服務名啟動
sudo systemctl status kestrel-eqidproxyserver.service       // 驗證服務狀態(tài)

以下是驗證服務狀態(tài)的輸出:

● kestrel-eqidproxyserver.service - EqidProxyServer deploy on centos
Loaded: loaded (/etc/systemd/system/kestrel-eqidproxyserver.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019-02-28 18:04:20 CST; 3min 2s ago
Main PID: 52859 (dotnet)
Memory: 46.3M
CGroup: /system.slice/kestrel-eqidproxyserver.service
└─52859 /usr/bin/dotnet /var/www/eqidproxyserver/eqidproxyServer/EqidProxyServer.dll

Feb 28 18:06:18 gs-server-5809 dotnet-eqidproxyserver[52859]: info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Feb 28 18:06:18 gs-server-5809 dotnet-eqidproxyserver[52859]: Request finished in 136.6715ms 200
Feb 28 18:06:23 gs-server-5809 dotnet-eqidproxyserver[52859]: info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Feb 28 18:06:23 gs-server-5809 dotnet-eqidproxyserver[52859]: Request starting HTTP/1.1 GET http://127.0.0.1/
Feb 28 18:06:23 gs-server-5809 dotnet-eqidproxyserver[52859]: info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Feb 28 18:06:23 gs-server-5809 dotnet-eqidproxyserver[52859]: Request finished in 3.5599ms 200
Feb 28 18:06:32 gs-server-5809 dotnet-eqidproxyserver[52859]: info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Feb 28 18:06:32 gs-server-5809 dotnet-eqidproxyserver[52859]: Request starting HTTP/1.1 GET http://10.201.80.126/
Feb 28 18:06:32 gs-server-5809 dotnet-eqidproxyserver[52859]: info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
Feb 28 18:06:32 gs-server-5809 dotnet-eqidproxyserver[52859]: Request finished in 1.3498ms 200

4. 搭配Nginx部署web程序

① 安裝Nginx, 在終端使用curl localhost測試nginx

sudo yum install nginx      【首次安裝需要顯式啟動:sudo service nginx start】

CentOS安裝的nginx并沒有作為守護進程運行,執(zhí)行sudo systemctl enable nginx 啟用nginx守護進程

② 配置Nginx作為反向代理服務器

  • 修改/etc/nginx/nginx.conf 文件:sudo vi /etc/nginx/nginx.conf
  • 將80端口請求轉(zhuǎn)發(fā)到Kestrel服務(localhost:5000)
server {
listen 80;
server_name default_website;
root /usr/share/nginx/html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

一旦nginx配置完成,可以使用sudo nginx -t 測試配置文件;
如果配置文件合法,重啟nginx (sudo nginx -s reload)
完成以上步驟之后,現(xiàn)在已經(jīng)可以從127.0.0.1、127.0.0.1:5000、 服務器IP訪問web程序。

5.查看進程日志

使用systemd方式管理進程,所有事件和進程都會記錄到某個集中日志,該集中日志包含所有被systend管理的服務和進程的日志。(這個日志功能相當于windows服務器中的事件查看器)

查看剛才建立的服務日志, 可使用下面的命令:

sudo journalctl -fu kestrel-eqidproxysever.service
// 時間過濾:
sudo journalctl -fu kestrel-eqidproxysever.service --since '2018-11-18' --until '2019-03-28 04:00'
  • rpm包源:https://docs.microsoft.com/en-us/windows-server/administration/linux-package-repository-for-microsoft-software
  • rpm/yum區(qū)別:https://zhuanlan.zhihu.com/p/27724520
  • Linux進程管理:https://linux.cn/article-3801-1.html
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Nginx 在 Linux 上托管 ASP.NET Core 6.0應用
學習手冊:Web 開發(fā)環(huán)境與服務器生產(chǎn)環(huán)境
Linux - CentOS 7 通過Yum源安裝 Nginx
ASP.NET Core應用程序部署至生產(chǎn)環(huán)境中(CentOS7)
Linux+Nginx+Asp.net Core及守護進程部署
CentOS7 nginx安裝與卸載
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服