如何将 Django PostgresSQL 数据库部署到 Google Cloud SQL (App Engine)

How to deploy Django PostgreSQL database to Google Cloud SQL (App Engine)

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

部署后,所有静态内容都正确呈现,但一旦请求命中 ORM 代码,它就会失败(服务器错误 503)。我正在使用 PostgreSQL,我想我 link 它在我的 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 云 SQL 数据库?

基于this,我似乎无法使用 ORM。 我必须使用“Django Nonrel”吗?

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

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

2种方法解决。通过使用您数据库的私有 IP 地址或 public 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 次测试,请不要忘记删除您应用程序的所有未使用版本,因为我读到那会花费 $.

搜索时,由于文件 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. 转储您的数据库并将其导入云 SQL (doc)
    • 从您的本地转储您的 postgre 数据库:
    pg_dump -h localhost -U postgres my_database_name | gzip > backup.gz
    • 从您的存储桶上传文件 backup.gz
    • 从 SQL 云上的 Postgres 实例,从您的存储桶中导入您的转储。

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