來源
前述:
凡是基於http請求的的項目,都需要有有一個server以提供對client(UserAgent)的請求做處理並相應。也就是要有個HttpServer,也就是web服務器。(此處的web服務器是指提供處理http請求軟件,非實體主機。web主機亦稱作web服務器,此處服務器只實體主機。不要混淆)
web服務器:在Windows平臺通常都是以IIS作爲擔當,在Linux上則通常是Nginx、Apache、TomCat。
ASP.Net Core項目:asp.net core 內部使用的是Kestrel作爲web服務器,本地項目調試沒有任何問題,但部署到Web服務器上,是無法直接被外部網絡訪問的,因爲如果沒有對Kestrel配置就不提供對外部訪問的支持(待查證)。
部署:
Windows IIS上部署:參考官網步驟 使用 IIS 在 Windows 上託管 ASP.NET Core ,關鍵步驟就是 安裝 .NET Core 託管捆綁包,按步驟,下載並安裝項目引用的netcore版本的runtime,並在IIS新建無託管的應用程序池,併爲網站或虛擬應用程序綁定此池。
Linux Nginx上部署:參考官網 使用 Nginx 在 Linux 上託管 ASP.NET Core ,關鍵點:1,必須在Startup.Configure中配置支持反省代理 2,在/etc/nginx/sites-available/default默認爲新增server節點,配置反向代理(實際就是講Nginx監聽的外部訪問端口映射到 ASP.Net.Core項目的端口:默認5000端口)
最後:在Linux上 Nginx Docker方式部署ASP.NET Core項目
參考 如何用一臺服務器,部署多個不同的 WEB 項目 (use nginx in docker)
步驟:
1,下載並安裝對應的Linux版本netcore運行時
2,安裝Docker,官網鏈接
3,安裝Nginx(Docker方式),代替直接在主機上安裝Nginx:條件建立好~/nginx-reverse-proxy
文件夾,及www conf logs,用於將本機(host)路徑與Docker中Nginx html、nginx.conf、log關聯,也就是掛載,也就是docker說的卷(Volume),如此如果對其中的文件做了修改 Nginx的Docker容器每次啓動都都會加重最新的。
docker run -d -p 80:80 --name nginx-reverse-proxy -v ~/nginx-reverse-proxy/www:/usr/share/nginx/html -v ~/nginx-reverse-proxy/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx-reverse-proxy/logs:/var/log/nginx nginx
4,步驟3啓動的Nginx,Docker中的80端口映射爲了Host的80端口,如此,效果就同主機上(Host)安裝了Nginx。
5,之後就是修改映射到host上的配置文件修改conf/nginx.conf
,添加反向代理的配置(在Nginx配置文件配置asp.net core項目Kestrel使用的端口map到的主機端口,外部網絡就可以通過此端口進行訪問了)。
下面的命令 就是將host的100端口映射到另一個Nginx容器的80端口。反向代理配置應將項目Kestrel端口映射爲Host的100端口。外部網絡通過主機 ip:100或域名的方式就可以訪問項目了。
docker run -d -p 100:80 --name nginx-cms -v ~/nginx-cms/www:/usr/share/nginx/html -v ~/nginx-cms/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx-cms/logs:/var/log/nginx nginx