diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..0ae6640 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,37 @@ +# Build stage +FROM golang:1.25-alpine AS builder + +WORKDIR /app + +# Install build dependencies +RUN apk add --no-cache git + +# Copy go mod and sum files +COPY go.mod go.sum ./ + +# Download all dependencies +RUN go mod download + +# Copy the source code +COPY . . + +# Build the application +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main ./cmd/main.go + +# Final stage +FROM alpine:latest + +WORKDIR /app + +# Install ca-certificates for HTTPS +RUN apk --no-cache add ca-certificates tzdata + +# Copy binary from builder +COPY --from=builder /app/main . +COPY --from=builder /app/.env.example . + +# Expose port +EXPOSE 8080 + +# Command to run +CMD ["./main"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fc6e7b2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +services: + app: + container_name: gpt-manager + build: ./backend + ports: + - "${EXPOSE_PORT}:8080" + depends_on: + - db + env_file: + - .env + environment: + - PORT=${PORT} + restart: unless-stopped + + db: + container_name: gpt-manager-db + image: postgres:16-alpine + restart: always + environment: + - POSTGRES_USER=${DB_USER} + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_DB=${DB_NAME} + volumes: + - postgres_data:/var/lib/postgresql/data + +volumes: + postgres_data: