Files
2026-05-07 10:17:07 +02:00

58 lines
1.6 KiB
Docker

# Build stage for frontend
FROM node:22-alpine AS frontend-builder
WORKDIR /app
COPY frontend/package.json frontend/package-lock.json* ./frontend/
WORKDIR /app/frontend
RUN npm ci
WORKDIR /app
COPY frontend ./frontend
WORKDIR /app/frontend
RUN npm run build
# Build stage for backend
FROM golang:1.26-alpine AS backend-builder
WORKDIR /src
RUN apk add --no-cache git ca-certificates
COPY backend/go.mod backend/go.sum* ./backend/
WORKDIR /src/backend
RUN go mod download
WORKDIR /src
COPY backend ./backend
COPY db ./db
WORKDIR /src/backend
RUN CGO_ENABLED=0 GOOS=linux go build -o /out/dash-backend ./cmd/server
# Final stage with supervisord
FROM alpine:3.22
# Install supervisord
RUN apk add --no-cache ca-certificates supervisor
# Create users
RUN adduser -D -H -u 10001 app && \
addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs
# Setup directories
RUN mkdir -p /app/frontend /data /var/log/supervisor && \
chown -R app:app /data /app && \
chown -R nextjs:nodejs /app/frontend
# Copy backend
COPY --from=backend-builder /out/dash-backend /app/dash-backend
COPY --from=backend-builder /src/db /app/db
# Copy frontend
COPY --from=frontend-builder /app/frontend/public /app/frontend/public
COPY --from=frontend-builder --chown=nextjs:nodejs /app/frontend/.next/standalone /app/frontend/
COPY --from=frontend-builder --chown=nextjs:nodejs /app/frontend/.next/static /app/frontend/.next/static
# Copy supervisord config
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Expose ports
EXPOSE 8080 3000
# Start supervisord
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]