* 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.
81 lines
1.8 KiB
YAML
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: {}
|