diff --git a/docker/docker-compose-dev.yaml b/docker/docker-compose-dev.yaml new file mode 100644 index 0000000..d87a21e --- /dev/null +++ b/docker/docker-compose-dev.yaml @@ -0,0 +1,7 @@ +name: event-demo-dev +include: + - path: + - parts/docker-compose-external.yaml + - parts/docker-compose-tools.yaml + - parts/docker-compose-traefik.yaml + - envs/docker-compose-dev.yaml diff --git a/docker/docker-compose-prod.yaml b/docker/docker-compose-prod.yaml new file mode 100644 index 0000000..77b2fc4 --- /dev/null +++ b/docker/docker-compose-prod.yaml @@ -0,0 +1,8 @@ +name: event-demo-prod +include: + - path: + - parts/docker-compose-external.yaml + - parts/docker-compose-tools.yaml + - parts/docker-compose-app.yaml + - parts/docker-compose-traefik.yaml + - envs/docker-compose-prod.yaml diff --git a/docker/docker-compose-test.yaml b/docker/docker-compose-test.yaml new file mode 100644 index 0000000..8bf798f --- /dev/null +++ b/docker/docker-compose-test.yaml @@ -0,0 +1,5 @@ +name: event-demo-test +include: + - path: + - parts/docker-compose-external.yaml + - parts/docker-compose-port.yaml \ No newline at end of file diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml deleted file mode 100644 index cfbf42b..0000000 --- a/docker/docker-compose.yaml +++ /dev/null @@ -1,105 +0,0 @@ -name: event-demo -services: - traefik: - image: traefik:3.3.4 - container_name: "traefik" - command: - - "--api.insecure=true" - - "--api.dashboard=true" - - "--providers.docker=true" - - "--log.level=DEBUG" - ports: - - "80:80" - volumes: - - "/var/run/docker.sock:/var/run/docker.sock:ro" - labels: - - "traefik.enable=true" - - "traefik.http.routers.api.rule=Host(`dashboard.traefik.me`)" - - "traefik.http.services.api.loadbalancer.server.port=8080" - - "traefik.http.routers.api.service=api@internal" - - "traefik.http.routers.api.middlewares=api-auth" - - "traefik.http.middlewares.api-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/" # test:test - - redis: - image: redis/redis-stack:7.4.0-v3 - ports: - - "6379:6379" - healthcheck: - test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ] - volumes: - - redis_data:/data - - redisinsight_data:/redisinsight - labels: - - "traefik.http.routers.redis.rule=Host(`redis.traefik.me`)" - - "traefik.http.services.redis.loadbalancer.server.port=8001" - - flyway: - image: flyway/flyway - container_name: "flyway" - command: migrate - depends_on: - postgresql: - condition: service_healthy - volumes: - - ../migrations/events:/flyway/sql - - ./flyway.conf:/flyway/conf/flyway.conf - restart: no - - postgresql: - image: postgres:17.4 - container_name: "postgresql" - ports: - - "5432:5432" - environment: - POSTGRES_PASSWORD_FILE: /run/secrets/postgresql_password - POSTGRES_USER: event-demo - secrets: - - postgresql_password - healthcheck: - test: ["CMD-SHELL", "sh -c 'pg_isready -U event-demo'"] - interval: 1s - timeout: 5s - retries: 10 - volumes: - - postgresql_data:/var/lib/postgresql/data - - pgadmin: - image: dpage/pgadmin4 - container_name: "pgadmin" - environment: - PGADMIN_DEFAULT_EMAIL: $PGADMIN_DEFAULT_EMAIL - PGADMIN_DEFAULT_PASSWORD_FILE: /run/secrets/pgadmin_password - secrets: - - pgadmin_password - volumes: - - pgadmin_data:/var/lib/pgadmin - labels: - - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.traefik.me`)" - - "traefik.http.services.pgadmin.loadbalancer.server.port=80" - - app: - build: - context: ../ - dockerfile: docker/Dockerfile - ports: - - "8080:8080" - depends_on: - flyway: - condition: service_completed_successfully - postgresql: - condition: service_healthy - labels: - - "traefik.http.routers.app.rule=Host(`api.traefik.me`)" - - "traefik.http.services.app.loadbalancer.server.port=8080" - -secrets: - pgadmin_password: - file: pgadmin.secret - postgresql_password: - file: postgresql.secret - -volumes: - redis_data: - redisinsight_data: - postgresql_data: - pgadmin_data: \ No newline at end of file diff --git a/docker/envs/docker-compose-dev.yaml b/docker/envs/docker-compose-dev.yaml new file mode 100644 index 0000000..a6e06f1 --- /dev/null +++ b/docker/envs/docker-compose-dev.yaml @@ -0,0 +1,14 @@ +services: + traefik: + ports: + - "81:80" + + redis: + labels: + - "traefik.http.routers.redis.rule=Host(`redis.traefik.me`)" + - "traefik.http.services.redis.loadbalancer.server.port=8001" + + pgadmin: + labels: + - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.traefik.me`)" + - "traefik.http.services.pgadmin.loadbalancer.server.port=80" diff --git a/docker/envs/docker-compose-prod.yaml b/docker/envs/docker-compose-prod.yaml new file mode 100644 index 0000000..96fe1b1 --- /dev/null +++ b/docker/envs/docker-compose-prod.yaml @@ -0,0 +1,14 @@ +services: + traefik: + ports: + - "80:80" + + redis: + labels: + - "traefik.http.routers.redis.rule=Host(`redis.traefik.me`)" + - "traefik.http.services.redis.loadbalancer.server.port=8001" + + pgadmin: + labels: + - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.traefik.me`)" + - "traefik.http.services.pgadmin.loadbalancer.server.port=80" diff --git a/docker/parts/docker-compose-app.yaml b/docker/parts/docker-compose-app.yaml new file mode 100644 index 0000000..1a09e0e --- /dev/null +++ b/docker/parts/docker-compose-app.yaml @@ -0,0 +1,10 @@ +services: + app: + build: + context: ../.. + dockerfile: docker/Dockerfile + depends_on: + flyway: + condition: service_completed_successfully + postgresql: + condition: service_healthy diff --git a/docker/parts/docker-compose-external.yaml b/docker/parts/docker-compose-external.yaml new file mode 100644 index 0000000..7f4ec3b --- /dev/null +++ b/docker/parts/docker-compose-external.yaml @@ -0,0 +1,43 @@ +services: + redis: + image: redis/redis-stack:7.4.0-v3 + healthcheck: + test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ] + volumes: + - redis_data:/data + - redisinsight_data:/redisinsight + + flyway: + image: flyway/flyway + command: migrate + depends_on: + postgresql: + condition: service_healthy + volumes: + - ../../migrations/events:/flyway/sql + - ../flyway.conf:/flyway/conf/flyway.conf + restart: no + + postgresql: + image: postgres:17.4 + environment: + POSTGRES_PASSWORD_FILE: /run/secrets/postgresql_password + POSTGRES_USER: event-demo + secrets: + - postgresql_password + healthcheck: + test: ["CMD-SHELL", "sh -c 'pg_isready -U event-demo'"] + interval: 1s + timeout: 5s + retries: 10 + volumes: + - postgresql_data:/var/lib/postgresql/data + +secrets: + postgresql_password: + file: ../postgresql.secret + +volumes: + redis_data: + redisinsight_data: + postgresql_data: \ No newline at end of file diff --git a/docker/parts/docker-compose-port.yaml b/docker/parts/docker-compose-port.yaml new file mode 100644 index 0000000..8c09a09 --- /dev/null +++ b/docker/parts/docker-compose-port.yaml @@ -0,0 +1,8 @@ +services: + redis: + ports: + - "6379:6379" + + postgresql: + ports: + - "5432:5432" diff --git a/docker/parts/docker-compose-tools.yaml b/docker/parts/docker-compose-tools.yaml new file mode 100644 index 0000000..a75b22e --- /dev/null +++ b/docker/parts/docker-compose-tools.yaml @@ -0,0 +1,17 @@ +services: + pgadmin: + image: dpage/pgadmin4 + environment: + PGADMIN_DEFAULT_EMAIL: $PGADMIN_DEFAULT_EMAIL + PGADMIN_DEFAULT_PASSWORD_FILE: /run/secrets/pgadmin_password + secrets: + - pgadmin_password + volumes: + - pgadmin_data:/var/lib/pgadmin + +secrets: + pgadmin_password: + file: ../pgadmin.secret + +volumes: + pgadmin_data: \ No newline at end of file diff --git a/docker/parts/docker-compose-traefik.yaml b/docker/parts/docker-compose-traefik.yaml new file mode 100644 index 0000000..ddcecdf --- /dev/null +++ b/docker/parts/docker-compose-traefik.yaml @@ -0,0 +1,17 @@ +services: + traefik: + image: traefik:3.3.4 + command: + - "--api.insecure=true" + - "--api.dashboard=true" + - "--providers.docker=true" + - "--log.level=DEBUG" + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:ro" + labels: + - "traefik.enable=true" + - "traefik.http.routers.api.rule=Host(`dashboard.traefik.me`)" + - "traefik.http.services.api.loadbalancer.server.port=8080" + - "traefik.http.routers.api.service=api@internal" + - "traefik.http.routers.api.middlewares=api-auth" + - "traefik.http.middlewares.api-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/" # test:test