diff --git a/.gitignore b/.gitignore index 15d0409..4eb127c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .agents -.DS_Store \ No newline at end of file +.DS_Store +.vscode \ No newline at end of file diff --git a/deploy/docker-compose.prod.yml b/deploy/docker-compose.prod.yml index 3e9af65..2fd46ae 100644 --- a/deploy/docker-compose.prod.yml +++ b/deploy/docker-compose.prod.yml @@ -1,4 +1,38 @@ services: + traefik: + image: traefik:v3.3 + container_name: bee-task-traefik + restart: unless-stopped + command: + - "--api.insecure=true" + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--entrypoints.web.address=:80" + ports: + - "80:80" + - "8080:8080" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + depends_on: + - frontend + - backend + + postgres: + image: postgres:18.3 + container_name: bee-task-postgres + restart: unless-stopped + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB:-beetask} + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] + interval: 10s + timeout: 5s + retries: 5 + backend: image: ${BACKEND_IMAGE} restart: unless-stopped @@ -9,13 +43,27 @@ services: MP_JWT_VERIFY_ISSUER: ${MP_JWT_VERIFY_ISSUER} SMALLRYE_JWT_SIGN_KEY_LOCATION: ${SMALLRYE_JWT_SIGN_KEY_LOCATION} MP_JWT_VERIFY_PUBLICKEY_LOCATION: ${MP_JWT_VERIFY_PUBLICKEY_LOCATION} - ports: - - "8081:8081" + depends_on: + postgres: + condition: service_healthy + labels: + - "traefik.enable=true" + - "traefik.http.routers.backend.rule=PathPrefix(`/backend`)" + - "traefik.http.routers.backend.entrypoints=web" + - "traefik.http.middlewares.backend-strip.stripprefix.prefixes=/backend" + - "traefik.http.routers.backend.middlewares=backend-strip" + - "traefik.http.services.backend.loadbalancer.server.port=8081" frontend: image: ${FRONTEND_IMAGE} restart: unless-stopped depends_on: - backend - ports: - - "3000:80" + labels: + - "traefik.enable=true" + - "traefik.http.routers.frontend.rule=PathPrefix(`/`)" + - "traefik.http.routers.frontend.entrypoints=web" + - "traefik.http.services.frontend.loadbalancer.server.port=80" + +volumes: + postgres_data: diff --git a/docker-compose.yml b/docker-compose.yml index e11d0fb..b322c01 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,21 @@ services: + traefik: + image: traefik:v3.3 + container_name: bee-task-traefik + command: + - "--api.insecure=true" + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--entrypoints.web.address=:80" + ports: + - "80:80" + - "8080:8080" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + depends_on: + - frontend + - backend + postgres: image: postgres:18.3 container_name: bee-task-postgres @@ -17,5 +34,43 @@ services: timeout: 5s retries: 5 + backend: + build: + context: ./backend + container_name: bee-task-backend + restart: unless-stopped + environment: + DB_USER: beetask + DB_PASSWORD: beetask + DB_URL: jdbc:postgresql://postgres:5432/beetask + MP_JWT_VERIFY_ISSUER: https://beetech.net + SMALLRYE_JWT_SIGN_KEY_LOCATION: /app/privateKey.pem + MP_JWT_VERIFY_PUBLICKEY_LOCATION: /app/publicKey.pem + depends_on: + postgres: + condition: service_healthy + labels: + - "traefik.enable=true" + - "traefik.http.routers.backend.rule=PathPrefix(`/backend`)" + - "traefik.http.routers.backend.entrypoints=web" + - "traefik.http.middlewares.backend-strip.stripprefix.prefixes=/backend" + - "traefik.http.routers.backend.middlewares=backend-strip" + - "traefik.http.services.backend.loadbalancer.server.port=8081" + + frontend: + build: + context: ./frontend + args: + VITE_API_URL: /backend + container_name: bee-task-frontend + restart: unless-stopped + depends_on: + - backend + labels: + - "traefik.enable=true" + - "traefik.http.routers.frontend.rule=PathPrefix(`/`)" + - "traefik.http.routers.frontend.entrypoints=web" + - "traefik.http.services.frontend.loadbalancer.server.port=80" + volumes: postgres_data: