前言:最近公司有個項目用 .netcore開發的項目,然后閑的沒事就研究如果發布到Linux系統上
需要安裝的插件以及支撐架構
1.dotnetSDK
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
傳輸項目到指定的目錄下
Windows系統下傳輸文件夾到指定centos服務器上,也可以通過其他方式傳輸
pscp -r E:\WebSite\admin1.lottery.com root@192.168.0.55:/dotnet/webAPP/
創造發布站點完畢之后,驗證web項目是否可運行,執行命令
dotnet /dotnet/webAPP/Lottery.WEB.dll
然后根據開啟的端口訪問站點(注意:記得開啟端口,防止不可訪問)
開發的端口在代碼的規定好的
Program.cs文件中
public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseUrls("http://*:5001") .Build(); }
安裝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}
重啟讀取配置文件
sh /usr/jexus/jws restart
重啟讀取配置文件之后,做好host文件映射即可通過域名方式訪問該站點
Centos上設置jexus開機自啟動
參考地址:http://www.bubuko.com/infodetail-1295747.html
cd /etc/init.d
vim jws
按i編輯模式,粘貼下面內容
#!/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
"lottery"可以為dotnet core 入口dll文件名字 ,插入內容,注意首尾需無空格,需頂格:
[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 ;自動重啟間隔時間
創建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
使配置生效
systemctl daemon-reload
設置服務開機啟動,即設置enable
systemctl enable supervisor.service
啟動服務
systemctl start supervisor.service
驗證dotnet進程是否啟動
使用命令“ps -ef | grep dotnet”查看dotnet 是否運行
[root@cli ~]# 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] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
;以下內容開啟http服務[inet_http_server]
port=192.168.1.71:9001 ;ip 加端口 username=admin ;登陸賬號,可以不設 password=123456 ;登陸賬戶,可以不設
也可以設置成
[inet_http_server] ;port=127.0.0.1:9001 ;ip 加端口 port=9001 username=root ;登陸賬號,可以不設 password=123456 ;登陸賬戶,可以不設
重啟服務,就可以訪問了
注意防火牆是否對端口9001例外
圖片驗證碼報錯的話安裝
解決:
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來解決
注意
Dotnet程序在運行當中,重復覆蓋包,並不能直接覆蓋到,所以需要重啟 dotnet,如果使用了supervisord,則需要重啟supervisord(目前本人沒有找到其他更好的方法)
systemctl restart supervisor.service
Dotnet程序在運行當中,重復覆蓋包,並不能直接覆蓋到,所以需要重啟 dotnet項目的進程
進入supervisor的管理界面
點擊Restart進行該進程重啟
或者使用這個命令重啟
supervisorctl -c /etc/supervisor/supervisord.conf restart Lottery.WEB