Nginx Docker方式部署ASP.NET Core项目

来源
前述:

凡是基于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
 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章