Skip to content

Commit

Permalink
Add dev docker-compose file to manage supporting services (#525)
Browse files Browse the repository at this point in the history
* Added a docker compose file for development
* Added Makefile for quick start and stop
* Added instruction in README.md
  • Loading branch information
sadiqkhoja authored Dec 20, 2024
1 parent 477e4b0 commit 26dc362
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 0 deletions.
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
docker-compose-dev := docker compose --profile central -f docker-compose.yml -f docker-compose.dev.yml

.PHONY: dev
dev:
$(docker-compose-dev) up -d

.PHONY: stop
stop:
$(docker-compose-dev) stop
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ 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. With this setup you would need a local domain name, `central-dev` is a good choice. Following are the places where you need to add this:

* Set `DOMAIN=central-dev` in .env file.
* Add an entry in your `/etc/hosts` file for `127.0.0.1 central-dev`.
* Create `local.json` in central-backend directory and set value of default.env.domain to `http://central-dev:8989`

Operations
----------

Expand Down
62 changes: 62 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# 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 Central development or not.
#
# 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
ports:
- 5432:5432
postgres:
profiles:
- central
image: debian:bullseye
command: /bin/sh -c 'mkdir -p /var/lib/postgresql/14/data && touch /var/lib/postgresql/14/.postgres14-upgrade-successful'
mail:
profiles:
- none
service:
profiles:
- none
nginx:
profiles:
- none
pyxform:
profiles:
- central
ports:
- 5001:80
secrets:
profiles:
- central
volumes:
- dev_secrets:/etc/secrets
working_dir: /etc/secrets
command: /bin/sh -c 'echo "s0m3v3rys3cr3tk3y" > enketo-secret && echo "this $3cr3t key is crackable" > enketo-less-secret && echo "enketorules" > enketo-api-key'
enketo:
profiles:
- central
volumes:
- dev_secrets:/etc/secrets
depends_on: !override
- secrets
- enketo_redis_main
environment:
- ENV=DEV
extra_hosts:
- "${DOMAIN}:host-gateway"
ports:
- 8005:8005
enketo_redis_main:
profiles:
- central
enketo_redis_cache:
profiles:
- central
volumes:
dev_secrets:

0 comments on commit 26dc362

Please sign in to comment.