This directory is intended to become a separate repo for building the SEAMWARE CKAN image.
The image installs the custom extensions directly from GitHub, so it does not depend on local source checkouts or bind mounts.
Official extensions installed during build:
ckanext-envvarsckanext-harvestckanext-schemingckanext-dcat
SEAMWARE extensions installed during build:
ckanext-oidc4vcckanext-tmforumckanext-dsifckanext-ngsild
The Dockerfile sets non-secret defaults that match the current custom stack:
CKAN__PLUGINS- Scheming/DCAT dataset schema defaults
- DSIF catalog defaults
- OIDC4VC defaults except the client secret
- TMForum default owner role
These values can still be overridden at runtime with environment variables.
Build the image from this directory:
docker build --platform=linux/amd64 -t seamware/ckan:2.11-custom .You can also override the CKAN version or plugin refs:
docker build \
--platform=linux/amd64 \
--build-arg CKAN_VERSION=2.11.5 \
--build-arg CKANEXT_DCAT_REF=v2.4.3 \
--build-arg CKANEXT_OIDC4VC_REF=main \
--build-arg CKANEXT_TMFORUM_REF=main \
--build-arg CKANEXT_NGSILD_REF=main \
--build-arg CKANEXT_DSIF_REF=main \
-t seamware/ckan:2.11-custom .The upstream ckan/ckan-base tags are currently published as linux/amd64 images only, so ARM hosts such as Apple Silicon need the explicit platform setting during build and runtime.
This repo includes a standalone docker-compose.yml that assumes the CKAN image has already been built and tagged.
-
Create the runtime env file:
cp .env.example .env
-
Adjust the values in
.env, especially:CKAN_IMAGECKAN_SITE_URLCKAN___BEAKER__SESSION__SECRETCKAN___API_TOKEN__JWT__ENCODE__SECRETCKAN___API_TOKEN__JWT__DECODE__SECRETCKAN_SYSADMIN_EMAILCKANEXT_OIDC4VC_CLIENT_SECRET
-
Start the stack:
docker compose up -d
This compose stack starts:
ckangather-consumerfetch-consumerdbsolrredis
The PostgreSQL init scripts under postgresql/docker-entrypoint-initdb.d/ create the CKAN and DataStore databases automatically on first boot.
This repo only builds the CKAN image. A working deployment still needs the usual CKAN runtime services:
- PostgreSQL
- Solr
- Redis
- optionally DataPusher
At runtime you still need to provide the site-specific and secret values, for example:
CKAN_SITE_URL=https://catalog.example.com
CKAN_SQLALCHEMY_URL=postgresql://ckan:pass@db/ckan
CKAN_SOLR_URL=http://solr:8983/solr/ckan
CKAN_REDIS_URL=redis://redis:6379/1
CKANEXT_OIDC4VC_CLIENT_SECRET=replace-meDepending on your deployment, you may also need:
CKAN__BEAKER__SESSION__SECRETCKAN__API_TOKEN__JWT__ENCODE__SECRET- sysadmin bootstrap variables
- SMTP settings
- DataStore settings
The image includes the default OIDC4VC settings currently used by the project, but the client secret is intentionally left for runtime injection.
The tmforum extension is installed in the image, but TMForum API endpoints are configured per harvest source, not globally in the image.
If you use TMForum harvesting, the web container is not enough by itself. You still need the two harvest consumers running:
ckan -c /srv/app/ckan.ini harvester gather-consumer
ckan -c /srv/app/ckan.ini harvester fetch-consumerUseful next additions for this standalone repo are:
- optional
docker-entrypoint.d/scripts for instance-specific config - NGINX or reverse-proxy config
- CI workflow to build and publish the image