ASP.NET Core部署到Linux服務器(CentOS7 x64)

前言

  本文主要講解如何一步步將ASP.NET Core網站發布到Linux服務器,文中會講解具體步驟及需要避免的各種問題。


?

目錄

  一、環境介紹

  二、創建及發布ASP.NET Core網站項目

  三、服務器軟件安裝(.NET Core SDK)

  四、在服務器上部署ASP.NET Core網站項目

  五、服務器端配置Nginx

  六、配置服務器端的守護進程(Supervisor)

  七、設置守護程序為開機自啟

?


?

環境介紹

  本機所需開發工具: vs2017、XShell 、FileZilla(不限定,可使用其他上傳工具)

  服務器系統及所需軟件:CentOS7、.Netcore、Nginx、Supervisor、Policycoreutils-python


?

創建及發布ASP.NET Core網站項目

  打開vs2017,選擇 文件->新建->項目,選擇ASP.NET Core Web應用程序(.NET Core),在ASP.NET Core 1.1 模板處選擇 Web應用程序

  

  

  此時ASP.NET Core 網站項目已建立完成,直接F5運行,可以在瀏覽器中看到如下頁面

  

  回到vs2017,右鍵項目->發布,選擇文件夾,文件夾名稱更改為MyWebCore(可以不更改,默認名為PulishOutput,默認路徑為bin\Release)點擊發布后,可以在發布時填寫的文件夾下找到發布的文件

  

  ASP.NET Core 網站發布完成,進行下一步


?

?服務器軟件安裝(.NET Core SDK)

