菜单

部署

相关源文件

目的与范围

本文档概述了将 RealWorld 项目部署到各种托管环境的过程。它涵盖了部署先决条件、平台选项、配置要求和部署工作流。有关支持部署过程的构建系统配置的信息,请参阅 Turbo 配置

1. 部署概述

RealWorld 项目的部署涉及部署两个主要组件:

  1. API 服务器(apps/api 目录)
  2. 文档站点(apps/documentation 目录)

每个组件都可以根据您的需求部署到不同的平台。

来源: Procfile1-2

2. 部署先决条件

在部署 RealWorld 应用程序之前,请确保您已满足以下先决条件:

  1. 已安装 Node.js 和 pnpm
  2. 您的部署环境可访问 PostgreSQL 数据库实例
  3. 已正确配置环境变量
  4. 应用程序已通过 Turbo 成功构建

来源: Procfile1-2 turbo.json4-8

3. Heroku 部署

RealWorld 项目包含一个用于 Heroku 部署的 Procfile,该文件定义了应用程序部署时要运行的命令。

注意:Procfile 中存在重复的 && 运算符,似乎存在语法错误。修正后的版本应为:

web: cd apps/api && npx prisma generate && pnpm build && pnpm start

来源: Procfile1-2

3.1 Heroku 部署步骤

  1. 安装 Heroku CLI 并登录

    heroku login
    
  2. 创建新的 Heroku 应用程序

    heroku create realworld-api
    
  3. 添加 PostgreSQL 数据库

    heroku addons:create heroku-postgresql:hobby-dev
    
  4. 配置环境变量

    heroku config:set JWT_SECRET=your_secret NODE_ENV=production
    
  5. 部署应用程序

    git push heroku main
    

4. Docker 部署

对于容器化部署,您可以根据 Procfile 中的构建和启动命令来创建 Docker 配置。

来源: Procfile1-2

5. 环境配置

RealWorld 应用程序需要几个环境变量才能正确部署:

可变描述必填示例
DATABASE_URLPrisma 数据库连接字符串postgresql://user:password@host:port/dbname
JWT_SECRET用于 JWT 身份验证的密钥your-secret-key
PORTAPI 服务器的端口否(默认:3000)3000
NODE_ENV环境模式否(默认:development)production

Turbo 已配置为通过其 globalDependencies 设置识别本地环境文件。

来源: turbo.json3

6. 数据库迁移用于部署

部署 RealWorld 应用程序时,正确设置和迁移数据库非常重要。

用于部署的 Prisma 命令

  1. 将迁移应用到生产数据库

    npx prisma migrate deploy
    
  2. 生成 Prisma 客户端(也包含在 Procfile 中)

    npx prisma generate
    

来源: Procfile1-2

7. CI/CD 集成

RealWorld 项目包含用于 CodeQL 安全分析的 GitHub Actions 工作流,该工作流可作为 CI/CD 管道的一部分。

CodeQL 工作流

  • 每周运行一次(周三)
  • 分析 JavaScript 代码中的安全漏洞
  • 可集成到部署安全检查流程中

来源: .github/workflows/codeql.yml1-35

8. 部署工作流

完整的部署工作流集成了构建系统、数据库迁移和应用程序启动。

Turbo 构建系统通过 turbo.json 中定义的任务来协调构建过程。 build 任务处理依赖关系解析并输出构建好的应用程序。

来源: Procfile1-2 turbo.json4-8

9. 部署后验证

部署 RealWorld 应用程序后,验证所有组件是否正常运行非常重要。

  1. API 服务器正在运行且可访问
  2. 数据库连接已建立
  3. 身份验证端点正常工作
  4. Article、comment 和 profile 端点按预期运行

您可以使用存储库中提供的 Postman 集合来验证 API 功能。有关更多信息,请参阅 API 测试