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
“临时文件系统”。
App Engine Flex 每周至少重启一次以修补和更新底层服务器,因此您至少每周都会丢失数据库。
当您部署新版本时,会从头创建一个新实例,因此实例启动时您的内存是空的。
无服务器产品是无状态的。如果你想保留你的数据,你需要将它们存储在无服务器产品之外。例如,在计算引擎上,以及具有“持久性”的持久性磁盘。
如果您使用 ORM,您还可以轻松地从 SQL Lite 切换到 MySQL 或 PostgreSQL。从而利用 Cloud SQL 托管数据库供您使用。
我在尝试将应用程序部署到后端使用 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
“临时文件系统”。
App Engine Flex 每周至少重启一次以修补和更新底层服务器,因此您至少每周都会丢失数据库。
当您部署新版本时,会从头创建一个新实例,因此实例启动时您的内存是空的。
无服务器产品是无状态的。如果你想保留你的数据,你需要将它们存储在无服务器产品之外。例如,在计算引擎上,以及具有“持久性”的持久性磁盘。
如果您使用 ORM,您还可以轻松地从 SQL Lite 切换到 MySQL 或 PostgreSQL。从而利用 Cloud SQL 托管数据库供您使用。