.netcore 通過SCD獨立部署方式 部署到Linux(CentOS7) 另補充結(jié)合Nginx搭建

事先說明:本人是通過visual studio 2019 + 發(fā)布為文件夾的形式部署 , 通過vs部署發(fā)布的好處在于很多配置項vs會幫我們自動生成到配置文件中

1.確保你的項目是已經(jīng)通過本地測試可以正常運行的,假設(shè)你的項目名為firstapp,后方運行時要用
2.在vs中打開項目,上方菜單欄"生成", 然后點擊 '發(fā)布[你的項目名稱]',然后彈出發(fā)布配置窗口
image.png
3.點擊途中綠色圈住的"編輯"按鈕,彈出配置界面
image.png
4.發(fā)布方法我們選擇"文件系統(tǒng)",目標位置自己設(shè)置一下,即最后打包出的文件夾放在哪
5.我們再點擊左側(cè)的"設(shè)置",得到如下界面
image.png

1.配置,表示我們是'Release'還是'Debug'的形式發(fā)布
2.目標框架,即netcore使用的版本
3.部署模式,這里就是區(qū)分獨立部署還是依賴部署的地方了,依賴部署的話,要求你服務(wù)器上還要安裝對應(yīng)版本netcore的運行時環(huán)境,我們這里選擇的是獨立部署,即所有依賴文件都會自動打包到你的文件夾中,然后在服務(wù)器上不用安裝netcore就能跑起來了
4.目標運行時,我們選擇自己服務(wù)器對應(yīng)的版本就好,這里是演示linux版本,具體32位還是64位服務(wù)器自己確定吧
5.然后我們點保存

6.保存之后回到第一張截圖界面,我們點擊"發(fā)布"
7.等待發(fā)布完成后,得到我們項目的文件夾,假設(shè)名為 myapp

我們可以查看一下myapp文件夾,發(fā)現(xiàn)打包了很多項目中需要用到的dll,還有一些json配置文件和一些linux下的so文件,還有幾個跟你項目名稱相關(guān)的文件...

  1. firstapp //在linux上通過./firstapp來執(zhí)行整個項目
  2. firstapp.deps.json //項目依賴文件
  3. firstapp.dll //項目程序集
  4. firstapp.pdb //項目調(diào)試文件,會協(xié)助firstapp.dll運行遇到錯誤拋出異常
  5. firstapp.runtimeconfig.json //運行時配置文件
8.登錄到我們的linux系統(tǒng),一般網(wǎng)站都放在/var/www下,沒有www目錄,我們就新建一個www目錄,如果你只是測試,你放別的地方也可以
9.通過FTP工具將剛打包出來的myapp文件夾上傳到/var/www/目錄下
10.前往對應(yīng)目錄,并執(zhí)行命令即可運行項目
cd /var/www/myapp
./firstapp           #這個firstapp是你項目的名字,參見第7條

如果無法執(zhí)行提示權(quán)限問題 Permission denied 或者 no live upstreams while connecting to upstream 錯誤時候
1.那么請嘗試給打包出來的文件夾權(quán)限,777(先嘗試是否是此問題)
2.可能是selinux導(dǎo)致的
          /usr/sbin/sestatus    先查看selinux狀態(tài)
          vim /etc/selinux/config  修改selinux狀態(tài)
          將SELINUX=enforcing 修改為 SELINUX=disabled 狀態(tài)

如果遇到"Process terminated. Couldn't find a valid ICU package installed on the system"的問題
嘗試安裝ICU庫

sudo yum install -y icu

補充,接下來基于Centos補充Nginx + supervisor 來自動啟動并守護項目進程

安裝 Nginx

sudo yum install -y nginx

由于nginx是第一次安裝的,請通過運行以下命令來顯式啟動:

sudo service nginx start

##如果需要開機自啟動,請執(zhí)行
systemctl enable nginx.service

修改/etc/nginx/nginx.conf文件,并用以下內(nèi)容替換對應(yīng)的server節(jié)點部分:

配置Nginx

server {
    listen        80;
    server_name   myserver;
    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;
    }
}

安裝supervisor守護進程

通過yum安裝supervisor,注意,如果使用python pip安裝,那么最好確保是python2的版本,python3現(xiàn)在可以使用supervisor,但是通過pip安裝的可能會出現(xiàn)異常

yum install -y supervisor

配置守護進程信息

切換到supervisord.d目錄,該目錄下的ini文件都會在supervisor服務(wù)啟動時被守護執(zhí)行
cd /etc/supervisord.d

#在此新建一個supervisor的.ini配置文件
touch myserver.ini

編輯 myserver.ini 文件

[program:myserver]
directory=/var/www/這里填文件夾名稱
command=/bin/bash -c "./myserver"
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=10                
stderr_logfile=/var/log/myserver.err.log
stdout_logfile=/var/log/myserver.out.log
下面內(nèi)容為上方文件的說明
#下面所有注釋的內(nèi)容都要刪除,包括這一句
[program:myserver]                                            #配置當前守護進程服務(wù)的名稱,supervisord可直接通過名稱啟動服務(wù)
directory=/var/www/myapp                                 #工作目錄,即應(yīng)用程序集所在目錄
command=下方詳解                                          #執(zhí)行的命令
environment=ASPNETCORE__ENVIRONMENT=Production           #表明是生產(chǎn)環(huán)境
user=root                                                #root 權(quán)限
stopsignal=INT
autostart=true
autorestart=true
startsecs=10                                             #進程持續(xù)運行多久才認為是啟動成功
stderr_logfile=/var/log/myserver.err.log    
stdout_logfile=/var/log/myserver.out.log

注意,上方配置文件中command參數(shù),這個參數(shù)表示守護進程自動替我們執(zhí)行的命令
例如 python test.py 或者sh test.sh 再或者當你安裝了dotnet環(huán)境后,通過依賴部署時,這里會填dotnet firstapp.dll
但是,我們是獨立部署的,通過./firstapp來運行,但是如果這樣配置command =./firstapp會發(fā)現(xiàn)守護進程無法啟動,因為不識別這個命令
解決方案:我們通過/bin/bash -c "字符串命令"這樣來執(zhí)行就可以了,即command = /bin/bash -c "./firstapp"

啟動supervisord 守護程序,啟動后會執(zhí)行supervisord.d目錄下的ini文件

supervisord -c /etc/supervisord.conf

設(shè)置開機啟動守護程序supervisord

systemctl enable supervisord.service

重啟supervisord

supervisorctl reload  

最后補充,注意,如果要使用nginx的話,那么還有一些nginx反向代理相關(guān)配置要注意設(shè)置哦,例如

//這里很重要,由于通過nginx轉(zhuǎn)發(fā)給.netcore處理,所以如果不配置此項,那么想在netcore中獲取訪問端的IP的話,導(dǎo)致無法獲取
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容