feat: update Dockerfile and docker-compose to work with new svelte frontend

This commit is contained in:
Patryk Hegenberg 2026-01-15 15:43:03 +01:00
parent e719f4565f
commit 59b37dc995
2 changed files with 21 additions and 43 deletions

View file

@ -1,51 +1,34 @@
# Build stage for Elm frontend
FROM node:25-alpine AS elm-build
FROM node:22-alpine AS frontend-builder
WORKDIR /frontend
WORKDIR /src/frontend
# Install Elm
RUN npm install -g elm@latest-0.19.1
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
# Copy Elm files
COPY frontend/elm.json .
COPY frontend/src ./src
COPY frontend/ ./
RUN npm run build
# Build Elm app
RUN elm make src/Main.elm --optimize --output=elm.js
FROM golang:1.25.5-alpine AS backend-builder
# Build stage for Go backend
FROM golang:1.25.3-alpine AS go-build
WORKDIR /src/backend
WORKDIR /app
# Copy go mod files
COPY backend/go.mod backend/go.sum ./
RUN go mod download
# Copy backend source
COPY backend/ ./
# Build Go binary
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
COPY --from=frontend-builder /src/frontend/dist ./dist
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o timetracker .
# Final stage
FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata
WORKDIR /root/
WORKDIR /app
# Copy Go binary from build stage
COPY --from=go-build /app/main .
COPY --from=backend-builder /src/backend/timetracker .
# Create static directory
RUN mkdir -p /root/static
# Copy Elm build artifacts
COPY --from=elm-build /frontend/elm.js /root/static/
COPY frontend/public/index.html /root/static/
# Create volume for database
VOLUME ["/data"]
ENV PORT=8080
@ -53,4 +36,4 @@ ENV DB_PATH=/data/timetracking.db
EXPOSE 8080
CMD ["./main"]
CMD ["./timetracker"]

View file

@ -2,23 +2,18 @@ services:
timetracking:
build: .
container_name: school-timetracking
restart: unless-stopped
ports:
- "8080:8080"
environment:
- PORT=8080
- ENVIRONMENT=production
- DB_PATH=/data/timetracking.db
- JWT_SECRET=your-default-secret-change-me
- TZ=Europe/Berlin # Optional: Zeitzone
- JWT_SECRET=change-me-to-something-secure-and-long
- TZ=Europe/Berlin
- CORS_ALLOWED_ORIGINS=http://localhost:8080
volumes:
- timetracking-data:/data
restart: unless-stopped
networks:
- timetracking-net
- timetracking_data:/data
volumes:
timetracking-data:
driver: local
networks:
timetracking-net:
driver: bridge
timetracking_data: