gcloud 使用 sqlite 数据库部署而不会消失

gcloud deploy with sqlite database without wiped out

我在尝试将应用程序部署到后端使用 sqlite 数据库的 GCP 时遇到问题。我的问题是,在每次部署时,数据库都被清除了,我找不到使它永久化的方法。

所以假设database.sqlite放在api/db/database.sqlite中。因为初始部署工作正常,因为数据库已创建并放置在 /db 文件夹中。但是当我再次部署该应用程序时,该文件夹已被清除并且数据库。我还尝试将它放在 api 文件夹之外的文件夹中(例如根目录中的 /database),但该文件夹再次被清除。

我不想 create/migrate 每个构建的数据库并将其作为工件传递给部署作业。

// gitlab-ci.yaml

image: node:latest

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - yarn
    - yarn test:api
    - yarn test:ui
    - yarn build
    // this runs for the first time to create the db, then I remove it but the database is gone.
    # - yarn db:migrate --env production
  artifacts:
    paths:
      - api/dist/
      // this runs for the first time to upload the db
      // - api/db
      - ui/dist/
    expire_in: 1 day

deploy:
  only:
    - master
  stage: deploy
  image: google/cloud-sdk:alpine
  dependencies:
    - build
  script:
    - gcloud app deploy --project=PROJECT_ID ui-app.yaml api-app.yaml
// api-app.yaml

service: service-name
runtime: nodejs
env: flex

skip_files:
  - node_modules/
  - ui/

manual_scaling:
  instances: 1

resources:
  volumes:
    - name: ramdisk1
      volume_type: tmpfs
      size_gb: 1
  memory_gb: 6
  disk_size_gb: 10

理想情况下,我需要实例中某处的一个文件夹,该文件夹不会在每次部署时都被清除。我确定我错过了什么。有什么想法吗?

你根本做不到! App Engine,无论是弹性还是标准,都是无服务器和无状态的。您的卷类型是明确的 tmpfs“临时文件系统”。

A​​pp Engine Flex 每周至少重启一次以修补和更新底层服务器,因此您至少每周都会丢失数据库。

当您部署新版本时,会从头创建一个新实例,因此实例启动时您的内存是空的。

无服务器产品是无状态的。如果你想保留你的数据,你需要将它们存储在无服务器产品之外。例如,在计算引擎上,以及具有“持久性”的持久性磁盘。

如果您使用 ORM,您还可以轻松地从 SQL Lite 切换到 MySQL 或 PostgreSQL。从而利用 Cloud SQL 托管数据库供您使用。