school-timetracker/Dockerfile
2025-11-05 14:15:38 +01:00

56 lines
1 KiB
Docker

# Build stage for Elm frontend
FROM node:25-alpine AS elm-build
WORKDIR /frontend
# Install Elm
RUN npm install -g elm@latest-0.19.1
# Copy Elm files
COPY frontend/elm.json .
COPY frontend/src ./src
# Build Elm app
RUN elm make src/Main.elm --optimize --output=elm.js
# Build stage for Go backend
FROM golang:1.25.3-alpine AS go-build
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 .
# Final stage
FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata
WORKDIR /root/
# Copy Go binary from build stage
COPY --from=go-build /app/main .
# 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
ENV DB_PATH=/data/timetracking.db
EXPOSE 8080
CMD ["./main"]