Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Docker Compose files with new volume configurations #130

Merged
merged 12 commits into from
Apr 30, 2024
Merged
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Base
APP_DIR=/srv/app

# Host Ports
Expand Down Expand Up @@ -71,6 +72,7 @@ TEST_CKAN_DATASTORE_READ_URL=postgresql://datastore_ro:datastore@db/datastore_te

# Dev settings
USE_HTTPS_FOR_DEV=false
CKAN_DEV_COMPOSE_SERVICE=ckan-dev

# CKAN core
## If use docker-compose.ghcr.yml only "*.*.*" versions available in: https://github.com/mjanez/ckan-docker/pkgs/container/ckan-docker
Expand Down
157 changes: 56 additions & 101 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ To verify a successful Docker installation, run `docker run hello-world` and `do
versions for client and server.

> [!NOTE]
> Learn more about [Docker](#docker-basic-commands)/[Docker Compose](#docker-compose-basic-commands) basic commands.
> Learn more about [Docker/Docker Compose](#docker-basic-commands) basic commands.
>


Expand Down Expand Up @@ -209,31 +209,38 @@ See [CKAN images](#5-ckan-images) for more details of what happens when using de
#### Create an extension
You can use the ckan [extension](https://docs.ckan.org/en/latest/extensions/tutorial.html#creating-a-new-extension) instructions to create a CKAN extension, only executing the command inside the CKAN container and setting the mounted `src/` folder as output:

docker compose -f docker-compose.dev.yml exec ckan-dev /bin/sh -c "ckan -c /srv/app/ckan.ini generate extension --output-dir /srv/app/src_extensions"
![extension](https://user-images.githubusercontent.com/54408245/220623568-b4e074c7-6d07-4d27-ae29-35ce70961463.png)
```bash
docker compose -f docker-compose.dev.yml exec ckan-dev /bin/sh -c "ckan -c /srv/app/ckan.ini generate extension --output-dir /srv/app/src_extensions"
```

Then, answer the prompts to configure the plugin:

```bash
Extension's name [must begin 'ckanext-']: ckanext-newextension
Author's name []: Joe Bloggs
Author's email []: [email protected]
Your Github user or organization name []: joebloggs
Brief description of the project []: test creating a new extension
List of keywords (separated by spaces) [CKAN]: ckanext-newextension
Do you want to include code examples? [y/N]: y

Written: /srv/app/src_extensions/ckanext-newextension
```

The new extension files and directories are created in the `/srv/app/src_extensions/` folder in the running container. They will also exist in the local src/ directory as local `/src` directory is mounted as `/srv/app/src_extensions/` on the ckan container. You might need to change the owner of its folder to have the appropiate permissions.

#### Running HTTPS on development mode
#### Running HTTPS on development mode

Sometimes is useful to run your local development instance under HTTPS, for instance if you are using authentication extensions like [ckanext-saml2auth](https://github.com/keitaroinc/ckanext-saml2auth). To enable it, set the following in your `.env` file:

```
```
USE_HTTPS_FOR_DEV=true
```
```
```ini
USE_HTTPS_FOR_DEV=true
```

and update the site URL setting:

```
```
CKAN_SITE_URL=https://localhost:5000
```
```
```ini
CKAN_SITE_URL=https://localhost:5000
```

After recreating the `ckan-dev` container, you should be able to access CKAN at https://localhost:5000

Expand Down Expand Up @@ -327,7 +334,6 @@ ckan
├── setup
├── Dockerfile
└── Dockerfile.dev

```

> [!NOTE]
Expand All @@ -337,6 +343,36 @@ ckan
> * Shows any changes between the staging area and the repository:
> `git diff --staged [file]`

#### Applying patches in dev mode
To apply patches in development mode, you would need to follow these steps:

1. Ensure that your patches are placed in the [`ckan/patches`](/ckan/patches/) directory. The patches should be organized into subdirectories named after the package they are intended to patch (e.g., `ckan` or `ckanext-??`). Each patch file should end with the .patch extension.

For example, your directory structure might look like this:

```bash
ckan
├── patches
│ ├── ckan
│ │ ├── 01_datasets_per_page.patch
│ │ ├── 02_groups_per_page.patch
│ │ ├── 03_or_filters.patch
│ └── ckanext-harvest
│ └── 01_resubmit_objects.patch
├── setup
├── Dockerfile
└── Dockerfile.dev
```

