1

我克隆了一个 Django+Node.js 开源项目,其目标是上传和注释文本文档,并将注释保存在Postgres db中。该项目具有docker-compose 的堆栈文件,适用于 Django 开发和生产设置。这两个堆栈文件都可以使用 Postgres 数据库开箱即用。

现在我想把这个项目上传到谷歌云——作为我的第一个容器化应用程序。作为第一步,我只想将持久存储移动到Cloud SQL,而不是堆栈文件中包含的 Postgres 映像。我的堆栈文件(Django dev)如下所示

version: "3.7"
services:

  backend:
    image: python:3.6
    volumes:
      - .:/src
      - venv:/src/venv
    command: ["/src/app/tools/dev-django.sh", "0.0.0.0:8000"]
    environment:
      ADMIN_USERNAME: "admin"
      ADMIN_PASSWORD: "${DJANGO_ADMIN_PASSWORD}"
      ADMIN_EMAIL: "admin@example.com"
      # DATABASE_URL: "postgres://doccano:doccano@postgres:5432/doccano?sslmode=disable"
      DATABASE_URL: "postgres://${CLOUDSQL_USER}:${CLOUDSQL_PASSWORD}@sql_proxy:5432/postgres?sslmode=disable"
      ALLOW_SIGNUP: "False"
      DEBUG: "True"
    ports:
      - 8000:8000
    depends_on:
      - sql_proxy
    networks:
      - network-overall

  frontend:
    image: node:13.7.0
    command: ["/src/frontend/dev-nuxt.sh"]
    volumes:
      - .:/src
      - node_modules:/src/frontend/node_modules
    ports:
      - 3000:3000
    depends_on:
      - backend
    networks:
      - network-overall

  sql_proxy:
    image: gcr.io/cloudsql-docker/gce-proxy:1.16
    command:
      - "/cloud_sql_proxy"
      - "-dir=/cloudsql"
      - "-instances=${CLOUDSQL_CONNECTION_NAME}=tcp:0.0.0.0:5432"
      - "-credential_file=/root/keys/keyfile.json"
    volumes:
      - ${GCP_KEY_PATH}:/root/keys/keyfile.json:ro
      - cloudsql:/cloudsql
    networks:
      - network-overall

volumes:
  node_modules:
  venv:
  cloudsql:

networks:
  network-overall:

我有一堆模型,例如Django 后端中的项目,我可以使用 Django 管理界面查看、修改、添加和删除它们,但是在尝试通过 Node.js 视图访问它们时,我得到一个403 Forbidden错误。这是我所有的 Django 模型的情况。

作为参考,在上面的堆栈文件中,我列出了与最初克隆的 Docker-compose 堆栈文件的唯一区别,其中DATABASE_URL用于指向本地 Postgres Docker 映像,如下

  postgres:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      POSTGRES_USER: "doccano"
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
      POSTGRES_DB: "doccano"
    networks:
      - network-backend

为了检查我的 GCP 密钥是否正确,我尝试单独部署 Cloud SQL 代理容器并与之交互(添加、删除和更新包含表中的行),这是可能的。但是,我可以在已部署的 Docker-compose 堆栈中成功使用 Django 管理界面这一事实应该已经证明 Cloud SQL 代理一切正常。

无论如何,我都不是经验丰富的 Node.js 开发人员,并且对 Django 和 Django admin 有一点经验。我使用 Docker-compose 设置的目的是我不必为复杂的 js 视图而烦恼,而只需要处理 Python 业务逻辑。

4

0 回答 0