FROM node:22-alpine AS builder WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY . . ARG GITEA_BASE_URL="" ARG GITEA_TOKEN="" ARG GITEA_USERNAME="" ARG SEAFILE_BASE_URL="" ARG SEAFILE_TOKEN="" ARG PUBLIC_SITE_URL="" ARG PUBLIC_GITEA_URL="" ARG PUBLIC_GITHUB_URL="" ARG PUBLIC_BLOG_URL="" ARG PUBLIC_GITEA_USERNAME="" ARG SYNC_OUTPUT_DIR="src/data/generated" ARG STRICT_SYNC="false" ARG SEAFILE_MIRROR_DOWNLOADS="false" ARG DOWNLOADS_OUTPUT_DIR="public/downloads" ARG GITEA_ACTIVITY_DAYS="70" ARG GITEA_ACTIVITY_PER_DAY_LIMIT="50" ARG GITEA_RECENT_ITEM_LIMIT="8" ARG GITEA_REQUEST_TIMEOUT_MS="15000" ARG GITEA_REQUEST_CONCURRENCY="5" ARG SEAFILE_REQUEST_TIMEOUT_MS="15000" ENV GITEA_BASE_URL="${GITEA_BASE_URL}" \ GITEA_TOKEN="${GITEA_TOKEN}" \ GITEA_USERNAME="${GITEA_USERNAME}" \ SEAFILE_BASE_URL="${SEAFILE_BASE_URL}" \ SEAFILE_TOKEN="${SEAFILE_TOKEN}" \ PUBLIC_SITE_URL="${PUBLIC_SITE_URL}" \ PUBLIC_GITEA_URL="${PUBLIC_GITEA_URL}" \ PUBLIC_GITHUB_URL="${PUBLIC_GITHUB_URL}" \ PUBLIC_BLOG_URL="${PUBLIC_BLOG_URL}" \ PUBLIC_GITEA_USERNAME="${PUBLIC_GITEA_USERNAME}" \ SYNC_OUTPUT_DIR="${SYNC_OUTPUT_DIR}" \ STRICT_SYNC="${STRICT_SYNC}" \ SEAFILE_MIRROR_DOWNLOADS="${SEAFILE_MIRROR_DOWNLOADS}" \ DOWNLOADS_OUTPUT_DIR="${DOWNLOADS_OUTPUT_DIR}" \ GITEA_ACTIVITY_DAYS="${GITEA_ACTIVITY_DAYS}" \ GITEA_ACTIVITY_PER_DAY_LIMIT="${GITEA_ACTIVITY_PER_DAY_LIMIT}" \ GITEA_RECENT_ITEM_LIMIT="${GITEA_RECENT_ITEM_LIMIT}" \ GITEA_REQUEST_TIMEOUT_MS="${GITEA_REQUEST_TIMEOUT_MS}" \ GITEA_REQUEST_CONCURRENCY="${GITEA_REQUEST_CONCURRENCY}" \ SEAFILE_REQUEST_TIMEOUT_MS="${SEAFILE_REQUEST_TIMEOUT_MS}" RUN npm run rebuild FROM nginx:1.27-alpine AS runtime COPY docker/nginx/default.conf /etc/nginx/conf.d/default.conf COPY --from=builder /app/dist /usr/share/nginx/html EXPOSE 80 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget -q -O /dev/null http://127.0.0.1/ || exit 1