aboutsummaryrefslogtreecommitdiff
path: root/communities/174bg/174bg.net/Dockerfile
diff options
context:
space:
mode:
authorAlex Pooley (@zuedev) <zuedev@gmail.com>2026-05-24 12:58:49 +0100
committerAlex Pooley (@zuedev) <zuedev@gmail.com>2026-05-24 12:58:49 +0100
commite2066f51523ecba0f1991edd0c2b94f8f4cd1820 (patch)
tree8aedfff6c5d321d612278b40002a8e8037105b08 /communities/174bg/174bg.net/Dockerfile
parent7bcfcc53b2dcbfb6efc82524f7bd078b716fd27b (diff)
downloadunnamed-group-e2066f51523ecba0f1991edd0c2b94f8f4cd1820.tar
unnamed-group-e2066f51523ecba0f1991edd0c2b94f8f4cd1820.tar.gz
unnamed-group-e2066f51523ecba0f1991edd0c2b94f8f4cd1820.tar.bz2
unnamed-group-e2066f51523ecba0f1991edd0c2b94f8f4cd1820.tar.xz
unnamed-group-e2066f51523ecba0f1991edd0c2b94f8f4cd1820.zip
shorten community subdirs
Diffstat (limited to 'communities/174bg/174bg.net/Dockerfile')
-rw-r--r--communities/174bg/174bg.net/Dockerfile115
1 files changed, 115 insertions, 0 deletions
diff --git a/communities/174bg/174bg.net/Dockerfile b/communities/174bg/174bg.net/Dockerfile
new file mode 100644
index 0000000..636d9b2
--- /dev/null
+++ b/communities/174bg/174bg.net/Dockerfile
@@ -0,0 +1,115 @@
+# ============================================
+# Stage 1: Dependencies Installation Stage
+# ============================================
+
+# IMPORTANT: Node.js Version Maintenance
+# This Dockerfile uses Node.js 24.13.0-slim, which was the latest LTS version at the time of writing.
+# To ensure security and compatibility, regularly update the NODE_VERSION ARG to the latest LTS version.
+ARG NODE_VERSION=24.13.0-slim
+
+FROM node:${NODE_VERSION} AS dependencies
+
+# Set working directory
+WORKDIR /app
+
+# Copy package-related files first to leverage Docker's caching mechanism
+COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./
+
+# Install project dependencies with frozen lockfile for reproducible builds
+RUN --mount=type=cache,target=/root/.npm \
+ --mount=type=cache,target=/usr/local/share/.cache/yarn \
+ --mount=type=cache,target=/root/.local/share/pnpm/store \
+ if [ -f package-lock.json ]; then \
+ npm ci --no-audit --no-fund; \
+ elif [ -f yarn.lock ]; then \
+ corepack enable yarn && yarn install --frozen-lockfile --production=false; \
+ elif [ -f pnpm-lock.yaml ]; then \
+ corepack enable pnpm && pnpm install --frozen-lockfile; \
+ else \
+ echo "No lockfile found." && exit 1; \
+ fi
+
+# ============================================
+# Stage 2: Build Next.js application in standalone mode
+# ============================================
+
+FROM node:${NODE_VERSION} AS builder
+
+# Set working directory
+WORKDIR /app
+
+# Copy project dependencies from dependencies stage
+COPY --from=dependencies /app/node_modules ./node_modules
+
+# Copy application source code
+COPY . .
+
+ENV NODE_ENV=production
+
+# Next.js collects completely anonymous telemetry data about general usage.
+# Learn more here: https://nextjs.org/telemetry
+# Uncomment the following line in case you want to disable telemetry during the build.
+# ENV NEXT_TELEMETRY_DISABLED=1
+
+# Build Next.js application
+# If you want to speed up Docker rebuilds, you can cache the build artifacts
+# by adding: --mount=type=cache,target=/app/.next/cache
+# This caches the .next/cache directory across builds, but it also prevents
+# .next/cache/fetch-cache from being included in the final image, meaning
+# cached fetch responses from the build won't be available at runtime.
+RUN if [ -f package-lock.json ]; then \
+ npm run build; \
+ elif [ -f yarn.lock ]; then \
+ corepack enable yarn && yarn build; \
+ elif [ -f pnpm-lock.yaml ]; then \
+ corepack enable pnpm && pnpm build; \
+ else \
+ echo "No lockfile found." && exit 1; \
+ fi
+
+# ============================================
+# Stage 3: Run Next.js application
+# ============================================
+
+FROM node:${NODE_VERSION} AS runner
+
+# Set working directory
+WORKDIR /app
+
+# Set production environment variables
+ENV NODE_ENV=production
+ENV PORT=3000
+ENV HOSTNAME="0.0.0.0"
+
+# Next.js collects completely anonymous telemetry data about general usage.
+# Learn more here: https://nextjs.org/telemetry
+# Uncomment the following line in case you want to disable telemetry during the run time.
+# ENV NEXT_TELEMETRY_DISABLED=1
+
+# Copy production assets
+COPY --from=builder --chown=node:node /app/public ./public
+
+# Copy database migration files
+COPY --from=builder --chown=node:node /app/better-auth_migrations ./better-auth_migrations
+
+# Set the correct permission for prerender cache
+RUN mkdir .next
+RUN chown node:node .next
+
+# Automatically leverage output traces to reduce image size
+# https://nextjs.org/docs/advanced-features/output-file-tracing
+COPY --from=builder --chown=node:node /app/.next/standalone ./
+COPY --from=builder --chown=node:node /app/.next/static ./.next/static
+
+# If you want to persist the fetch cache generated during the build so that
+# cached responses are available immediately on startup, uncomment this line:
+# COPY --from=builder --chown=node:node /app/.next/cache ./.next/cache
+
+# Switch to non-root user for security best practices
+USER node
+
+# Expose port 3000 to allow HTTP traffic
+EXPOSE 3000
+
+# Start Next.js standalone server
+CMD ["node", "server.js"] \ No newline at end of file