From a8ceb55ceba88c25d7550156ca076ab9145f90b7 Mon Sep 17 00:00:00 2001 From: Austin Burdine Date: Thu, 8 Oct 2026 15:00:18 -0400 Subject: [PATCH] Disabled Ghost's in-development tables in the Docker images Ghost 6.69 creates in-development tables (app_installations, app_installation_manifests) when NODE_ENV=development, which is meant for working on Ghost itself. The images symlink config.development.json to config.production.json, so setting createInDevelopmentTables: false there covers both modes. - 6: set the flag in the generated config during the build, and bumped Ghost-CLI to 1.33.2 (its new default only applies during `ghost setup`, which the image skips via --no-setup) - 6-next: added the flag to the checked-in baseline config Co-Authored-By: Claude Opus 5.5 --- 6-next/alpine3.23/config.production.json | 3 ++- 6-next/bookworm/config.production.json | 3 ++- 6/alpine3.23/Dockerfile | 6 ++++-- 6/bookworm/Dockerfile | 6 ++++-- Dockerfile.template | 2 ++ config-next.json | 3 ++- versions.json | 4 ++-- 7 files changed, 18 insertions(+), 9 deletions(-) diff --git a/6-next/alpine3.23/config.production.json b/6-next/alpine3.23/config.production.json index 31ec76a8..54ba4255 100644 --- a/6-next/alpine3.23/config.production.json +++ b/6-next/alpine3.23/config.production.json @@ -18,5 +18,6 @@ }, "paths": { "contentPath": "/home/ghost/content" - } + }, + "createInDevelopmentTables": false } diff --git a/6-next/bookworm/config.production.json b/6-next/bookworm/config.production.json index 31ec76a8..54ba4255 100644 --- a/6-next/bookworm/config.production.json +++ b/6-next/bookworm/config.production.json @@ -18,5 +18,6 @@ }, "paths": { "contentPath": "/home/ghost/content" - } + }, + "createInDevelopmentTables": false } diff --git a/6/alpine3.23/Dockerfile b/6/alpine3.23/Dockerfile index 4ad38261..d5324f15 100644 --- a/6/alpine3.23/Dockerfile +++ b/6/alpine3.23/Dockerfile @@ -45,8 +45,8 @@ ENV NODE_ENV=production # Ghost-CLI is installed from source rather than "npm install -g ghost-cli" so that # pnpm can resolve the dependency tree from the lockfile committed alongside the tag # ("npm install -g" ignores lockfiles entirely, so the tree it produces varies by build date) -ENV GHOST_CLI_VERSION=1.33.1 -ENV GHOST_CLI_SHA=cd09f6b38c0fd5b381e80d83f27c97e68b358783 +ENV GHOST_CLI_VERSION=1.33.2 +ENV GHOST_CLI_SHA=a8cfe4e621a274144137e3646b097a19eb78cfca ENV GHOST_CLI_INSTALL=/usr/local/lib/ghost-cli RUN set -eux; \ \ @@ -114,6 +114,8 @@ RUN set -eux; \ cd "$GHOST_INSTALL"; \ gosu node ghost config --no-prompt --ip '::' --port 2368 --url 'http://localhost:2368'; \ gosu node ghost config paths.contentPath "$GHOST_CONTENT"; \ +# in-development tables are for working on Ghost itself, not for running it (and NODE_ENV=development turns them on by default) + gosu node node -e 'const fs = require("fs"); const f = "config.production.json"; const c = JSON.parse(fs.readFileSync(f)); c.createInDevelopmentTables = false; fs.writeFileSync(f, JSON.stringify(c, null, 2) + "\n");'; \ \ # make a config.json symlink for NODE_ENV=development (and sanity check that it's correct) gosu node ln -s config.production.json "$GHOST_INSTALL/config.development.json"; \ diff --git a/6/bookworm/Dockerfile b/6/bookworm/Dockerfile index c618b2cb..2baf7445 100644 --- a/6/bookworm/Dockerfile +++ b/6/bookworm/Dockerfile @@ -42,8 +42,8 @@ ENV NODE_ENV=production # Ghost-CLI is installed from source rather than "npm install -g ghost-cli" so that # pnpm can resolve the dependency tree from the lockfile committed alongside the tag # ("npm install -g" ignores lockfiles entirely, so the tree it produces varies by build date) -ENV GHOST_CLI_VERSION=1.33.1 -ENV GHOST_CLI_SHA=cd09f6b38c0fd5b381e80d83f27c97e68b358783 +ENV GHOST_CLI_VERSION=1.33.2 +ENV GHOST_CLI_SHA=a8cfe4e621a274144137e3646b097a19eb78cfca ENV GHOST_CLI_INSTALL=/usr/local/lib/ghost-cli RUN set -eux; \ \ @@ -118,6 +118,8 @@ RUN set -eux; \ cd "$GHOST_INSTALL"; \ gosu node ghost config --no-prompt --ip '::' --port 2368 --url 'http://localhost:2368'; \ gosu node ghost config paths.contentPath "$GHOST_CONTENT"; \ +# in-development tables are for working on Ghost itself, not for running it (and NODE_ENV=development turns them on by default) + gosu node node -e 'const fs = require("fs"); const f = "config.production.json"; const c = JSON.parse(fs.readFileSync(f)); c.createInDevelopmentTables = false; fs.writeFileSync(f, JSON.stringify(c, null, 2) + "\n");'; \ \ # make a config.json symlink for NODE_ENV=development (and sanity check that it's correct) gosu node ln -s config.production.json "$GHOST_INSTALL/config.development.json"; \ diff --git a/Dockerfile.template b/Dockerfile.template index d0e03a83..72ded9f1 100644 --- a/Dockerfile.template +++ b/Dockerfile.template @@ -153,6 +153,8 @@ RUN set -eux; \ cd "$GHOST_INSTALL"; \ gosu node ghost config --no-prompt --ip '::' --port 2368 --url 'http://localhost:2368'; \ gosu node ghost config paths.contentPath "$GHOST_CONTENT"; \ +# in-development tables are for working on Ghost itself, not for running it (and NODE_ENV=development turns them on by default) + gosu node node -e 'const fs = require("fs"); const f = "config.production.json"; const c = JSON.parse(fs.readFileSync(f)); c.createInDevelopmentTables = false; fs.writeFileSync(f, JSON.stringify(c, null, 2) + "\n");'; \ \ # make a config.json symlink for NODE_ENV=development (and sanity check that it's correct) gosu node ln -s config.production.json "$GHOST_INSTALL/config.development.json"; \ diff --git a/config-next.json b/config-next.json index 31ec76a8..54ba4255 100644 --- a/config-next.json +++ b/config-next.json @@ -18,5 +18,6 @@ }, "paths": { "contentPath": "/home/ghost/content" - } + }, + "createInDevelopmentTables": false } diff --git a/versions.json b/versions.json index 75df3a29..7d8f50db 100644 --- a/versions.json +++ b/versions.json @@ -2,8 +2,8 @@ "6": { "version": "6.69.0", "cli": { - "version": "1.33.1", - "sha": "cd09f6b38c0fd5b381e80d83f27c97e68b358783" + "version": "1.33.2", + "sha": "a8cfe4e621a274144137e3646b097a19eb78cfca" }, "node": { "version": "22"