FROM node:20-alpine AS frontend WORKDIR /app/frontend COPY frontend/package.json frontend/package-lock.json* ./ RUN npm install COPY frontend/ . RUN npm run build FROM golang:1.23-alpine AS backend WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN go build -o /markdownhub ./cmd/server RUN go build -o /mdsync ./cmd/mdsync FROM alpine:3.20 RUN apk add --no-cache ca-certificates WORKDIR /app COPY --from=backend /markdownhub /app/markdownhub COPY --from=backend /mdsync /app/mdsync COPY --from=frontend /app/frontend/dist /app/frontend/dist ENV MH_DATA_DIR=/app/data ENV MH_PORT=8080 EXPOSE 8080 VOLUME ["/app/data"] ENTRYPOINT ["/app/markdownhub"]