Files
sbv/Dockerfile
T
2025-11-11 17:25:14 -07:00

77 lines
1.7 KiB
Docker

# Stage 1: Build frontend
FROM node:22-alpine AS frontend-builder
WORKDIR /app/frontend
# Copy frontend package files
COPY frontend/package*.json ./
# Install dependencies
RUN npm ci
# Copy frontend source
COPY frontend/ ./
# Build frontend
RUN npm run build
# Stage 2: Build backend
FROM golang:bookworm AS backend-builder
WORKDIR /app
# Install build dependencies for libheif and SQLite FTS5
# Using bookworm-backports to get a newer version of libheif
RUN echo "deb http://deb.debian.org/debian bookworm-backports main" >> /etc/apt/sources.list && \
apt-get update && apt-get install -y \
build-essential \
&& apt-get install -y -t bookworm-backports libheif-dev \
&& rm -rf /var/lib/apt/lists/*
# Copy go mod files
COPY go.mod go.sum ./
# Download dependencies
RUN go mod download
# Copy backend source
COPY *.go ./
COPY internal/*.go internal/
# Build with FTS5 support
RUN go build -tags "fts5 heic" -o sbv .
# Stage 3: Final runtime image
FROM debian:bookworm-slim
WORKDIR /app
# Install runtime dependencies
# Using bookworm-backports to get matching runtime library
RUN echo "deb http://deb.debian.org/debian bookworm-backports main" >> /etc/apt/sources.list && \
apt-get update && apt-get install -y \
ca-certificates \
wget \
ffmpeg \
&& apt-get install -y -t bookworm-backports libheif1 \
&& rm -rf /var/lib/apt/lists/*
# Copy backend binary
COPY --from=backend-builder /app/sbv .
# Copy frontend build
COPY --from=frontend-builder /app/frontend/dist ./frontend/dist
# Create data directory for database
RUN mkdir -p /data
# Set environment variables
ENV PORT=8081
ENV DB_PATH_PREFIX=/data
# Expose port
EXPOSE 8081
# Run the application
CMD ["./sbv"]