# Non-root Dockerfile — supports PUID/PGID environment variables (LSIO-style) # Usage: docker build -f Dockerfile.nonroot -t bentopdf . # docker run -d -p 3000:8080 -e PUID=1000 -e PGID=1000 bentopdf ARG BASE_URL= # Build stage (identical to main Dockerfile) FROM public.ecr.aws/docker/library/node:20-alpine AS builder WORKDIR /app COPY package*.json ./ COPY vendor ./vendor ENV HUSKY=0 RUN npm config set fetch-retries 5 && \ npm config set fetch-retry-mintimeout 60000 && \ npm config set fetch-retry-maxtimeout 300000 && \ npm config set fetch-timeout 600000 && \ npm ci COPY . . ARG SIMPLE_MODE=false ENV SIMPLE_MODE=$SIMPLE_MODE ARG COMPRESSION_MODE=all ENV COMPRESSION_MODE=$COMPRESSION_MODE ARG BASE_URL ENV BASE_URL=$BASE_URL ARG VITE_WASM_PYMUPDF_URL ARG VITE_WASM_GS_URL ARG VITE_WASM_CPDF_URL ENV VITE_WASM_PYMUPDF_URL=$VITE_WASM_PYMUPDF_URL ENV VITE_WASM_GS_URL=$VITE_WASM_GS_URL ENV VITE_WASM_CPDF_URL=$VITE_WASM_CPDF_URL # Default UI language (e.g. en, fr, de, es, zh, ar) ARG VITE_DEFAULT_LANGUAGE ENV VITE_DEFAULT_LANGUAGE=$VITE_DEFAULT_LANGUAGE # Custom branding (e.g. VITE_BRAND_NAME=MyCompany VITE_BRAND_LOGO=my-logo.svg) ARG VITE_BRAND_NAME ARG VITE_BRAND_LOGO ARG VITE_FOOTER_TEXT ENV VITE_BRAND_NAME=$VITE_BRAND_NAME ENV VITE_BRAND_LOGO=$VITE_BRAND_LOGO ENV VITE_FOOTER_TEXT=$VITE_FOOTER_TEXT ENV NODE_OPTIONS="--max-old-space-size=3072" RUN npm run build:with-docs # Production stage — uses standard nginx (starts as root, drops to PUID/PGID) FROM nginx:stable-alpine-slim LABEL org.opencontainers.image.source="https://github.com/alam00000/bentopdf" LABEL org.opencontainers.image.url="https://github.com/alam00000/bentopdf" ARG BASE_URL ENV PUID=1000 ENV PGID=1000 ENV DISABLE_IPV6=false RUN apk add --no-cache su-exec COPY --from=builder /app/dist /usr/share/nginx/html${BASE_URL%/} COPY nginx.conf /etc/nginx/nginx.conf COPY --chmod=755 entrypoint.sh /entrypoint.sh RUN mkdir -p /etc/nginx/tmp \ /var/cache/nginx/client_temp \ /var/cache/nginx/proxy_temp \ /var/cache/nginx/fastcgi_temp \ /var/cache/nginx/uwsgi_temp \ /var/cache/nginx/scgi_temp EXPOSE 8080 ENTRYPOINT ["/entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"]