如何在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
相关产品推荐
相关产品推荐

