Dockerfile
Rama main · réplica de lectura del repositorio original.
# Build stage
FROM golang:1.24 AS builder
# Install build dependencies
RUN apt-get update && apt-get install -y \
gcc \
libc6-dev \
libsqlite3-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Copy go mod files first for better caching
COPY go.mod go.sum ./
RUN go mod download && go mod verify
# Copy only necessary source directories
COPY cmd/ ./cmd/
COPY internal/ ./internal/
# Build arguments for version info (should be provided by CI/CD)
ARG GIT_TAG=dev
ARG GIT_COMMIT=unknown
# Build the application with optimizations and version info
# Use build args directly - no need for .git directory
RUN CGO_ENABLED=1 GOOS=linux go build \
-ldflags="-w -s -X 'subtrackr/internal/version.Version=${GIT_TAG}' -X 'subtrackr/internal/version.GitCommit=${GIT_COMMIT}'" \
-o subtrackr ./cmd/server
# Build the MCP server binary
RUN CGO_ENABLED=1 GOOS=linux go build \
-ldflags="-w -s -X 'subtrackr/internal/version.Version=${GIT_TAG}' -X 'subtrackr/internal/version.GitCommit=${GIT_COMMIT}'" \
-o subtrackr-mcp ./cmd/mcp
# Final stage
FROM debian:bookworm-slim
# Install runtime dependencies in a single layer
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
curl \
sqlite3 \
tzdata \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /app/data
WORKDIR /app
# Copy the binaries from builder
COPY --from=builder /app/subtrackr .
COPY --from=builder /app/subtrackr-mcp .
# Copy templates and static assets
COPY templates/ ./templates/
COPY web/ ./web/
# Expose port
EXPOSE 8080
# Set environment variables
ENV GIN_MODE=release
ENV DATABASE_PATH=/app/data/subtrackr.db
# Healthcheck to verify the application is running and database is accessible
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8080/healthz || exit 1
# Run the application
CMD ["./subtrackr"]