【问题标题】:How to deploy Django PostgreSQL database to Google Cloud SQL (App Engine)如何将 Django PostgreSQL 数据库部署到 Google Cloud SQL (App Engine)
【发布时间】:2020-11-22 10:09:59
【问题描述】:

这是我在 Google App Engine 上的第一个 Django 部署。

部署后,所有静态内容都正确呈现,但只要请求命中 ORM 代码,它就会失败(服务器错误 503)。我正在使用 PostgreSQL,我认为我在 settings.py 和 app.yaml 上正确链接了它
DB_HOST: '/cloudsql/my-app:us-central1:my-app-postgresql'.
DB_NAME: 'my-db' ...

我需要了解有关将 Django PostgreSQL 部署到 App Engine 的任何特别信息吗?在部署期间,所有表和数据都会重新创建,对吧?

最后,我使用DEBUG = True 进行部署并查看ProgrammingError at / the "my-app_my-app" relationship does not exist.

如何将我的所有数据库导出到 Google Cloud SQL 数据库?

基于this,看起来我将无法使用 ORM。 我必须使用“Django Nonrel”吗?

【问题讨论】:

    标签: google-app-engine django-deployment


    【解决方案1】:

    在搜索时,由于文件 cloud_sql_proxy.exe,数据库的传输似乎与代理连接阶段相反。 但我删除了数据库并恢复了这一步但没有成功。

    最后我的解决方案包括 2 个步骤:

    1. 部署后,通过 SSH 连接到:
      从 Google 控制台 > App Engine > 实例 > SSH > 显示 gcloud 命令(更快)并复制命令。
      • 在您的 gcould SDK 上:
      然后使用复制的命令连接到您的实例:
      sudo docker ps 并复制您的应用程序CONTAINER ID
      sudo docker exec -it <CONTAINER ID> /bin/bash
      python3 manage.py makemigrations
      python3 manage.py migrate
      python3 manage.py createsuperuser

    这将创建所有必要的表。如果本地 postgreSql 中没有任何数据,则一切都已完成,否则步骤 2。

    1. 转储数据库并将其导入 Cloud SQL (doc)
      • 从您的本地转储您的 postgre 数据库:
      pg_dump -h localhost -U postgres my_database_name | gzip > backup.gz
      • 从您的存储桶上传文件 backup.gz
      • 从 SQL Cloud 上的 Postgres 实例,从您的存储桶导入您的转储。

    不要忘记将它从存储桶中删除,以防它位于公共文件夹中。

    【讨论】:

    • 如果我们可以在 app.yaml 文件中添加 thiose migrations 命令以在部署后运行,那就太好了,但我不知道该怎么做。
    • 我已代表您创建了一个关于此功能的Feature Request。您可以“加注星标”以使其可见,并在“抄送”部分添加您的电子邮件,以便您可以收到有关此线程的进一步更新。
    • 好主意!谢谢。
    【解决方案2】:

    我今天刚遇到和你一样的问题,我解决了。

    如果您像我一样,对所有云计算的东西有点陌生,请记住一条规则,默认情况下,所有内容都被锁定,列入黑名单。这意味着默认情况下,您的 App Engine 服务无权连接到您的数据库。这就是为什么你有一个 503,因为请求被拒绝了。

    2 种解决方法。通过使用您的数据库的私有 IP 地址或公共 IP。 我选择私有 IP,因为请求保留在我的 VPC 中,因此更安全。

    这里是 GCP 的 documentation

    但要快:

    1. 我在我的项目所在的区域有一个create VPC 连接器。

    2. 我已将 VPC 连接器添加到我的 app.yml 文件中

      vpc_access_connector: 名称:projects/my-project-12345/locations/europe-west1/connectors/my-connector

    而且它的作用就像一个魅力!

    PS : 另外,如果你和我一样进行了 1000000 次测试,请不要忘记删除所有未使用的应用版本,因为我读到这要花费 $ 美元。

    【讨论】:

    • 我尝试使用我的实例的私有 IP,但没有成功,但您的第一个解决方案是数据库 IP!有趣的。第二种解决方案似乎也是一种有趣的方法!要记住类似的问题。但我终于设法自己弄清楚了,我认为我的解决方案更简单。谢谢! +1
    猜你喜欢
    • 2021-09-25
    • 2021-02-22
    • 2021-06-15
    • 2014-08-03
    • 2015-12-26
    • 2020-02-19
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多