API Platform容器编排:Docker Compose与Kubernetes
你还在为API Platform的部署架构烦恼吗?从开发环境的快速搭建到生产环境的弹性扩展,一文掌握两种主流容器编排方案。读完本文你将学会:使用Docker Compose一键启动完整开发环境、通过Kubernetes实现生产级高可用部署、两种方案的核心配置对比与选型建议。
容器编排方案对比
API Platform提供了两种容器编排方案,满足不同阶段的部署需求:
| 特性 | Docker Compose | Kubernetes |
|---|---|---|
| 适用场景 | 本地开发、小型部署 | 生产环境、大规模集群 |
| 配置复杂度 | 简单(单文件声明) | 中等(多资源对象协作) |
| 扩展性 | 有限(依赖主机资源) | 弹性伸缩(基于负载自动扩缩容) |
| 核心配置文件 | compose.yaml、compose.override.yaml | helm/api-platform/values.yaml、helm/api-platform/templates/deployment.yaml |
Docker Compose:开发环境一键部署
Docker Compose通过声明式配置文件,将API Platform的所有组件(PHP应用、数据库、PWA前端)组织成一个协调工作的应用栈。这种方案特别适合本地开发和功能验证,只需一条命令即可启动完整环境。
核心服务架构
API Platform的Docker Compose配置定义了三个核心服务,通过compose.yaml文件实现服务编排:
services:
php: # API后端服务
image: ${IMAGES_PREFIX:-}app-php
depends_on: [database]
environment:
SERVER_NAME: ${SERVER_NAME:-localhost}, php:80
MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeThisMercureHubJWTSecretKey!}
pwa: # 前端应用服务
image: ${IMAGES_PREFIX:-}app-pwa
environment:
NEXT_PUBLIC_ENTRYPOINT: http://php
database: # PostgreSQL数据库
image: postgres:${POSTGRES_VERSION:-16}-alpine
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
开发环境通过compose.override.yaml实现配置叠加,主要增加了:
- 代码目录挂载(实现热更新)
- Xdebug调试支持
- 数据库端口映射(便于本地工具连接)
环境切换与部署流程
项目提供了三种环境配置,通过COMPOSE_FILE环境变量实现快速切换:
# 开发环境(默认)
docker compose up -d
# 生产环境(需预先设置环境变量)
COMPOSE_FILE=compose.yaml:compose.prod.yaml docker compose up -d
生产环境配置compose.prod.yaml主要优化:
- 使用生产构建目标(
frankenphp_prod) - 移除开发工具和调试配置
- 强制要求设置安全敏感环境变量(如
APP_SECRET)
Kubernetes:生产级容器编排
当应用需要部署到生产环境并支持大规模扩展时,Kubernetes方案提供了更强大的编排能力。API Platform通过Helm Chart封装了完整的Kubernetes部署逻辑,支持自动扩缩容、滚动更新、高可用配置等企业级特性。
Helm Chart核心配置
Helm Chart的values.yaml文件定义了部署的核心参数,主要包括:
# PHP应用配置
php:
image:
repository: "chart-example.local/api-platform/php"
appEnv: prod # 环境标识
appDebug: "0" # 调试模式开关
trustedProxies: # 信任代理配置
- "127.0.0.1"
- "10.0.0.0/8"
# 数据库配置
postgresql:
enabled: true # 是否启用内置PostgreSQL
global:
postgresql:
auth:
password: "!ChangeMe!" # 数据库密码
# 自动扩缩容配置
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
部署资源结构
Kubernetes部署通过deployment.yaml定义核心工作负载,主要特点包括:
- 多环境变量注入:配置通过ConfigMap和Secret挂载,区分敏感与非敏感信息
- 健康检查机制:就绪探针(Readiness Probe)和存活探针(Liveness Probe)确保服务可用性
- 优雅关闭:PreStop钩子实现连接平滑终止
- 资源控制:可配置CPU/内存请求和限制,避免资源争抢
# 关键配置片段
containers:
- name: {{ .Chart.Name }}-php
image: "{{ .Values.php.image.repository }}:{{ .Values.php.image.tag }}"
ports:
- name: http
containerPort: 80
readinessProbe:
tcpSocket: { port: 80 }
initialDelaySeconds: 3
livenessProbe:
tcpSocket: { port: 80 }
initialDelaySeconds: 3
env:
- name: APP_ENV
valueFrom: { configMapKeyRef: { name: {{ include "api-platform.fullname" . }}, key: php-app-env } }
- name: APP_SECRET
valueFrom: { secretKeyRef: { name: {{ include "api-platform.fullname" . }}, key: php-app-secret } }
部署命令与扩展配置
使用Helm部署的基本命令:
# 添加仓库(示例)
helm repo add api-platform https://api-platform.github.io/helm-charts
# 部署到Kubernetes集群
helm install my-api-platform api-platform/api-platform \
--set php.appSecret=your-secure-secret \
--set postgresql.global.postgresql.auth.password=your-db-password \
--set mercure.jwtSecret=your-mercure-secret
对于生产环境,建议额外配置:
- 启用持久化存储(
postgresql.primary.persistence.enabled: true) - 配置Ingress(启用HTTPS和域名路由)
- 设置资源请求和限制(避免节点资源耗尽)
- 启用自动扩缩容(
autoscaling.enabled: true)
方案选型与最佳实践
环境匹配建议
| 场景 | 推荐方案 | 核心优势 |
|---|---|---|
| 本地开发 | Docker Compose | 配置简单、启动快速、资源占用低 |
| 功能测试 | Docker Compose | 环境一致性高、依赖管理简单 |
| CI/CD流水线 | Docker Compose | 轻量部署、易于集成 |
| 生产环境 | Kubernetes | 高可用、弹性伸缩、运维工具丰富 |
| 多团队协作 | Kubernetes | 资源隔离、权限控制、标准化部署 |
安全配置检查清单
无论选择哪种方案,部署前应确保:
- 更换默认密钥:MERCURE_JWT_SECRET、APP_SECRET、数据库密码
- 启用HTTPS:生产环境必须配置TLS证书
- 限制敏感端口:数据库等内部服务不暴露公网访问
- 最小权限原则:容器使用非root用户运行
- 定期更新镜像:修复基础镜像安全漏洞
性能优化关键点
- 资源配置:根据实际负载调整CPU/内存分配
- 缓存策略:启用Redis缓存减轻数据库压力(通过Doctrine配置)
- 数据库优化:生产环境建议使用托管数据库服务或配置主从复制
- 静态资源:前端资源通过CDN分发(可配合Kubernetes Ingress配置)
总结与进阶方向
API Platform提供的两种容器编排方案覆盖了从开发到生产的全生命周期需求。Docker Compose以简洁的配置满足了快速开发和小型部署需求,而Kubernetes方案则通过Helm Chart实现了生产级的可扩展性和可靠性。
进阶学习建议:
- 探索helm/api-platform目录下的完整配置选项
- 研究生产环境部署示例:compose.prod.yaml
- 学习使用Kustomize进行Kubernetes配置管理
- 了解GitOps流程(如ArgoCD)与Kubernetes的集成
通过合理选择编排方案并遵循最佳实践,API Platform应用可以实现高效开发、可靠部署和轻松维护,为API服务提供坚实的基础设施支持。
本文配置示例均来自项目源码,完整文件可参考:compose.yaml、helm/api-platform
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



