ex_trainer/docker-compose.yml
Joao P Dubas b5eca5326f
feat: configure dnscluster to allow multi-node
* Configure `docker-compose` to scale at least 2 nodes.
* Add script to start service with proper naming
* Create custom resolver.
  * This is not strictly necessary.
2024-09-20 21:55:51 +00:00

81 lines
1.8 KiB
YAML

---
services:
db:
image: 'postgres:16.4-alpine'
hostname: &db_host db
init: true
environment:
POSTGRES_USER: &db_user postgres
POSTGRES_PASSWORD: &db_pass postgres
POSTGRES_DB: &db_name postgres
volumes:
- './priv/docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql'
- 'db_data:/var/lib/postgresql/data'
restart: unless-stopped
app:
image: &app_image 'joaodubas/ex_trainer:${EX_TRAINER_TAG:-dev}'
build:
target: builder
context: .
args:
BUILD_MIX_ENV: dev
hostname: app
depends_on:
- db
init: true
develop:
watch:
- path: ./
ignore:
- ./build/
- ./deps/
target: /opt/app
action: sync
- path: ./config/
target: /opt/app
action: sync+restart
- path: ./lib/wabanex/application.ex
target: /opt/app
action: sync+restart
- path: ./mix.exs
target: /opt/app
action: sync+restart
- path: ./mix.lock
action: rebuild
environment: &app_environment
DNS_CLUSTER_QUERY: *app_host
POSTGRES_HOST: *db_host
POSTGRES_USER: *db_user
POSTGRES_PASS: *db_pass
POSTGRES_NAME: wabanex_dev
working_dir: /opt/app
restart: unless-stopped
scale: 2
entrypoint: sleep
command: infinity
db_setup:
image: *app_image
depends_on:
- db
profiles:
- setup
environment: *app_environment
restart: 'no'
command: |
mix ecto.setup \
&& MIX_ENV=test mix ecto.setup
db_migrate:
image: *app_image
depends_on:
- db
profiles:
- migrate
environment: *app_environment
restart: 'no'
command: |
mix ecto.migrate \
&& MIX_ENV=test mix.ecto.migrate
volumes:
db_data: {}