部署规划
创建时间:2022年07月14日 11:19:21 最后更新:2024年06月16日 13:48:12

项目发布和部署到生产环境,可以分为两大步骤:

  • ASP.NET Core MVC 项目 Docker 容器化部署
  • ABP Framework 分层项目 Docker 容器化部署

先搞定 ASP.NET Core MVC 项目基于 Docker 容器化部署的要求,然后再搞定 ABP Framework 分层项目在部署时的特殊要求。

服务器部署环境:

  • Centos 7.4
  • Docker
  • Nginx
  • SQL Server

ASP.NET Core MVC 项目 Docker 容器化部署

满足条件

  • 通过 Docker 容器启动所有应用
  • Nginx 作为反向代理服务器,响应发送到服务器的请求,并转发给 Docker 容器
  • 宿主服务器和容器之间设置共享文件,这一点很重要。

将项目编译后的可执行文件保存在容器之外,并以“共享”方式供 Docker 容器使用,方便后续项目发布新版本,直接覆盖服务器上对应文件,不需要重新创建新的 Docker 容器。

这样设计的好处是:应用和数据分离,容器就是一个可运行应用的“壳”,真正的“数据”文件保存在服务器上。比如:WEB应用中上传图片到服务器,图片保存在服务器中,而不是 Docker 容器中。

实现步骤和思路

  • 通过 Docker 容器启动应用
    • 编写 dockerfile 配置文件(参看项目中的文件模板)
    • 编译应用,上传到服务器
    • 根据 dockerfile 创建容器
  • Nginx 转发请求到 Docker 容器
    • 配置 Nginx 配置文件,设置响应转发,将服务器请求转发到 Docker 容器
  • 宿主服务器和容器之间共享文件
    • 在 dockerfile 配置文件里,定义容器卷,定义容器当前工作目录
    • 启动命令通过参数 -v 将当前目录挂载到容器。

ABP Framework 分层项目 Docker 容器化部署

满足条件

  • 全站支持 HTTPS
  • OpenSSL 证书
  • Nginx 反向代理设置,获取真实请求信息

考虑到网站的安全性,全站支持 HTTPS 是一个基本要求,此时需安装 OpenSSL 证书。

Nginx 通过转发请求到 Docker 容器中,所以在 Docker 容器中接收到的是转发请求,而不是用户真实请求,为了能够跟踪网站请求的真实来源,设置 Nginx 反向代理。这样在 ABP Framework 中的日志系统就能够记录真实的用户请求。

小结

在整理发布和部署过程中的问题之后,回过头来总结,发现填的坑还不少,这里重点要提示的 Docker 容器化部署,WEB应用的运行环境发生本质的变化,特别是支持 Https 之后,我们需要对WEB应用进行一系列设置才能正确获取 Url,否则获取的默认是容器本地Url,即localhost

Nginx 设置也非常重要,需要设置真实请求转发,以及解除 Nginx 请求头大小的限制。