?

  通過XShell登錄Linux服務

  執行下列命令,安裝.NET Core SDK(微軟官方教程地址?https://www.microsoft.com/net/core#linuxcentos)   

 sudo yum install libunwind libicu
 curl -SSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=843449sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -c /opt/dotnetsudo ln -s /opt/dotnet/dotnet /usr/local/bin

  執行下列命名,返回版本號即表示.NET Core SDK已經安裝成功   

 dotnet -–version

  

  .NET Core SDK安裝完成,進行下一步


在服務器上部署ASP.NET Core網站項目

  找到本地發布好的ASP.NET Core項目(bin\Release\MyWebCore),使用FileZilla(可以使用其他上傳工具)將MyWebCore文件夾整個上傳至服務器(具體上傳到什么位置可以自定義,此處使用/usr/myweb/文件夾)

  確保文件都成功上傳之后,就可以進行在Linux服務器的部署了

  執行下列命令,部署ASP.NET Core網站  

 cd /usr/myweb/MyWebCoredotnet MyWebCore.dll

  出現如下信息,即表示網址已部署成功

  

  (注:ASP.NET Core 默認端口為5000,可以在項目中通過配置自定義端口,此處不做過多介紹)

  此時是無法訪問到這個頁面的,需要部署一個web容器來進行轉發(即需要為Linux服務器配置Nginx)  

  ASP.NET Core網站部署完成,進行下一步


服務器端配置Nginx

  執行下列命令,安裝Nginx  

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

  成功安裝Nginx之后繼續執行下列命令  

 systemctl start nginx        //啟動Nginx
 systemctl enable nginx  //將Nginx設置為開機自啟

  執行下列命令,配置防火墻

 firewall-cmd --zone=public --add-port=80/tcp --permanent    //開放80端口systemctl restart firewalld  //重啟防火墻,使配置生效

  此時在瀏覽器輸入服務器IP地址,測試Nginx是否可以訪問

  

  Nginx可以正常訪問,接下來開始配置Nginx對我們所部署的ASP.NET Core應用的轉發

  找到Nginx配置文件nginx.conf(我的是在/ect/nginx/目錄下)下載到本地,并將其server{}中的內容進行如下修改(建議先備份)  

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

  將修改完成后的nginx.conf回傳至服務器進行覆蓋

  執行下列命令,使修改后的文件生效  

 nginx -s reload

  執行下列命令,啟動ASP.NET Core網站

 cd /usr/myweb/MyWebCoredotnet MyWebCore.dll

  瀏覽器輸入網址進行訪問

  如果出現502錯誤,執行下列命令,將Nginx添加至白名單,然后再重啟啟動ASP.NET Core  

 yum install policycoreutils-pythonsudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginxsudo semodule -i mynginx.pp

  

  Nginx配置完成,進行下一步


?

?配置服務器端的守護進程(Supervisor)

  為避免Shell退出后仍然可以繼續訪問網站,我們需要守護進程(Supervisor)來監控ASP.NET Core網站,以保證其長久健康的運行

  執行下列命令,安裝Supervisor  

 yum install python-setuptoolseasy_install supervisor

  執行下列命令,配置Supervisor 

 mkdir /etc/supervisor  //此處也可以使用上傳工具手動創建文件夾 echo_supervisord_conf > /etc/supervisor/supervisord.confmkdir /etc/supervisor/conf.d

?

  修改supervisord.conf,對文件最后部分的內容進行修改

//原內容
;[include]
;files = relative/dictory/*.ini
//新內容 
[include]
files = conf.d/*.conf   //此處也可以是*.ini
//注意以上內容不要有;

  創建MyWebCore.conf文件(也可以是*.ini,需跟上一步保持一致),填寫如下內容  

[program:MyWebCore]
command=dotnet MyWebCore.dll ;
directory=/usr/myweb/MyWebCore ;
autorestart=true ;
stderr_logfile=/var/log/MyWebCore.err.log ;
stdout_logfile=/var/log/MyWebCore.out.log ; environment=ASPNETCORE_ENVIRONMENT=Production ; user=root ; stopsignal=INT

  將MyWebCore.conf文件拷貝至下列目錄  

  /etc/supervisor/conf.d/

  執行下列命令,查看是否生效

supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep MyWebCore

  

  如果存在 dotnet MyWebCore.dll進程,則表示運行成功

  配置文件如有修改,執行下列命令更新(沒有則忽略)  

  supervisorctl reload

  此處可能出現的問題(沒有則忽略)

  --重復的監聽,會提示如下錯誤  
    another program is already listening on a port that one of our HTTP servers is configured to use

   --解決方法  

ps -ef | grep supervisord  //查看監聽的端口,出現以下信息
root   2503  1  0 Nov19 ?  00:03:23 /usr/bin/python /usr/bin/supervisord
root   21337 2556  0 18:15 pts/8   00:00:00 grep --color=auto supervisord
kill -s SIGTERM 2503  
 在瀏覽器中進行訪問

  

  守護進程Supervisor配置完成,進行下一步


?

?設置守護程序開機自啟

  如果服務器宕機,重新啟動后我們希望守護程序可以自啟,那么需要做以下操作

  新建supervisord.service文件,并寫入以下內容  

# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon[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

  將supervisord.service文件上傳至服務器下列目錄  

  /usr/lib/systemd/system/

  執行下列命令,將supervisor設為開機啟動  

  systemctl enable supervisord

  執行下列命令,驗證設置是否成功

  systemctl is-enabled supervisord

  返回enabled即為成功,可以執行重啟Linux服務器來進行驗證  

  reboot

  至此,ASP.NET Core網站部署到Linux服務器的操作全部完成。

?

轉載于:https://www.cnblogs.com/iamzl/p/7363766.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252103.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252103.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252103.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redux進一步優化

1. 將原來的 mapStateToDispatch 中的函數提取出來,放在組件中, 如原來的: function mapStateToProps(state, ownProps) {return {hasMore:state.getIn([tabs,hasMore]),} } function mapDispatchToProps(dispatch) {return {addTabList:(i…

C# : 調用C++動態庫(dll)

在實際軟件開發過程中,由于公司使用了多種語言開發,在C#中可能需要實現某個功能,而該功能可能用其他語言已經實現了,那么我們可以調用其他語言寫好的模塊嗎?還有就是,由于C#開發好的項目,我們可…

Python3.5以上版本lxml導入etree報錯Unresolved reference

Web抓取Web站點使用HTML描述,這意味著每個web頁面是一個結構化的文檔。有時從中 獲取數據同時保持它的結構是有用的。web站點不總是以容易處理的格式, 如 csv 或者 json 提供它們的數據。 這正是web抓取出場的時機。Web抓取是使用計算機程序將web頁面數據…

linux設置history歷史記錄

#說明export HISTSIZE1000 #設置歷史記錄顯示1000行export HISTTIMEFORMAT%F %T #設置歷史記錄格式 999 2017-08-15 10:58:32 #修改vim /etc/profilesed -i "s/\(HISTSIZE\).*/\11000/" /etc/profilesed -i "/HISTSIZE/aexport HISTTIMEFORMAT%F %T " /et…

STL-容器庫101--array【C11】

1. 原型 C11提供 template < class T, size_t N > class array;T&#xff1a; 元素類型&#xff0c;以 array::value_type 作為別名使用&#xff1b;N&#xff1a; array中元素大小&#xff1b; 固定size的序列容器&#xff1b;初始化時&#xff0c; array對象不保存任何…

C#:向C++封送結構體數組

在使用第三方的非托管API時&#xff0c;我們經常會遇到參數為指針或指針的指針這種情況&#xff0c; 一般我們會用IntPtr指向我們需要傳遞的參數地址&#xff1b; 但是當遇到這種一個導出函數時,我們如何正確的使用IntPtr呢&#xff0c; extern "C" __declspec(dll…

其它綜合-CentOS7 忘記root密碼

CentOS7 忘記root密碼 長時間不用的 CentOS 機器再次開機的時候忽然忘記了密碼&#xff0c;總不能就重裝一臺吧&#xff0c;還有好多服務在機器上&#xff0c;于是決定重置root的密碼。   如果是已經開啟的機器&#xff0c;需要進行關閉&#xff0c;重新啟動。在啟動選擇內核…

left join on and 與 left join on where的區別

數據庫在通過連接兩張或多張表來返回記錄時&#xff0c;都會生成一張中間的臨時表&#xff0c;然后再將這張臨時表返回給用戶。 在使用left jion時&#xff0c;on和where條件的區別如下&#xff1a; 1、 on條件是在生成臨時表時使用的條件&#xff0c;它不管on中的條件是否為真…

spring boot高性能實現二維碼掃碼登錄(中)——Redis版

前言 本打算用CountDownLatch來實現&#xff0c;但有個問題我沒有考慮&#xff0c;就是當用戶APP沒有掃二維碼的時候&#xff0c;線程會阻塞5分鐘&#xff0c;這反而造成性能的下降。好吧&#xff0c;現在回歸傳統方式&#xff1a;前端ajax每隔1秒或2秒發一次請求&#xff0c;去…

C# :socket 通訊基礎使用實例

們在講解Socket編程前&#xff0c;先看幾個和Socket編程緊密相關的概念&#xff1a; TCP/IP層次模型當然這里我們只討論重要的四層 01&#xff0c;應用層(Application)&#xff1a;應用層是個很廣泛的概念&#xff0c;有一些基本相同的系統級TCP/IP應用以及應用協議&#xff0…

IBM發表論文:可能已找到處理量子計算退相干的方法

在《自然》雜志最近發表的一篇論文中&#xff0c;IBM和其他機構的研究人員設計了兩種量子算法&#xff0c;利用變分量子電路和量子核估計器來訓練一種支持向量機分類器。這兩種算法背后的關鍵思想是使用量子狀態空間作為特征空間表示&#xff0c;有效地構建映射&#xff0c;從原…

PHP + NGINX 控制視頻文件播放,并防止文件下載

最簡單的方法是使用NGINX的 internal 功能 server { listen 80; server_name www.xxx.com;  location / { index index.php index.html index.htm; root /xxx; if (!-e $request_filename) { rewrite ^/index.php(.*)$ /index.php?s$…

可視化調試工具

rosrun rqt_console rqt_console # 查看日志消息&#xff0c;可filter、highlight指定級別。 rosrun rqt_logger_level rqt_logger_level # 可設在日志記錄器的嚴重級別 rosrun rqt_topic rqt_topic # 顯示topic調試信息 rosrun rqt_publisher rqt_publisher # 在界面中管理ro…

C#:委托基礎與事件

通過以下思維導圖&#xff0c;學習委托的基本概念&#xff0c;后面著重講解委托的運用&#xff0c;希望通過最簡單的方式收獲更多的知識。 1.委托的各種寫法 1、委托 委托名new 委托&#xff08;會調用的方法名); 委托名&#xff08;參數&#xff09;; 2、委托 委托名 會調用…

Git Bash關鍵命令

1.默認目錄是C:\Users\用戶名 2.切換目錄&#xff1a;$cd c:\\windows 3.切換到上級目錄&#xff1a;cd ..&#xff0c;中間有空格 4.列出某目錄所有文件&#xff0c;相當于DOS下的dir&#xff1a;ls c:\\windows 5.查看配置信息&#xff1a;git config --list 以下是顯示信息 …

C#:invoke 與 BeginInvoke使用區別

invoke和begininvoke 區別 一直對invoke和begininvoke的使用和概念比較混亂&#xff0c;這兩天看了些資料&#xff0c;對這兩個的用法和原理有了些新的認識和理解。 首先說下&#xff0c;invoke和begininvoke的使用有兩種情況&#xff1a; 1. control中的invoke、begininvoke。…

Django基本命令

Django基本命令 1.創建一個Django 項目 django_admin.py startproject mysite當前目錄下會生成mysite的工程&#xff0c;目錄結構如下&#xff1a; manage.py ----- Django項目里面的工具&#xff0c;通過它可以調用django shell和數據庫等。settings.py ---- 包含了項目的默認…

Git忽略規則.gitignore梳理

對于經常使用Git的朋友來說&#xff0c;.gitignore配置一定不會陌生。廢話不說多了&#xff0c;接下來就來說說這個.gitignore的使用。首先要強調一點&#xff0c;這個文件的完整文件名就是".gitignore"&#xff0c;注意最前面有個“.”。 一般來說每個Git項目中都需…

第二周CoreIDRAW課總結

1.這節課學到了什么知識&#xff1f; 學到了圖像的復制&#xff0c;再制鼠標復制&#xff0c;重復&#xff0c;還有對象的對齊&#xff0c;對象的分布順序。 2.有哪些心得體會&#xff1f; 做了課本的練習&#xff0c;會用窗口里面的泊塢窗造型命令也作出了一個作品。 3.這節課…

axios關于針對請求時長策略設計的思考

前言 在我們的業務請求中&#xff0c;有很多時候會針對有不同時長的需求策略性設置。這里針對這個需求進行詳細的展開。 針對這種情況&#xff0c;我們的timout的一般是根據請求地址來的&#xff0c;所以核心處理技巧便是如何根據不同的request地址去設置不同的timeout. 我們之…