I am facing issue that my .env file is not being loaded in production environment.
Unanswered
Russian Blue posted this in #help-forum
Russian BlueOP
# Production Dockerfile for Dashboard - x86_64 ONLY
# For deployment on x86_64 servers (AWS, GCP, Azure, etc.)
# Stage 1: Builder
FROM --platform=linux/amd64 node:20-alpine AS builder
WORKDIR /build
# Copy source from qck-dashboard directory
COPY ./dashboard/package.json ./dashboard/pnpm-lock.yaml ./
# Install pnpm and dependencies
RUN npm install -g pnpm && pnpm install --frozen-lockfile
# Copy application code
COPY ./dashboard/ ./
# Copy staging env file as .env.local for Next.js build
# Next.js will automatically read .env.local during build
COPY ./.env.staging .env.local
# Build Next.js with standalone output
ENV NEXT_TELEMETRY_DISABLED=1
RUN pnpm run build
# Remove .env.local after build (not needed in runtime)
RUN rm -f .env.local
# Stage 2: Distroless runtime - x86_64
FROM --platform=linux/amd64 gcr.io/distroless/nodejs20-debian12:nonroot
WORKDIR /app
# Copy standalone build from builder
COPY --from=builder --chown=nonroot:nonroot /build/.next/standalone ./
COPY --from=builder --chown=nonroot:nonroot /build/.next/static ./.next/static
COPY --from=builder --chown=nonroot:nonroot /build/public ./public
# Environment
ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME=0.0.0.0
EXPOSE 3000
# Run as nonroot user
USER nonroot
# Start Next.js
CMD ["server.js"]
3 Replies
@Russian Blue markdown
# Production Dockerfile for Dashboard - x86_64 ONLY
# For deployment on x86_64 servers (AWS, GCP, Azure, etc.)
# Stage 1: Builder
FROM --platform=linux/amd64 node:20-alpine AS builder
WORKDIR /build
# Copy source from qck-dashboard directory
COPY ./dashboard/package.json ./dashboard/pnpm-lock.yaml ./
# Install pnpm and dependencies
RUN npm install -g pnpm && pnpm install --frozen-lockfile
# Copy application code
COPY ./dashboard/ ./
# Copy staging env file as .env.local for Next.js build
# Next.js will automatically read .env.local during build
COPY ./.env.staging .env.local
# Build Next.js with standalone output
ENV NEXT_TELEMETRY_DISABLED=1
RUN pnpm run build
# Remove .env.local after build (not needed in runtime)
RUN rm -f .env.local
# Stage 2: Distroless runtime - x86_64
FROM --platform=linux/amd64 gcr.io/distroless/nodejs20-debian12:nonroot
WORKDIR /app
# Copy standalone build from builder
COPY --from=builder --chown=nonroot:nonroot /build/.next/standalone ./
COPY --from=builder --chown=nonroot:nonroot /build/.next/static ./.next/static
COPY --from=builder --chown=nonroot:nonroot /build/public ./public
# Environment
ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME=0.0.0.0
EXPOSE 3000
# Run as nonroot user
USER nonroot
# Start Next.js
CMD ["server.js"]
# Remove .env.local after build (not needed in runtime)
RUN rm -f .env.local
well, environment variables are needed in runtime. you need to ensure that either an
.env*
file exists in runtime, or that runtime otherwise already has all environment variables configuredRussian BlueOP
@joulev let me give you bigger picture
project
-> dashboard/ nextjs project
-> backend/ some other API project
-> .env.staging
-> .env
-> dockerfiles/dockerfile.dashboard
-> dockerfiles/dockerfile.backend
-> docker-compose.yml
dockerfile.dashboard contains what i sent first
.env has everything even NEXTPUBLIC** variables
here is docker-compose.yml
project
-> dashboard/ nextjs project
-> backend/ some other API project
-> .env.staging
-> .env
-> dockerfiles/dockerfile.dashboard
-> dockerfiles/dockerfile.backend
-> docker-compose.yml
dockerfile.dashboard contains what i sent first
.env has everything even NEXTPUBLIC** variables
here is docker-compose.yml
dashboard:
build:
context: .
dockerfile: ./dockerfiles/Dockerfile.dashboard
container_name: dashboard
platform: linux/amd64
ports:
- "10111:3000"
# Load all environment variables from .env file
env_file:
- .env.staging # or .env
environment:
- NODE_ENV=production
- NEXTAUTH_URL=${NEXTAUTH_URL_DASHBOARD}
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET_DASHBOARD}
depends_on:
- qck-api-staging
networks:
- qck-network-staging
restart: unless-stopped
@Russian Blue <@484037068239142956> let me give you bigger picture
project
-> dashboard/ nextjs project
-> backend/ some other API project
-> .env.staging
-> .env
-> dockerfiles/dockerfile.dashboard
-> dockerfiles/dockerfile.backend
-> docker-compose.yml
dockerfile.dashboard contains what i sent first
.env has everything even NEXT_PUBLIC_**** variables
here is docker-compose.yml
yml
dashboard:
build:
context: .
dockerfile: ./dockerfiles/Dockerfile.dashboard
container_name: dashboard
platform: linux/amd64
ports:
- "10111:3000"
# Load all environment variables from .env file
env_file:
- .env.staging # or .env
environment:
- NODE_ENV=production
- NEXTAUTH_URL=${NEXTAUTH_URL_DASHBOARD}
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET_DASHBOARD}
depends_on:
- qck-api-staging
networks:
- qck-network-staging
restart: unless-stopped
what error was thrown that implies the environment variables are not loaded?
if before running the server, you
if before running the server, you
echo $YOUR_ENV
, does it print anything?