My approach to the limitations of marketplace in it’s current state ist to work around it.
As of Docker Compose v2.30.0 there is a Post-start hook which can be used to clone extensions right from Github and build them on container startup.
Be aware tho, that this significantly increases container startup time.
The relevant parts of the the docker-compose.yml:
name: service-stack
services:
directus:
image: directus/directus:11.2.2
post_start:
- command: >
/bin/sh -c "
# Install git
apk add --no-cache git &&
# Extension directus-extension-flexible-editor
# https://github.com/formfcw/directus-extension-flexible-editor
# Pull latest or clone the repo if it doesn't exist yet
# This does log an error, as it triggers EXTENSION_AUTO_RELOAD but there is no dist folder yet.
git -C /directus/extensions/directus-extension-flexible-editor pull || git clone https://github.com/formfcw/directus-extension-flexible-editor.git /directus/extensions/directus-extension-flexible-editor &&
# Install dependencies with production=false to include devDependencies (devDependencies needed for building the extension)
npm install --prefix /directus/extensions/directus-extension-flexible-editor --production=false &&
# Build the extension
npm run build --prefix /directus/extensions/directus-extension-flexible-editor &&
# Touch the package.json to trigger EXTENSION_AUTO_RELOAD once again (this time with dist folder in place)
touch /directus/extensions/directus-extension-flexible-editor/package.json
# Repeat for other extensions
# Extension directus-extension-generate-types
# https://github.com/maltejur/directus-extension-generate-types
git -C /directus/extensions/directus-extension-generate-types pull || git clone https://github.com/maltejur/directus-extension-generate-types.git /directus/extensions/directus-extension-generate-types &&
npm install --prefix /directus/extensions/directus-extension-generate-types --production=false &&
npm run build --prefix /directus/extensions/directus-extension-generate-types &&
touch /directus/extensions/directus-extension-generate-types/package.json
"
# Run all of this as root
user: root
volumes:
- ./data/directus/extensions:/directus/extensions
environment:
EXTENSIONS_AUTO_RELOAD: "true"
For private repos just clone with a valid token:
clone https://my_token@github.com/my_user/my_repo.git
Yeah, I have a little bit different workaround - I have a custom Dockerfile which builds the image from Directus with the extensions. After that I can deploy the image in Docker of K8s. But of course this does not work well when you need to manage multiple projects that share the same extensions and also want to have maintainable code that you have in a single place.
– asitanc