Skip to content

Commit

Permalink
Added a docker compose file for development
Browse files Browse the repository at this point in the history
* Added Makefile for quick start and stop
* Modified start-enketo.sh for dev with hardcode secrets, single redis config
* Modified start-postgres.sh to listen postgres14-upgrade even if data directory is absent
* Added instruction in README.md
  • Loading branch information
sadiqkhoja committed Nov 4, 2024
1 parent f7b89af commit c32828c
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 1 deletion.
11 changes: 11 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
.PHONY: dev
dev:
docker compose --profile central -f docker-compose.yml -f docker-compose.dev.yml up -d

.PHONY: upgrade-successful
upgrade-successful:
docker compose exec postgres14 touch /var/lib/odk/postgresql/14/.postgres14-upgrade-successful

.PHONY: stop
stop:
docker compose stop
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ In addition to the Backend and the Frontend, Central deploys services:
* Central relies on [pyxform-http](https://github.com/getodk/pyxform-http) for converting Forms from XLSForm. It generally shouldn't be needed in development but can be run locally.
* Central relies on [Enketo](https://github.com/enketo/enketo-express) for Web Form functionality. Enketo can be run locally and configured to work with Frontend and Backend in development by following [these instructions](https://github.com/getodk/central-frontend/blob/master/docs/enketo.md).

If you want to work on Central codebase and don't want to setup dependent services like Postgresql, Enketo, etc manually then you can run `make dev`, which will start those services as Docker containers. If you are setting up development environment for the first time, please run `make upgrade-successful` to skip the Postgresql upgrade.

Operations
----------

Expand Down
51 changes: 51 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Assumption: This file will be merged by `docker compose`
#
# What it does:
# Sets profiles for each service depending on whether that
# service is required for development of that particular application
# For Central be/fe development, we need postgres14, pyxform, enketo, redis_main
# For Enketo development, we need postgres14, service, nginx, redis_main
# 'none' profile is set for services that are not need for either
#
# depends_on of some services are reset using !reset custom yml tag
# nb: can't replace depends_on so we have removed all the values, ok for dev
services:
postgres14:
profiles:
- central
network_mode: host
postgres:
profiles:
- none
mail:
profiles:
- none
service:
profiles:
- none
nginx:
profiles:
- none
pyxform:
profiles:
- central
# changing port here - can't use `ports` mapping with host networking
command: ["gunicorn", "--bind", "0.0.0.0:5001", "--workers", "5", "--timeout", "600", "--max-requests", "1", "--max-requests-jitter", "3", "main:app()"]
network_mode: host
secrets:
profiles:
- none
enketo:
profiles:
- central
depends_on: !reset []
environment:
- ENV=DEV
network_mode: host
enketo_redis_main:
profiles:
- central
network_mode: host
enketo_redis_cache:
profiles:
- none
9 changes: 9 additions & 0 deletions files/enketo/start-enketo.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@
CONFIG_PATH=${ENKETO_SRC_DIR}/config/config.json
echo "generating enketo configuration..."

if [ "$ENV" = "DEV" ]; then
sed -i -e 's/enketo_redis_main/localhost/g' \
-e 's/enketo_redis_cache/localhost/g' \
-e 's/6380/6379/g' \
-e 's/${SECRET}/s0m3v3rys3cr3tk3y/g' \
-e 's/${LESS_SECRET}/this $3cr3t key is crackable/g' \
-e 's/${API_KEY}/enketorules/g' "$CONFIG_PATH.template"
fi

BASE_URL=$( [ "${HTTPS_PORT}" = 443 ] && echo https://"${DOMAIN}" || echo https://"${DOMAIN}":"${HTTPS_PORT}" ) \
SECRET=$(cat /etc/secrets/enketo-secret) \
LESS_SECRET=$(cat /etc/secrets/enketo-less-secret) \
Expand Down
2 changes: 1 addition & 1 deletion files/postgres14/start-postgres.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash -eu
set -o pipefail

flag_upgradeCompletedOk="$PGDATA/../.postgres14-upgrade-successful"
flag_upgradeCompletedOk=$(readlink -f -m "$PGDATA/../.postgres14-upgrade-successful")

logPrefix="$(basename "$0")"
log() {
Expand Down

0 comments on commit c32828c

Please sign in to comment.