diff --git a/trading_assistant_api/services/user/Dockerfile b/trading_assistant_api/services/user/Dockerfile new file mode 100644 index 0000000..6fce193 --- /dev/null +++ b/trading_assistant_api/services/user/Dockerfile @@ -0,0 +1,21 @@ +# syntax=docker/dockerfile:1 + +FROM golang:1.25.7-alpine3.23 AS builder +WORKDIR /workspace +RUN apk add --no-cache git + +# copy monorepo workspace and modules needed for user service +COPY go.work . +COPY common ./common +COPY services/user ./services/user + +# download deps and build binary +RUN cd services/user && go mod download +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /workspace/bin/user-service ./services/user + +FROM alpine:3.19 +RUN adduser -D -u 10001 app +USER app +COPY --from=builder /workspace/bin/user-service /usr/local/bin/user-service +EXPOSE 8080 +ENTRYPOINT ["/usr/local/bin/user-service"] diff --git a/trading_assistant_api/services/user/docker-compose.yml b/trading_assistant_api/services/user/docker-compose.yml new file mode 100644 index 0000000..cd4d309 --- /dev/null +++ b/trading_assistant_api/services/user/docker-compose.yml @@ -0,0 +1,44 @@ +version: "3.9" + +services: + postgres: + image: postgres:18.1-alpine + container_name: user_postgres + environment: + POSTGRES_USER: app + POSTGRES_PASSWORD: app123 + POSTGRES_DB: appdb + ports: + - "5432:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U app -d appdb"] + interval: 5s + timeout: 5s + retries: 20 + volumes: + - pgdata:/var/lib/postgresql/data + - ./db/schema.sql:/docker-entrypoint-initdb.d/10_user_schema.sql:ro + + user: + build: + context: ../.. + dockerfile: services/user/Dockerfile + container_name: user_service + environment: + PG_HOST: postgres + PG_PORT: "5432" + PG_USER: app + PG_PASSWORD: app123 + PG_DBNAME: appdb + PG_SSLMODE: disable + MIGRATE_ON_START: "0" + PORT: "8080" + ports: + - "8080:8080" + depends_on: + postgres: + condition: service_healthy + restart: unless-stopped + +volumes: + pgdata: