经过一段时间的实践调研后,我决定将 Picals 项目的部署方案分为两个部分:前端部署后端部署

# 前端部署

前端部署的方案主要基于 Vercel 平台进行部署,并使用 Cloudflare 来代理域名,使其能够在国内进行更快的访问。

为什么我要采用 Vercel 进行部署呢?主要有以下几个原因:

  1. Vercel 是一个由 Next.js 团队开发的全球最快的部署平台,它支持 Next.jsNuxt.jsGatsby 等多种前端框架。我的项目使用的是 Vite + React,也可以很好地支持。
  2. Vercel 提供了 Serverless 的部署方式,这意味着我可以将我的前端部署到全球各地的 CDN 上,使得用户能够更快地访问到我的网站。
  3. Vercel 提供了 Preview 功能,这意味着我可以在提交 PR 时,自动部署 PR 的代码,方便我进行代码的 Review。
  4. Vercel 自动地集成了 CI/CD 功能,这意味着我只需要将代码推送到 GitHub,Vercel 就会自动地帮我构建并部署我的网站,无需我手动的进行任何操作。
  5. 最重要的,它是免费的。除了域名要付点小钱。

在 vercel 上,我设置的部署分支为主分支 main,为确保开发和部署的流程顺序,必须以 pr 的形式对 main 分支进行合入,禁止直接对 main 进行提交。

# 后端部署

后端部署的方案参考借鉴了神光的 nest.js 通关秘籍中的部署方案,主要是 将后端服务放到 Docker 上进行运行,并且通过 nginx 容器开启 https。

对于后端部署的详细方案描述,可以查看我先前撰写的一篇文章:如何使用 Docker 部署 Nest.js,其中包含了详细的部署步骤。

总而言之,后端的部署方案主要包含以下几个步骤:

  1. 打包 nest 应用
  2. 使用 Docker 对 nest 应用进行部署
  3. 使用 nginx 反向代理后端服务,启用 https
  4. Docker 部署最佳实践(CI/CD)

至于我为什么选择 Docker 进行部署呢?主要有以下几个原因:

  1. Docker 是一个开源的应用容器引擎,可以让开发者打包应用和依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
  2. 我的服务器的操作系统是基于 Linux 的发行版 CentOS,无法安装版本 > 16 的 Node.js,并且无法安装指定版本的 pnpm。而 Docker 则完全无需担心这部分的问题,你只需要一台能够跑 Docker 的服务器,并且能够拉取对应的镜像就可以了。