【干货特供】dotNet core 应用部署至 centos(超详解附截图)
文章來源:公眾號-智能化IT系統。
閱讀目錄
需要安裝的插件以及支撐架構
安裝dotnetSDK
安裝jexus
安裝supervisord
遇到問題匯總
注意事項、擴展延伸
需要安裝的插件以及支撐架構 |
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系統。每周都有技術文章推送,包括原創技術干貨,以及技術工作的心得分享。掃描下方關注。
公眾號-智能化IT系統。每周都有技術文章推送,包括原創技術干貨,以及技術工作的心得分享。掃描下方關注。
總結
以上是生活随笔為你收集整理的【干货特供】dotNet core 应用部署至 centos(超详解附截图)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用Python爬取糗事百科段子信息
- 下一篇: 【自动化测试爬虫系列】Selenium