From 862368f1dfa6fd9ef7d20798cf1d3c7561e6f487 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 21 Jan 2026 13:37:34 +0100 Subject: [PATCH] [FEAT] Docker compose --- .dockerignore | 29 +++++++++++++++++++++++++++++ Dockerfile | 38 ++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 24 ++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..30469ad --- /dev/null +++ b/.dockerignore @@ -0,0 +1,29 @@ +# Git +.git +.gitignore + +# IDE +.idea +*.iml + +# Build artifacts +dist/ +*.exe +*.dll +*.so +*.dylib + +# Environment +.env + +# Uploads (will be mounted as volume) +uploads/ + +# Documentation +*.md + +# Docker files (not needed in context) +docker-compose*.yml + +# macOS +.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..19e24b4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# Build stage +FROM golang:1.24-alpine AS builder + +WORKDIR /app + +# Install git for fetching dependencies +RUN apk add --no-cache git + +# Copy go mod files first for better caching +COPY go.mod go.sum ./ +RUN go mod download + +# Copy source code +COPY . . + +# Build the binary +RUN CGO_ENABLED=0 GOOS=linux go build -o fitra-backend . + +# Runtime stage +FROM alpine:latest + +WORKDIR /app + +# Copy the binary from builder +COPY --from=builder /app/fitra-backend . + +# Create uploads directory +RUN mkdir -p /app/uploads + +# Expose port +EXPOSE 8080 + +# Set environment variables +ENV GIN_MODE=release +ENV PORT=8080 + +# Run the binary +CMD ["./fitra-backend"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..81bdb9c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +services: + fitra-backend: + build: + context: . + dockerfile: Dockerfile + container_name: fitra-backend + restart: unless-stopped + ports: + - "8080:8080" + volumes: + - fitra-uploads:/app/uploads + environment: + - PORT=8080 + - GIN_MODE=release + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 10s + +volumes: + fitra-uploads: + driver: local