Files
dashboard/frontend/Dockerfile
Matthias Hochmeister 32473f8329 new features, bookstack
2026-03-03 22:07:42 +01:00

75 lines
2.0 KiB
Docker

# ===========================
# Build Stage
# ===========================
FROM node:20-alpine AS builder
# Set working directory
WORKDIR /app
# Copy package files for dependency installation (no lock file so npm resolves fresh from registry)
COPY package.json .npmrc ./
# Install dependencies (NODE_ENV must not be production so devDependencies are installed)
ENV NODE_ENV=development
ENV PATH="/app/node_modules/.bin:$PATH"
RUN npm install --include=dev
# Copy source code
COPY . .
# Build arguments for environment variables
ARG VITE_API_URL=http://localhost:3000
ARG AUTHENTIK_URL
ARG AUTHENTIK_CLIENT_ID
ARG VITE_APP_NAME="Feuerwehr Dashboard"
ARG VITE_APP_VERSION="1.0.0"
# Set environment variables for build
ENV VITE_API_URL=$VITE_API_URL
ENV AUTHENTIK_URL=$AUTHENTIK_URL
ENV AUTHENTIK_CLIENT_ID=$AUTHENTIK_CLIENT_ID
ENV VITE_APP_NAME=$VITE_APP_NAME
ENV VITE_APP_VERSION=$VITE_APP_VERSION
# Build the application
RUN npm run build
# ===========================
# Production Stage with Nginx
# ===========================
FROM nginx:alpine AS production
# Install wget for health checks
RUN apk add --no-cache wget
# Copy custom nginx configuration
COPY nginx.conf /etc/nginx/nginx.conf
# Copy built assets from builder stage
COPY --from=builder /app/dist /usr/share/nginx/html
# Create non-root user for nginx
RUN addgroup -g 101 -S nginx || true && \
adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx || true
# Set proper permissions
RUN chown -R nginx:nginx /usr/share/nginx/html && \
chown -R nginx:nginx /var/cache/nginx && \
chown -R nginx:nginx /var/log/nginx && \
chown -R nginx:nginx /etc/nginx/conf.d && \
touch /var/run/nginx.pid && \
chown -R nginx:nginx /var/run/nginx.pid
# Switch to non-root user
USER nginx
# Expose port 80
EXPOSE 80
# Health check
HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=30s \
CMD wget --quiet --tries=1 --spider http://localhost:80/health || exit 1
# Start nginx in foreground
CMD ["nginx", "-g", "daemon off;"]