From ae08547fa6f21f8c63269313ac681b1ea42e8315 Mon Sep 17 00:00:00 2001
From: mjanez <96422458+mjanez@users.noreply.github.com>
Date: Thu, 20 Apr 2023 10:17:21 +0000
Subject: [PATCH 1/2] Create a quick deploy docker compose file
- Remove ckan-spatial from default docker compose file
- Create a docker-compose.ghcr.yml to use the ckan-spatial image from container registry
- Update the README to include this information
- Update .env.example to info about CKAN_VERSION ennvar
---
.env.example | 1 +
README.md | 29 +++++----
docker-compose.ghcr.yml | 129 +++++++++++++++++++++++++++++++++++++++
docker-compose.nginx.yml | 1 -
docker-compose.yml | 1 -
5 files changed, 146 insertions(+), 15 deletions(-)
create mode 100644 docker-compose.ghcr.yml
diff --git a/.env.example b/.env.example
index c203aff..79052f5 100644
--- a/.env.example
+++ b/.env.example
@@ -66,6 +66,7 @@ TEST_CKAN_DATASTORE_WRITE_URL=postgresql://ckan:ckan@db/datastore_test
TEST_CKAN_DATASTORE_READ_URL=postgresql://datastore_ro:datastore@db/datastore_test
# CKAN core
+## If use docker-compose.ghcr.yml only "*.*.*" versions available in: https://github.com/mjanez/ckan-docker/pkgs/container/ckan-spatial
CKAN_VERSION=2.9.8
CKAN_SITE_ID=default
# CKAN_SITE_URL = http:/ or https:/ + APACHE_SERVER_NAME. Optionally the APACHE_HOST_PORT if different from 80
diff --git a/README.md b/README.md
index 643de9f..94884d3 100644
--- a/README.md
+++ b/README.md
@@ -198,30 +198,22 @@ Use this if you are a maintainer and will not be making code changes to CKAN or
```bash
docker compose build
```
+
>**Note**
- > NGINX CKAN without ckan-pycsw and Apache:
- >```bash
- >docker compose -f docker-compose.nginx.yml build
- >```
-
+ > You can use a [deploy in 5 minutes](#quick-mode) if you just want to test the package.
4. Start the containers:
```bash
docker compose up
```
- >**Note**
- > NGINX CKAN without ckan-pycsw and Apache:
- >```bash
- >docker compose -f docker-compose.nginx.yml up
- >```
-
This will start up the containers in the current window. By default the containers will log direct to this window with each container
using a different colour. You could also use the -d "detach mode" option ie: `docker compose up -d` if you wished to use the current
window for something else.
>**Note**
-> Or `docker compose up --build` to build & up the containers.
+> * Or `docker compose up --build` to build & up the containers.
+> * Or `docker compose -f docker-compose.nginx.yml up -d --build` to use the NGINX version.
At the end of the container start sequence there should be 6 containers running (or 5 if use NGINX Docker Compose file)
@@ -234,7 +226,7 @@ After this step, CKAN should be running at {`APACHE_SERVER_NAME`}{`APACHE_CKAN_L
|1b8d9789c29a|redis:7-alpine |docker-entrypoint.s…|6 minutes ago |Up 4 minutes (healthy)|6379/tcp |redis | |
|7f162741254d|ckan/ckan-solr:2.9-solr8-spatial |docker-entrypoint.s…|6 minutes ago |Up 4 minutes (healthy)|8983/tcp |solr | |
|2cdd25cea0de|ckan-docker-db |docker-entrypoint.s…|6 minutes ago |Up 4 minutes (healthy)|5432/tcp |db | |
-|9cdj25dae6gr|ckan-docker-pycsw |docker-entrypoint.s…|6 minutes ago |Up 4 minutes (healthy)|8000/tcp |db | |
+|9cdj25dae6gr|ckan-docker-pycsw |docker-entrypoint.s…|6 minutes ago |Up 4 minutes (healthy)|8000/tcp |pycsw | |
#### Configure a docker compose service to start on boot
@@ -293,6 +285,17 @@ To have Docker Compose run automatically when you reboot a machine, you can foll
sudo systemctl status ckan-docker-compose
```
+### Quick mode
+If you just want to test the package and see the general functionality of the platform, you can use the `ckan-spatial` image from the [Github container registry](https://github.com/mjanez/ckan-docker/pkgs/container/ckan-spatial):
+
+ ```bash
+ cp .env.example .env
+ # Edit the envvars in the .env as you like and start the containers.
+ docker compose -f docker-compose.ghcr.yml up -d --build
+ ```
+
+It will download the pre-built image and deploy all the containers. Remember to use your own domain by changing `localhost` in the `.env` file.
+
### Development mode
Use this mode if you are making code changes to CKAN and either creating new extensions or making code changes to existing extensions. This mode also uses the `.env` file for config options.
diff --git a/docker-compose.ghcr.yml b/docker-compose.ghcr.yml
new file mode 100644
index 0000000..637fab3
--- /dev/null
+++ b/docker-compose.ghcr.yml
@@ -0,0 +1,129 @@
+version: "3"
+
+volumes:
+ ckan_storage:
+ pg_data:
+ solr_data:
+
+services:
+
+ apache:
+ container_name: ${APACHE_CONTAINER_NAME}
+ build:
+ context: apache/
+ dockerfile: Dockerfile
+ env_file:
+ - .env
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "100m"
+ max-file: "10"
+ depends_on:
+ ckan:
+ condition: service_healthy
+ ports:
+ - "0.0.0.0:${APACHE_PORT_HOST}:${APACHE_PORT}"
+ restart: on-failure:3
+
+ ckan:
+ container_name: ${CKAN_CONTAINER_NAME}
+ image: ghcr.io/mjanez/ckan-spatial:ckan-${CKAN_VERSION}
+ env_file:
+ - .env
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "100m"
+ max-file: "10"
+ depends_on:
+ db:
+ condition: service_healthy
+ solr:
+ condition: service_healthy
+ redis:
+ condition: service_healthy
+ ports:
+ - "0.0.0.0:${CKAN_PORT_HOST}:${CKAN_PORT}"
+ volumes:
+ - ckan_storage:/var/lib/ckan
+ restart: unless-stopped
+ healthcheck:
+ test: ["CMD", "wget", "-qO", "/dev/null", "http://localhost:${CKAN_PORT}"]
+
+ pycsw:
+ container_name: ${PYCSW_CONTAINER_NAME}
+ build:
+ context: ckan-pycsw/
+ dockerfile: Dockerfile
+ env_file:
+ - .env
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "100m"
+ max-file: "10"
+ depends_on:
+ ckan:
+ condition: service_healthy
+ ports:
+ - "0.0.0.0:${PYCSW_PORT_HOST}:${PYCSW_PORT}"
+ volumes:
+ - ./log:${APP_DIR}/log
+ - ./metadata:${APP_DIR}/metadata
+ restart: on-failure:3
+ healthcheck:
+ test: ["CMD", "wget", "-qO", "/dev/null", "http://localhost:${PYCSW_PORT}"]
+
+ db:
+ container_name: ${POSTGRESQL_CONTAINER_NAME}
+ build:
+ context: postgresql/
+ args:
+ - DATASTORE_READONLY_PASSWORD=${DATASTORE_READONLY_PASSWORD}
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
+ environment:
+ - DATASTORE_READONLY_PASSWORD=${DATASTORE_READONLY_PASSWORD}
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
+ - PGDATA=/var/lib/postgresql/data/db
+ volumes:
+ - pg_data:/var/lib/postgresql/data
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "100m"
+ max-file: "10"
+ restart: unless-stopped
+ healthcheck:
+ test: ["CMD", "pg_isready", "-U", "ckan"]
+
+ solr:
+ container_name: ${SOLR_CONTAINER_NAME}
+ build:
+ context: solr/
+ dockerfile: Dockerfile.spatial
+ image: ckan/ckan-solr:${SOLR_IMAGE_VERSION}
+ env_file:
+ - .env
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "100m"
+ max-file: "10"
+ volumes:
+ - solr_data:/var/solr
+ restart: unless-stopped
+ healthcheck:
+ test: ["CMD", "wget", "-qO", "/dev/null", "http://localhost:${SOLR_PORT}/solr/"]
+
+ redis:
+ container_name: ${REDIS_CONTAINER_NAME}
+ image: redis:${REDIS_VERSION}
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "100m"
+ max-file: "10"
+ restart: unless-stopped
+ healthcheck:
+ test: ["CMD", "redis-cli", "-e", "QUIT"]
diff --git a/docker-compose.nginx.yml b/docker-compose.nginx.yml
index 8ffbd32..68ccd01 100644
--- a/docker-compose.nginx.yml
+++ b/docker-compose.nginx.yml
@@ -32,7 +32,6 @@ services:
build:
context: ckan/
dockerfile: Dockerfile
- image: ghcr.io/mjanez/ckan-spatial:ckan-2.9.8
env_file:
- .env
logging:
diff --git a/docker-compose.yml b/docker-compose.yml
index 739b9c8..f99afdd 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -31,7 +31,6 @@ services:
build:
context: ckan/
dockerfile: Dockerfile
- image: ghcr.io/mjanez/ckan-spatial:ckan-2.9.8
env_file:
- .env
logging:
From de0644318e2cd6cab46bdfbf096f210baa4fafa4 Mon Sep 17 00:00:00 2001
From: mjanez <96422458+mjanez@users.noreply.github.com>
Date: Thu, 20 Apr 2023 11:20:33 +0000
Subject: [PATCH 2/2] Add Dockerfile.ghcr
---
ckan/Dockerfile.ghcr | 37 +++++++++++++++++++++++++++++++++++++
docker-compose.ghcr.yml | 4 +++-
2 files changed, 40 insertions(+), 1 deletion(-)
create mode 100644 ckan/Dockerfile.ghcr
diff --git a/ckan/Dockerfile.ghcr b/ckan/Dockerfile.ghcr
new file mode 100644
index 0000000..91bb0b0
--- /dev/null
+++ b/ckan/Dockerfile.ghcr
@@ -0,0 +1,37 @@
+FROM ghcr.io/mjanez/ckan-spatial:ckan-2.9.8
+
+# Set up environment variables
+ENV APP_DIR=/srv/app
+ENV TZ=UTC
+RUN echo ${TZ} > /etc/timezone
+
+# Make sure both files are not exactly the same
+RUN if ! [ /usr/share/zoneinfo/${TZ} -ef /etc/localtime ]; then \
+ cp /usr/share/zoneinfo/${TZ} /etc/localtime ;\
+ fi ;
+
+# Used to configure the container environment by setting environment variables, creating users, running initialization scripts, .etc
+COPY docker-entrypoint.d/* /docker-entrypoint.d/
+
+# Update who.ini with APACHE_CKAN_LOCATION
+COPY setup/who.ini ${APP_DIR}/
+
+# Apply any patches needed to CKAN core
+COPY patches ${APP_DIR}/patches
+
+# Updated version of the Dockerfile RUN command that skips applying a patch if a reversed or previously applied patch is detected
+RUN for d in $APP_DIR/patches/*; do \
+ if [ -d $d ]; then \
+ for f in `ls $d/*.patch | sort -g`; do \
+ cd $SRC_DIR/`basename "$d"` && \
+ if patch -R --dry-run -p1 < "$f"; then \
+ echo "$0: Patch $f has already been applied or reversed, skipping..."; \
+ else \
+ echo "$0: Applying patch $f to $SRC_DIR/`basename $d`"; \
+ patch -p1 < "$f" ; \
+ fi \
+ done ; \
+ fi ; \
+done
+
+CMD $APP_DIR/start_ckan.sh
diff --git a/docker-compose.ghcr.yml b/docker-compose.ghcr.yml
index 637fab3..97c9176 100644
--- a/docker-compose.ghcr.yml
+++ b/docker-compose.ghcr.yml
@@ -28,7 +28,9 @@ services:
ckan:
container_name: ${CKAN_CONTAINER_NAME}
- image: ghcr.io/mjanez/ckan-spatial:ckan-${CKAN_VERSION}
+ build:
+ context: ckan/
+ dockerfile: Dockerfile.ghcr
env_file:
- .env
logging: