DotNet跨平臺 - .net core項目部署到centos7

環境說明     

系統:CentOS Linux release 7.2.1511 (Core)css

相關工具:VS2017  xftphtml

服務器軟件:.net core2.0,nginxlinux

準備.net core應用程序

 .NET Core分爲兩種應用類型:Portable applications(便攜應用)          Self-contained application(自宿主應用)nginx

咱們選擇便攜應用,這樣發佈的項目會小一點,也是微軟推薦的發佈方式。
數據庫

.NET Core SDK 下載地址:https://www.microsoft.com/net/download  (還須要安裝server host,是否安裝成功 iis模塊與處理程序映射中查看windows




  • 確保這份發佈應用能夠在windows上運行,以減小後續的問題。
    centos

服務器安裝CentOS7

這個很少說了,網上好多教程。服務器

服務器安裝.net sdk for .net core

sudo yum install libunwind libicu(安裝libicu依賴)

curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131(下載sdk壓縮包,1.0 

  curl -sSL -o dotnet.tar.gz https://download.microsoft.com/download/7/3/A/73A3E4DC-F019-47D1-9951-0453676E059B/dotnet-sdk-2.0.2-linux-x64.tar.gz  (2.0)app

sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet(解壓縮)

sudo ln -s /opt/dotnet/dotnet /usr/local/bin(建立連接)

官方教程:https://www.microsoft.com/net/download/linux-package-manager/centos/sdk-currentcurl

輸入 dotnet –info 來查看是否安裝成功

若是能夠執行則代表.NET Core SDK安裝成功

部署.net core應用程序到服務器

使用Xftp上傳到服務器,須要注意一點,配置xftp時,協議選擇sftp,不要選ftp,不然會出現連不上服務器的狀況。

項目上傳至服務 home/WebApp

檢查項目是否可以運行

命令:dotnet /home/WebApp/WebApp.dll

  

能夠看到端口號是5000:Now listening on: http://localhost:5000

安裝Nginx

curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

rpm -ivh nginx.rpm

yum install nginx

輸入:systemctl start nginx 來啓動nginx。

 
 

輸入:systemctl enable nginx 來設置nginx的開機啓動(linux宕機、重啓會自動運行nginx不須要連上去輸入命令)。

配置Nginx對Asp .Net Core的轉發

修改 /etc/nginx/conf.d/default.conf 文件。

將文本內容替換爲上圖:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        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;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

:wq 覆蓋保存。

執行:nginx –s reload 使其即時生效

 

可能出現的問題

 CentOS 7.0默認使用的是firewall做爲防火牆,我參考了一些資料,改成iptables防火牆:

1.關閉firewall:
systemctl stop firewalld.service #中止firewall
systemctl disable firewalld.service #禁止firewall開機啓動
firewall-cmd --state #查看默認防火牆狀態(關閉後顯示notrunning,開啓後顯示running)

2.iptables防火牆安裝

#先檢查是否安裝了iptables  
service iptables status  
#安裝iptables  
yum install -y iptables  
#升級iptables  
yum update iptables   
#安裝iptables-services  
yum install iptables-services  

3.開啓iptables  

#註冊iptables服務  
#至關於之前的chkconfig iptables on  
systemctl enable iptables.service  
#開啓服務  
systemctl start iptables.service  
#查看狀態  
systemctl status iptables.service

4.配置iptables,開放端口,輸入命令:# vi /etc/sysconfig/iptables

# Generated by iptables-save v1.4.21 on Wed Oct 18 11:53:01 2017
*mangle
:PREROUTING ACCEPT [135197:27080837]
:INPUT ACCEPT [63155:19657469]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [11793:12614289]
:POSTROUTING ACCEPT [11891:12626324]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Wed Oct 18 11:53:01 2017
# Generated by iptables-save v1.4.21 on Wed Oct 18 11:53:01 2017

*filter
:INPUT ACCEPT [62:5588]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [29:2860]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5000 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5900 -j ACCEPT   
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT    #vnc遠程桌面鏈接
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT
# Completed on Wed Oct 18 11:53:01 2017

5.重啓iptables

# systemctl restart iptables.service

後續出現的問題

 配置好守護服務(supervisor)後,本身手賤,reboot了一下服務器,結果服務器再起來後,不知道是否是我重啓了下nginx仍是什麼緣由,項目跑不起來了,提示已運行,我就按網上說的kill了幾個進程,kill完後,項目是起來了,但是全部靜態文件加載不了css,js,後來又按網上說的,配置nginx訪問js後仍不行,重裝了下nginx後還不行,最後從新安裝了dotnet core後問題解決了,因此感受出現問題後,最快的方法就是重裝以上軟件!

 

後來又出過一次問題,個人數據庫服務器IP地址變了,而後項目跑是能跑起來,只是涉及到鏈接數據的操做都掛了,我把項目更新後仍是跑不起來,重啓nginx、kill .net進程都不行,重裝.net core仍是不行,最後把supervisor停了再啓動
( supervisord -c /etc/supervisor/supervisord.conf) 就行了。

卸載SDK命令

sudo yum remove dotnet-sdk-*
sudo yum remove libunwind libicu
sudo yum remove /etc/yum.repos.d/dotnetdev.repo

或者

rm -rf /usr/share/dotnet​ 刪除舊版cli

一、配置dotnet產品Feed
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]
name=packages-microsoft-com-prod 
baseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

二、安裝SDK,注意版本!!!
sudo yum update
sudo yum -y install libunwind libicu
sudo yum install dotnet-sdk-2.1.4

 

*****************************************end**********************************************

 感謝博客園的大牛園友的無私奉獻!!

參考:http://www.cnblogs.com/ants/p/5732337.html

相關文章
相關標籤/搜索