You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Cloud Functions上部署Apollo GraphQL服务器(不使用Firebase库)

在Google Cloud Functions上部署Apollo GraphQL服务器(无Firebase库)

当然可行!Google Cloud Functions完全支持部署基于Express的Apollo GraphQL服务器,而且不需要依赖任何Firebase库——咱们直接用原生的Google Cloud Functions SDK、Express和Apollo官方包就能实现,本质就是把带路由的Express服务器适配成Cloud Functions的HTTP触发器。

下面是具体的实现步骤:

1. 初始化项目并安装依赖

首先创建一个新的项目目录,初始化package.json,然后安装所需的包:

npm init -y
npm install @google-cloud/functions-framework express apollo-server-express graphql
  • @google-cloud/functions-framework:Google Cloud Functions的官方开发框架,用于本地测试和部署适配
  • express:搭建Web服务器
  • apollo-server-express:Apollo GraphQL的Express集成包
  • graphql:GraphQL核心库

2. 编写核心代码(index.js)

创建index.js文件,整合Express、Apollo Server和Cloud Functions入口:

const functions = require('@google-cloud/functions-framework');
const express = require('express');
const { ApolloServer } = require('apollo-server-express');
const { gql } = require('graphql');

// 定义GraphQL Schema
const typeDefs = gql`
  type Query {
    hello: String
    getUser(id: ID!): User
  }

  type User {
    id: ID!
    name: String
    email: String
  }
`;

// 定义Resolvers(数据处理逻辑)
const resolvers = {
  Query: {
    hello: () => 'Hello from Apollo GraphQL on Google Cloud Functions!',
    getUser: (_, { id }) => {
      // 这里可以替换成实际的数据源(比如Cloud SQL、BigQuery等)
      return {
        id,
        name: 'Test User',
        email: 'test@example.com'
      };
    }
  }
};

// 创建Express实例
const app = express();

// 初始化并挂载Apollo Server
async function setupApollo() {
  const server = new ApolloServer({ typeDefs, resolvers });
  // 必须等待Apollo Server启动完成再挂载中间件
  await server.start();
  // 将Apollo挂载到指定路径(默认是/graphql)
  server.applyMiddleware({ app, path: '/graphql' });
}

// 启动Apollo服务
setupApollo();

// 可选:添加其他Express路由(比如健康检查、静态资源等)
app.get('/health', (req, res) => {
  res.status(200).send('OK');
});

// 导出Cloud Functions的HTTP触发器入口
functions.http('graphqlServer', (req, res) => {
  // 将Cloud Functions的请求和响应交给Express处理
  app(req, res);
});

3. 配置package.json

在package.json中添加本地启动脚本,方便测试:

{
  "scripts": {
    "start": "functions-framework --target=graphqlServer"
  }
}

4. 本地测试

运行本地服务器:

npm start

此时可以访问:

  • http://localhost:8080/graphql:打开Apollo Playground,测试你的GraphQL查询
  • http://localhost:8080/health:验证Express的自定义路由是否正常工作

5. 部署到Google Cloud Functions

确保你已经安装并配置了gcloud CLI,然后执行部署命令:

gcloud functions deploy graphqlServer \
  --runtime nodejs20 \
  --trigger-http \
  --allow-unauthenticated \
  --region us-central1
  • --runtime:指定Node.js版本(根据你的项目需求选择,比如nodejs18、nodejs20)
  • --trigger-http:设置为HTTP触发器
  • --allow-unauthenticated:允许未认证的请求访问(生产环境建议移除,配置身份验证)
  • --region:选择部署的区域

部署完成后,Google Cloud会返回一个URL,你可以用这个URL访问你的GraphQL服务(比如https://us-central1-<你的项目ID>.cloudfunctions.net/graphqlServer/graphql)。

关键注意事项

  • 异步启动Apollo:Apollo Server的start()方法是异步的,必须等待它完成后再挂载中间件,否则会出现启动异常。
  • 路由路径匹配:Cloud Functions的触发器URL会包含函数名(比如graphqlServer),所以你的GraphQL实际路径是/graphqlServer/graphql,本地测试时则是/graphql。
  • 无Firebase依赖:全程使用的是Google Cloud原生的@google-cloud/functions-framework,没有引入任何Firebase相关库,完全符合你的需求。
  • 扩展能力:你可以像普通Express项目一样添加中间件(比如认证、日志、CORS等),或者集成Google Cloud的其他服务(比如Cloud Storage、Pub/Sub等)。

内容的提问来源于stack exchange,提问作者Raj Chaudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:17:47