Ctrl K
ComunidadGuías…

Dockerfile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# 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"]