wannpassts/Dockerfile

46 lines
2.2 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ──────────────────────────────────────────────────────────────────────
# WannPassts Multi-Stage-Build: Frontend + Backend in einem Image
# Bauen: docker build -t wannpassts .
# Starten: docker run -p 8080:8080 -v wannpassts-data:/data wannpassts
# ──────────────────────────────────────────────────────────────────────
# ── Stage 1: Frontend bauen ───────────────────────────────────────────
FROM node:22-alpine AS frontend
WORKDIR /build
# Dependencies zuerst (besserer Layer-Cache)
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend/ ./
RUN npm run build
# ── Stage 2: Backend bauen (CGO-frei → statisches Binary) ────────────
# go.mod verlangt Go >= 1.25 (modernc.org/sqlite)
FROM golang:1.25-alpine AS backend
WORKDIR /build
COPY backend/go.mod backend/go.sum ./
RUN go mod download
COPY backend/ ./
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/wannpassts ./cmd/server
# ── Stage 3: Laufzeit ─────────────────────────────────────────────────
FROM alpine:3.20
# ca-certificates: nötig für HTTPS zu Google/CalDAV/ICS-Servern
RUN apk add --no-cache ca-certificates tzdata \
&& adduser -D -H -u 1000 app \
&& mkdir -p /data && chown -R app:app /data
WORKDIR /app
COPY --from=backend /out/wannpassts ./wannpassts
COPY --from=frontend /build/dist ./dist
USER app
ENV PORT=8080 \
DB_PATH=/data/wannpassts.db \
STATIC_DIR=/app/dist \
APP_URL=http://localhost:8080
# FRONTEND_URL ist bewusst nicht gesetzt: Ohne Wert leiten Callbacks auf APP_URL.
# Bei getrenntem Frontend-Host einfach -e FRONTEND_URL=https://… setzen.
VOLUME /data
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
CMD wget -qO- http://127.0.0.1:8080/api/health || exit 1
ENTRYPOINT ["/app/wannpassts"]