dotNet core 應用部署至 centos(超詳解附截圖)

来源:https://www.cnblogs.com/xtary/archive/2018/08/24/9528125.html
-Advertisement-
Play Games

dotNet core 應用部署至 centos(超詳解附截圖) ...


文章來源:公眾號-智能化IT系統。

 

需要安裝的插件以及支撐架構

1.dotnetSDK

dotnet 相關命令是屬於 .NET Core command-line (CLI) 的一部分,Microsoft 為我們提供了這個命令行工具以供我們在開發程式中使用,它主要用來進行對代碼的編譯、NuGet 包的管理、程式的運行、測試等等。

2.jexus

Jexus 是Linux平臺上 的一款免費的ASP.NET WEB伺服器。它是 Linux、Unix、FreeBSD等非Windows系統架設 ASP.NET WEB 伺服器的核心程式,具備反向代理、入侵檢測等重要功能。擁有IIS和其它Web伺服器所不具備的高度的安全性

3.supervisord

supervisord 是用Python實現的一款非常實用的進程管理工具,在批量服務化管理時特別有效。可以將非Daemon的應用轉為Daemon程式。

 

安裝dotNetSDK

執行命令

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

sudo yum update 

sudo yum install libunwind libicu 

sudo yum install dotnet-sdk-2.1.200

 

安裝對應的dotnet運行時,這次開發用到的是 2.0.6,參考地址:

https://www.microsoft.com/net/download/linux-package-manager/centos/runtime-2.0.6

執行命令

sudo yum install dotnet-runtime-2.0.6

 

安裝Jexus

curl https://jexus.org/release/x64/install.sh|sh

cd /usr/jexus/siteconf 

cp default lottery  

#lottery是配置名稱,不同網站名稱不同 

vim lottery

修改的內容參考:

port=80 

root=/ /dotnet/webAPP/admin1.lottery.com/ 

hosts=*,admin2.lottery.com    #OR your.com,*.your.com 

# addr=0.0.0.0 

# CheckQuery=false 

NoLog=true  

AppHost={CmdLine=/dotnet/webAPP/admin1.lottery.com/Lottery.WEB.dll;AppRoot=/dotnet/webAPP/admin1.lottery.com;Port=5001}

#這一行數據可以不管他,配置https時候用到

# UseHttps=true

# ssl.certificate=/x/xxx.crt  #or pem

# ssl.certificatekey=/x/xxx.key

# ssl.protocol=TLSv1.0    # TLSv1.1 or  TLSv1.2...

# ssl.ciphers=

重啟讀取配置文件

sh /usr/jexus/jws restart

重啟讀取配置文件之後,本地機器做好host文件映射即可通過功能變數名稱方式訪問該站點

設置jexus開機自啟動

參考地址:http://www.bubuko.com/infodetail-1295747.html

cd /etc/init.d 

vim jws

編輯如下:

#!/bin/bash   

#chkconfig: 2345 80 05

#description:jws 

#

. /etc/rc.d/init.d/functions

case "$1" in

start)

  echo "Jexus Start.."

  /usr/jexus/jws start

  ;;

 stop)

  echo "Jexus Stop.."

  /usr/jexus/jws stop

  ;;

 restart)

  echo "Jexus Restart"

  /usr/jexus/jws restart

  ;;

 status)

  /usr/jexus/jws status

  ;;*)

  exit 1

  ;;

 esac

 exit $RETVAL

添加許可權

chmod 766 jws

添加服務

chkconfig --add jws

 

安裝Supervisord

參考地址:https://www.cnblogs.com/hobinly/p/7382038.html

yum install python-setuptools 

easy_install supervisor

 

配置supervisor

在etc下創建目錄,並賦許可權

mkdir -m 700 -p /etc/supervisor

 

在目錄“ /etc/supervisor”下創建配置文件

echo_supervisord_conf > /etc/supervisor/supervisord.conf

 

修改配置文件

vim /etc/supervisor/supervisord.conf

 

在文件末尾添加,註意首尾需無空格,需頂格

[include] 

