diff --git a/posse-party-stack.yml b/posse-party-stack.yml new file mode 100644 index 0000000..bc2d4c0 --- /dev/null +++ b/posse-party-stack.yml @@ -0,0 +1,113 @@ +version: "3.8" + +services: + db: + image: postgres:17-alpine + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: posse_party + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 + volumes: + - db_data:/var/lib/postgresql/data + networks: + - posseparty-network + deploy: + placement: + constraints: + - node.labels.type == nas + restart_policy: + condition: on-failure + + migrate: + image: ghcr.io/searlsco/posse_party:latest + environment: + DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD}@db:5432/posse_party + RAILS_ENV: production + SECRET_KEY_BASE: ${SECRET_KEY_BASE} + command: ["./script/release"] + networks: + - posseparty-network + deploy: + placement: + constraints: + - node.labels.type == nas + restart_policy: + condition: none + delay: 0s + max_attempts: 1 + depends_on: + - db + + web: + image: ghcr.io/searlsco/posse_party:latest + environment: + DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD}@db:5432/posse_party + RAILS_ENV: production + APP_HOST: ${APP_HOST:-posseparty.bendtstudio.com} + SECRET_KEY_BASE: ${SECRET_KEY_BASE} + FORCE_SSL: "false" + command: ["./script/server"] + healthcheck: + test: ["CMD-SHELL", "curl -fsS http://localhost:3000/up || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 60s + networks: + - posseparty-network + - dokploy-network + deploy: + placement: + constraints: + - node.labels.type == nas + restart_policy: + condition: on-failure + labels: + - traefik.enable=true + - traefik.http.routers.posseparty-web.rule=Host(`${APP_HOST:-posseparty.bendtstudio.com}`) + - traefik.http.routers.posseparty-web.entrypoints=web + - traefik.http.services.posseparty-web.loadbalancer.server.port=3000 + - traefik.http.routers.posseparty-web.service=posseparty-web + - traefik.http.routers.posseparty-web.middlewares=redirect-to-https@file + - traefik.http.routers.posseparty-websecure.rule=Host(`${APP_HOST:-posseparty.bendtstudio.com}`) + - traefik.http.routers.posseparty-websecure.entrypoints=websecure + - traefik.http.services.posseparty-websecure.loadbalancer.server.port=3000 + - traefik.http.routers.posseparty-websecure.service=posseparty-websecure + - traefik.http.routers.posseparty-websecure.tls.certresolver=letsencrypt + depends_on: + - db + - migrate + + worker: + image: ghcr.io/searlsco/posse_party:latest + environment: + DATABASE_URL: postgres://postgres:${POSTGRES_PASSWORD}@db:5432/posse_party + RAILS_ENV: production + APP_HOST: ${APP_HOST:-posseparty.bendtstudio.com} + SECRET_KEY_BASE: ${SECRET_KEY_BASE} + command: ["./script/worker"] + networks: + - posseparty-network + deploy: + placement: + constraints: + - node.labels.type == nas + restart_policy: + condition: on-failure + depends_on: + - db + - migrate + +volumes: + db_data: + +networks: + posseparty-network: + driver: overlay + dokploy-network: + external: true