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

如何借助Google Cloud Platform托管移动应用后端?部署流程咨询

部署Django REST后端到GKE的流程困惑

我正准备把第一个应用部署到应用商店,但对后端部署流程感到困惑。我已经为使用Google API的Django REST后端写了docker compose文件,原本打算托管在Google Cloud Run,但调研后觉得它可能不是移动应用的最佳选择,所以考虑改用Google Kubernetes Engine(GKE)。

我的理解是:做好docker compose文件后,需要把镜像推送到容器注册表,再部署到Cloud Run/GKE?这个流程对吗?

以下是我的配置文件:

docker-compose.yml

version: '3'

services:
  backend:
    build:
      context: ./
      dockerfile: ./Dockerfile
    env_file:
      - ./backend/.env
    container_name: backend
    ports:
      - 8000:8000
  db:
    image: postgres:latest
    restart: always
    env_file:
      - ./backend/.env
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
  nginx:
    build:
      context: ./nginx
      dockerfile: ./Dockerfile
    container_name: nginx
    ports:
      - 80:80
    depends_on:
      - backend

.env文件

GOOGLE_APPLICATION_CREDENTIALS=/path/to/file/creds.json
... other vars

Backend Dockerfile

FROM python:3.9-slim

WORKDIR /app

ENV PYTHONNUNBUFFERED 1

RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip install -r requirements.txt 

COPY . .

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Nginx Dockerfile

# Base image
FROM nginx:1.23.3-alpine

# Copy Nginx configuration
COPY nginx.conf ./nginx/nginx.conf

# Expose port
EXPOSE 80

Nginx.conf

upstream backend {
  server backend:8000;
}

server {
  listen 80;

  location / {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

希望能得到相关建议,帮我理清方向、加深对该流程的理解。
感谢!


针对Django后端部署到GKE的建议与流程梳理

一、Cloud Run vs GKE的选择

  • 如果你的移动应用后端流量波动大、不需要长期运行的数据库(或用托管数据库),Cloud Run其实很合适——它按请求计费,自动扩缩容,运维成本低。但如果需要复杂的服务编排、持久化集群资源、自定义网络配置,GKE更适配。
  • 你的配置里有自建PostgreSQL,GKE可以运行有状态的数据库,但更推荐用Google Cloud SQL托管PostgreSQL,减少运维负担,比自建容器数据库更稳定可靠。

二、核心部署流程梳理

不管是Cloud Run还是GKE,核心流程都是:

  1. 构建容器镜像:为每个自定义服务(backend、nginx)构建镜像,PostgreSQL用官方镜像即可。
  2. 推送镜像到容器注册表:推荐用Google Artifact Registry(GCR已逐步淘汰)作为镜像存储仓库。
  3. 部署到目标平台:
    • Cloud Run:不支持docker compose直接部署,需要手动定义单个服务(可把nginx和backend打包成一个镜像,或用Cloud Run负载均衡)。
    • GKE:需要编写Kubernetes配置文件(Deployment、Service、Ingress等),或用kompose convert将docker compose转为K8s配置后再部署。

三、当前配置的优化点

1. Backend Dockerfile优化

  • 修正拼写错误:PYTHONNUNBUFFERED改为PYTHONUNBUFFERED。
  • 生产环境禁止用python manage.py runserver(开发服务器性能差、不安全),替换为Gunicorn:
    # 新增安装Gunicorn
    RUN pip install gunicorn
    # 替换启动命令
    CMD ["gunicorn", "--bind", "0.0.0.0:8000", "你的项目名.wsgi:application"]
    
  • 拆分镜像构建步骤:先复制requirements.txt安装依赖,再复制代码,利用Docker缓存加快构建速度。

2. 环境变量与Google API认证

  • 不要把creds.json打包到镜像里,GCP平台推荐用Workload Identity给GKE/Cloud Run服务赋予Google API访问权限,无需手动挂载密钥文件。
  • 若必须用密钥文件,在GKE中用Secret资源挂载,在Cloud Run中用Secret Manager管理,禁止直接放在.env或镜像中。

3. Nginx与数据库配置

  • GKE中可直接用Ingress Controller(如GKE Ingress)替代Nginx,减少服务数量。
  • 生产环境不要用postgres:latest,指定具体版本(如postgres:15-alpine),避免镜像更新导致兼容性问题。
  • 自建数据库在GKE中需配置PersistentVolumeClaim(PVC)持久化数据,不要用本地卷(./postgres-data),否则容器重启或节点更换时数据会丢失。

四、GKE部署简化步骤

  1. 创建GKE集群:通过GCP控制台或gcloud container clusters create命令创建集群。
  2. 构建并推送镜像:
    # 构建backend镜像
    docker build -t us-central1-docker.pkg.dev/[你的项目ID]/[仓库名]/backend:v1 .
    # 推送至Artifact Registry
    docker push us-central1-docker.pkg.dev/[你的项目ID]/[仓库名]/backend:v1
    # 同理构建并推送nginx镜像
    
  3. 转换docker compose为K8s配置:
    kompose convert -f docker-compose.yml
    
    生成的文件需调整:修改镜像地址为你的Artifact Registry地址、添加PVC配置、调整Service类型。
  4. 部署到GKE:
    kubectl apply -f ./backend-deployment.yaml
    kubectl apply -f ./db-deployment.yaml
    kubectl apply -f ./nginx-service.yaml
    
  5. 配置Ingress:创建Ingress资源,将外部流量导向Nginx或直接指向Backend服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:07:57