files=/etc/supervisor/conf.d/*.conf

在目錄“/etc/supervisor”下創建dotnet core 進程配置文件存放目錄“conf.d”

mkdir -m 700 /etc/supervisor/conf.d

 

創建進程配置文件

vim /etc/supervisor/conf.d/lottery.conf

編輯內容:

[program:Lottery.WEB] 

command=/bin/bash -c "dotnet Lottery.WEB.dll"

directory=/dotnet/webAPP/admin1.lottery.com/

stderr_logfile=/var/log/Lottery.error.log

stdout_logfile=/var/log/Lottery.stdout.log

environment=ASPNETCORE_ENVIRONMENT=Production 

user=root 

stopsignal=INT 

autostart=true

autorestart=true

startsecs=1

具體參數說明如下:

[program:Lottery.WEB] ;顯示名稱

command=/bin/bash -c "dotnet MyDotNetName.dll"  ;運行命令,啟動dotnet進程

directory=/usr/PublishOutput/   ;MyDotNetName目錄

stderr_logfile=/var/log/Lottery.error.log  ;錯誤日誌文件

stdout_logfile=/var/log/Lottery.stdout.log  ;日誌文件

environment=ASPNETCORE_ENVIRONMENT=Production  ;進程環境變數

user=root   ;進程執行用戶

autostart=true  ;自動啟動 autorestart=true   ;是否自動重啟

startsecs=1     ;自動重啟間隔時間

 

備註:command=/bin/bash -c "dotnet Lottery.WEB.dll"

可以改成 command=dotnet /dotnet/webAPP/admin1.lottery.com/dotnet Lottery.WEB.dll

 

創建supervisor 自啟動服務

vim /etc/systemd/system/supervisor.service

編輯內容:

[Unit] 

Description=supervisor 

[Service] 

Type=forking 

ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf 

ExecStop=/usr/bin/supervisorctl shutdown 

ExecReload=/usr/bin/supervisorctl reload 

KillMode=process 

Restart=on-failure

RestartSec=42s

[Install] 

WantedBy=multi-user.target

使配置生效

systemctl daemon-reload

 

設置服務開機啟動,即設置enable

systemctl enable supervisor.service

啟動服務

systemctl start supervisor.service

驗證dotnet進程是否啟動,使用命令“ps -ef | grep dotnet”查看dotnet 是否運行

ps -ef | grep dotnet

root      1549  2529  0 17:17 pts/0    00:00:00 grep --color=auto dotnet

root     27795 27764  0 17:07 ?        00:00:02 dotnet Lottery.WEB.dll

supervisor遠程管理

使用命令“vim /etc/supervisor/supervisord.conf”修改配置文件,如下設置

[inet_http_server]

port=192.168.1.71:9001      ;ip 加埠 

username=admin               ;登陸賬號,可以不設 

password=123456              ;登陸賬戶,可以不設

 

重啟服務,就可以訪問了,註意防火牆是否對埠9001開放。

也可以設置成

[inet_http_server]

port=*:9001

username=admin               ;登陸賬號,可以不設

password=123456              ;登陸賬戶,可以不設

 

問題彙總

圖片驗證碼報錯

解決:

yum install libgdiplus-devel

註意:

yum install libgdiplus 後,在centos7 下,程式並不能運行成功還是報錯,查看libgdiplus安裝情況

rpm -qa |grep libgdiplus

rpm  -ql libgdiplus-2.10-9.el7.x86_64

在/usr/lib64下缺少libgdiplus.so文件

Centos7 需要通過安裝libgdiplus-devel來解決

 

yum install autoconf automake libtool

yum install freetype-devel fontconfig libXft-devel

yum install libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel

yum install glib2-devel cairo-devel

git clone https://github.com/mono/libgdiplus

cd libgdiplus

./autogen.sh

make

make install

cd /usr/lib64/

ln -s /usr/local/lib/libgdiplus.so gdiplus.dll

錯誤一:

type init 錯誤。提示找不到libgdiplus組件

Make solution 1:

ln -s /usr/local/lib/libgdiplus.so /usr/lib64/libgdiplus.so

ln -s /usr/local/lib/libgdiplus.so /usr/libgdiplus.so

 

驗證碼亂碼問題:

如果驗證碼亂碼,請確認生成驗證碼的字體庫是否存在伺服器中

 

註意事項、擴展延伸

關於更新應用

Dotnet程式在運行當中,如果需要更新 dotnetCore應用,將新打包的應用直接覆蓋到部署的路徑下,在從supervisord 9001埠中重啟指定的應用,或者在伺服器上執行命令

supervisorctl -c /etc/supervisor/supervisord.conf restart Lottery.WEB

 

關於dotnetCore WEB應用設置不同的埠

修改Program.cs文件

public static IWebHost BuildWebHost(string[] args) =>

WebHost.CreateDefaultBuilder(args)

.UseContentRoot(Directory.GetCurrentDirectory())

.UseKestrel()

.UseStartup<Startup>()

          .UseUrls("http://*:5001")

.Build();

}

 

關於部署 https的WEB應用

在部署https WEB應用的時候,我已經拿到了 一個尾碼為pem文件還有一個尾碼為key的文件

第一步:需要這兩個文件生成尾碼為pfx的文件,並設置生成 pfx文件的密碼

centos系統下執行命令

openssl pkcs12 -export -out iiscert.pfx -inkey private.key -in public.pem

然後會讓你輸入密碼(密碼不要忘記了)

第二步:修改jexus站點配置信息

vim /etc/supervisor/conf.d/lottery.conf

編輯如下:

UseHttps=true

ssl.certificate=/dotnet/httpsKey/public.pem  #crt or pem

ssl.certificatekey=/dotnet/httpsKey/private.key

ssl.protocol=TLSv1.2    # TLSv1.1 or  TLSv1.2...

#ssl.ciphers=

wp! 保存

 

修改程式 Program.cs文件

public static IWebHost BuildWebHost(string[] args) =>

WebHost.CreateDefaultBuilder(args)

.UseContentRoot(Directory.GetCurrentDirectory())

.UseKestrel(options => options.Listen(IPAddress.Any, 5003, listenOptions =>

{

listenOptions.UseHttps(new X509Certificate2("/dotnet/httpsKey/iiscert.pfx", "123456"));

}))

.UseStartup<Startup>()

.Build();

重新部署到伺服器,並重啟supervisor對應的進程

 

關於部署非WEB應用

如果需要部署到非WEB應用程式,則不需要執行 jexus的步驟,直接在 supervisor上新增一個進程配置文件(/etc/supervisor/conf.d/  這個目錄下一個*,conf文件代表一個進程配置)

 


公眾號-智能化IT系統。每周都有技術文章推送,包括原創技術乾貨,以及技術工作的心得分享。掃描下方關註。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2018-08-24 c#金額轉換成中文大寫金額 decimal PriceSum = 32957.2654; 調用 var PriceSumChinese = MoneyToUpper(PriceSum.ToString()); 結果:叄萬貳仟玖佰伍拾柒圓貳角柒分 ...
  • 前言 List集合操作去除重覆數據的這種情況經常會碰到,博客園裡面也有很多大神們做過,在這裡主要是借鑒然後自己整理了一下,主要是為了方便自己,以後再次碰到這種去重問題,直接打開自己的鏈接拿起鍵盤就是乾,,,, 一、方法一 利用HashSet去重,在實體類里重寫Equals和GetHashCode方法 ...
  • 前言 前面講解了MEF的引用方法,介面的導入導出,類屬性的導入導出和集合的導出用法其實大家可以看到基本上大同小異的。 MEF的延遲載入 我們知道當裝配一個組件的時候,當前組件裡面的所有的Import的變數都自動去找到對應的Export而執行了實例化,有些時候出於程式效率的考慮,不需要立即實例化對象, ...
  • MEF導出類的方法和屬性 首先來說導出屬性,因為這個比較簡單,和導出類差不多,先來看看代碼,主要看我加註釋的地方,MusicBook.cs中的代碼如下: program.cs中的代碼如下: 下麵還用foreach遍歷輸出屬性的值,運行即可查看到結果。最後我會附上源碼供大家下載,這裡就不再截圖了。 下 ...
  • C 5.0 推出async和await,最早是.NET Framework 4.5引入,可以在Visual Studio 2012使用。在此之前的非同步編程實現難度較高,async使非同步編程的實現變得簡便。 各平臺對async的支持情況 |平臺|async| | | | |.NET 4.5及以上|& ...
  • 代碼: private static ImageCodecInfo GetImageCodecInfo(ImageFormat imageFormat) { ImageCodecInfo[] imageCodecInfoArr = ImageCodecInfo.GetImageDecoders(); ...
  • 前言 小編菜鳥級別的程式員最近感慨頗多,經歷了三五春秋深知程式路途遙遠而我滄海一粟看不到的盡頭到不了的終點何處是我停留的驛站。說了段廢話下麵進入正題吧! 什麼是MEF? MEF:全稱Managed Extensibility Framework(托管可擴展框架)。單從名字我們不難發現MEF是專門致力 ...
  • IoC理論的背景 我們都知道,在採用面向對象方法設計的軟體系統中,它的底層實現都是由N個對象組成的,所有的對象通過彼此的合作,最終實現系統的業務邏輯。 如果我們打開機械式手錶的後蓋,就會看到與上面類似的情形,各個齒輪分別帶動時針、分針和秒針順時針旋轉,從而在表盤上產生正確的時間。圖1中描述的就是這樣 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...