2. Navigate to the [`/src`](/src/) directory.

3. Apply the patches using the patch command:

```bash
find /path/to/ckan/patches -name '*.patch' -exec patch -p1 < {} \;
```

This command will recursively search the `/path/to/ckan/patches` directory for files ending with `.patch` and apply them using the patch command. Replace `/path/to/ckan/patches` with the actual path to your `ckan/patches` directory.

## ckan-docker addons
### Debugging
Expand Down Expand Up @@ -547,8 +583,8 @@ PostgreSQL offers the command line tools [`pg_dump`](https://www.postgresql.org/
0 0 * * * /path/to/your/script/ckan_backup_custom.sh
```

> [!NOTE]
> Replace `/path/to/your/script` with the actual path to the `ckan_backup_custom.sh` script.
> [!NOTE]
> Replace `/path/to/your/script` with the actual path to the `ckan_backup_custom.sh` script.

8. Save and close the file.

Expand Down Expand Up @@ -605,89 +641,8 @@ If need to use a backup, restore it:
```bash
ckan -c ckan.ini user remove user_example`
```


### Docker. Basic commands
#### Linux post-install steps
[These optional post-installation procedures](https://docs.docker.com/engine/install/linux-postinstall/) shows you how to configure your Linux host machine to work better with Docker. For example, managing docker with [a non-root user](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user).

#### Configure Docker to start on boot
```bash
sudo systemctl enable docker

# To disable this behavior, use disable instead.
sudo systemctl disable docker
```


#### Clear all Docker unused objects (images, containers, networks, local volumes)
```bash
docker system prune # Clear all
docker system prune -a # Clear all (includes unused and dangling containers)

# By default, volumes are not removed to prevent important data from being deleted if there is currently no container using the volume. Use the `--volumes` flag when running the command to prune volumes: `docker system prune -a --volumes`

docker image prune # Clear unused images
docker container prune # Clear unused containers
docker volume prune # Clear unused volumes
docker network prune # Clear unused networks
```

### Docker Compose. Basic commands
More info about Docker Compose commands at [docker compose reference](https://docs.docker.com/compose/reference/).

```bash
# Basic. All containers or specific container: <container>
## Starts existing containers for a service.
docker compose start <container>

## Restarts existing containers/container for a service.
docker compose restart <container>

## Stops running containers without removing them.
docker compose stop <container>

## Pauses running containers of a service.
docker compose pause <container>

## Unpauses paused containers of a service.
docker compose unpause <container>

# Display the logs of a container. Is it possible to retrieve only the last n seconds or other
docker logs [--since 60s] <container> -f

## Lists containers.
docker compose ps

## Remove all docker compose project
docker compose rm <container>


# Build.
## Builds, (re)creates, starts, and attaches to containers for a service.
docker compose [-f <docker compose-file>] up

## Build & up all the containers.
docker compose [-f <docker compose-file>] up -d --build

## Build & up an specific container.
docker compose [-f <docker compose-file>] up -d --build <container>

## To avoid using a cache of the previous build while creating a new image.
docker compose [-f <docker compose-file>] build --no-cache

## Build a project with a specific Docker Compose prefix.
docker compose [-f <docker compose-file>] -p <my_project> up -d --build

## Log the build
docker compose build --no-cache &> docker_build.log


# Down
# Stops containers and removes containers, networks, volumes, and images created by up.
docker compose [-p <my_project>] down
```

For more information about Docker and Docker Compose's basic commands and post-installation procedures, see [Docker/Docker Compose Info](./doc/info_docker.md)

### Docker Compose. Configure a docker compose service to start on boot
To have Docker Compose run automatically when you reboot a machine, you can follow the steps below:
Expand Down
9 changes: 5 additions & 4 deletions apache/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ FROM httpd:2.4-alpine

ENV CKAN_PORT=5000
ENV PYCSW_PORT=8000
ENV PYCSW_CONTAINER_NAME=pycsw
ENV CKAN_CONTAINER_NAME=ckan
ENV PYCSW_COMPOSE_SERVICE=pycsw
ENV CKAN_COMPOSE_SERVICE=ckan
ENV CKAN_DEV_COMPOSE_SERVICE=ckan-dev
ENV APACHE_PORT=80
ENV APACHE_LOG_DIR=/var/log/apache
ENV APACHE_ROOT=/usr/local/apache2
Expand All @@ -12,8 +13,8 @@ ENV PROXY_SERVER_NAME=localhost

ENV PROXY_CKAN_LOCATION=/catalog
ENV PROXY_PYCSW_LOCATION=/csw
ENV PROXY_PYCSW_PROXY_PASS=http://${PYCSW_CONTAINER_NAME}:${PYCSW_PORT}
ENV PROXY_CKAN_PROXY_PASS=http://${CKAN_CONTAINER_NAME}:${CKAN_PORT}
ENV PROXY_PYCSW_PROXY_PASS=http://${PYCSW_COMPOSE_SERVICE}:${PYCSW_PORT}
ENV PROXY_CKAN_PROXY_PASS=http://${CKAN_COMPOSE_SERVICE}:${CKAN_PORT}

RUN mkdir -p ${APACHE_LOG_DIR}

Expand Down
80 changes: 80 additions & 0 deletions doc/info_docker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Docker. Basic commands
## Linux post-install steps
[These optional post-installation procedures](https://docs.docker.com/engine/install/linux-postinstall/) shows you how to configure your Linux host machine to work better with Docker. For example, managing docker with [a non-root user](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user).

### Configure Docker to start on boot
```bash
sudo systemctl enable docker

# To disable this behavior, use disable instead.
sudo systemctl disable docker
```

### Clear all Docker unused objects (images, containers, networks, local volumes)
```bash
docker system prune # Clear all
docker system prune -a # Clear all (includes unused and dangling containers)

# By default, volumes are not removed to prevent important data from being deleted if there is currently no container using the volume. Use the `--volumes` flag when running the command to prune volumes: `docker system prune -a --volumes`

docker image prune # Clear unused images
docker container prune # Clear unused containers
docker volume prune # Clear unused volumes
docker network prune # Clear unused networks
```

## Docker Compose. Basic commands
More info about Docker Compose commands at [docker compose reference](https://docs.docker.com/compose/reference/).

```bash
# Basic. All containers or specific container: <container>
## Starts existing containers for a service.
docker compose start <container>

## Restarts existing containers/container for a service.
docker compose restart <container>

## Stops running containers without removing them.
docker compose stop <container>

## Pauses running containers of a service.
docker compose pause <container>

## Unpauses paused containers of a service.
docker compose unpause <container>

# Display the logs of a container. Is it possible to retrieve only the last n seconds or other
docker logs [--since 60s] <container> -f

## Lists containers.
docker compose ps

## Remove all docker compose project
docker compose rm <container>


# Build.
## Builds, (re)creates, starts, and attaches to containers for a service.
docker compose [-f <docker compose-file>] up

## Build & up all the containers.
docker compose [-f <docker compose-file>] up -d --build

## Build & up an specific container.
docker compose [-f <docker compose-file>] up -d --build <container>

## To avoid using a cache of the previous build while creating a new image.
docker compose [-f <docker compose-file>] build --no-cache

## Build a project with a specific Docker Compose prefix.
docker compose [-f <docker compose-file>] -p <my_project> up -d --build

## Log the build
docker compose build --no-cache &> docker_build.log


# Down
# Stops containers and removes containers, networks, volumes, and images created by up.
docker compose [-p <my_project>] down
```

10 changes: 5 additions & 5 deletions docker-compose.apache.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ volumes:
ckan_logs:
pg_data:
solr_data:
pip_cache:
site_packages:


services:
apache:
Expand Down Expand Up @@ -47,12 +50,11 @@ services:
- db
- solr
- redis
ports:
- "0.0.0.0:${CKAN_PORT_HOST}:${CKAN_PORT}"
volumes:
- ckan_storage:/var/lib/ckan
- ckan_logs:/var/log
- /usr/lib/python3.9/site-packages
- pip_cache:/root/.cache/pip
- site_packages:/usr/lib/python3.9/site-packages
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "-qO", "/dev/null", "http://localhost:${CKAN_PORT}"]
Expand All @@ -73,8 +75,6 @@ services:
- ckannet
depends_on:
- ckan
ports:
- "0.0.0.0:${PYCSW_PORT_HOST}:${PYCSW_PORT}"
volumes:
- ./log:${APP_DIR}/log
- ./metadata:${APP_DIR}/metadata
Expand Down
Loading
Loading