a year ago
Hello, I have a problem with environment variables within Railway.
11 days ago, my Next.js app was working correctly, but recently I deployed again and it failed. So, I added a Dockerfile, and the deploy worked. However, now the environment variables are not working. What am I missing?
The enviroment variables are "NEXTPUBLICBASE_URL"
Attached the DockerFile
Publish in my docker local and works correctly
2 Replies
a year ago
your dockerfile is missing the reference to NEXT_PUBLIC_BASE_URL
and whatever other variables you may need, please read this
it didnt work
Add to dockerFile
ARG NEXTPUBLICBASEURL RUN echo $NEXTPUBLICBASEURL
command run echo
if see it value in build Logs Railway
a year ago
show me the dockerfile you have now please
Install dependencies only when needed
FROM node:alpine AS deps
Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
COPY package.json package-lock.json ./
RUN yarn install --frozen-lockfile
RUN npm ci
Rebuild the source code only when needed
FROM node:alpine AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/nodemodules ./nodemodules
RUN yarn build && yarn install --production --ignore-scripts --prefer-offline
RUN npm run build && npm install --production --ignore-scripts --prefer-offline
Production image, copy all the files and run next
FROM node:alpine AS runner
WORKDIR /app
ENV NODE_ENV production
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/nodemodules ./nodemodules
COPY --from=builder /app/package.json ./package.json
Specify the variable you need RAILWAY
ARG NEXTPUBLICBASEURL RUN echo $NEXTPUBLICBASEURL
ARG NEXTPUBLICCOLOR_NAMES
ARG NEXTPUBLICSTATUS
RUN echo $NEXTPUBLICCOLOR_NAMES
RUN echo $NEXTPUBLICSTATUS
USER nextjs
EXPOSE 3000
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.
ENV NEXTTELEMETRYDISABLED 1
CMD ["yarn", "start"]
CMD ["npm", "run", "start"]
a year ago
please enclose that in a code block
Install dependencies only when needed
FROM node:alpine AS deps
Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
COPY package.json package-lock.json ./
RUN yarn install --frozen-lockfile
RUN npm ci
Rebuild the source code only when needed
FROM node:alpine AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/nodemodules ./nodemodules
RUN yarn build && yarn install --production --ignore-scripts --prefer-offline
RUN npm run build && npm install --production --ignore-scripts --prefer-offline
Production image, copy all the files and run next
FROM node:alpine AS runner
WORKDIR /app
ENV NODE_ENV production
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/nodemodules ./nodemodules
COPY --from=builder /app/package.json ./package.json
Specify the variable you need RAILWAY
ARG NEXTPUBLICBASEURL RUN echo $NEXTPUBLICBASEURL
ARG NEXTPUBLICCOLOR_NAMES
ARG NEXTPUBLICSTATUS
RUN echo $NEXTPUBLICCOLOR_NAMES
RUN echo $NEXTPUBLICSTATUS
USER nextjs
EXPOSE 3000
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.
ENV NEXTTELEMETRYDISABLED 1
CMD ["yarn", "start"]
CMD ["npm", "run", "start"]
FROM node:alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
COPY package.json package-lock.json ./
RUN yarn install --frozen-lockfile
RUN npm ci
Rebuild the source code only when needed
FROM node:alpine AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/nodemodules ./nodemodules
RUN yarn build && yarn install --production --ignore-scripts --prefer-offline
RUN npm run build && npm install --production --ignore-scripts --prefer-offline
Production image, copy all the files and run next
FROM node:alpine AS runner
WORKDIR /app
ENV NODE_ENV production
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/nodemodules ./nodemodules
COPY --from=builder /app/package.json ./package.json
Specify the variable you need RAILWAY
ARG NEXTPUBLICBASEURL RUN echo $NEXTPUBLICBASEURL
ARG NEXTPUBLICCOLOR_NAMES
ARG NEXTPUBLICSTATUS
RUN echo $NEXTPUBLICCOLOR_NAMES
RUN echo $NEXTPUBLICSTATUS
USER nextjs
EXPOSE 3000
ENV NEXTTELEMETRYDISABLED 1
CMD ["yarn", "start"]
CMD ["npm", "run", "start"]
a year ago
please enclose that in a code block
a year ago
that works too
a year ago
the ARG lines are commented out
these variables are needed during building of the next app, therefore you need to reference them in the same image layer that is responsible for building
If the variable line 36 is present, (NEXTPUBLICBASE_URL)
The commented variables are only for testing
a year ago
okay that solves 1. please read 2.
a year ago
awesome
a year ago
what should i do about to fix it here, i have the same problem, the variables are not detected by railway:
FROM node:18-alpine3.16
# Create app directory
WORKDIR /app
# Install app dependencies
COPY package.json ./
COPY tsconfig.json ./
# Bundle app source
COPY . .
RUN npm install -g @nestjs/cli
RUN npm install --omit=dev
# railway env variables
ARG RAILWAY_PUBLIC_DOMAIN
ARG RAILWAY_PRIVATE_DOMAIN
ARG RAILWAY_PROJECT_NAME
ARG RAILWAY_ENVIRONMENT_NAME
ARG RAILWAY_SERVICE_NAME
ARG RAILWAY_PROJECT_ID
ARG RAILWAY_ENVIRONMENT_ID
ARG RAILWAY_SERVICE_ID
# app env variables
ARG DATABASE_URL
ARG JWT_SECRET
ARG JWT_EXPIRES_IN
ENV DATABASE_URL=$DATABASE_URL \
JWT_SECRET=$JWT_SECRET \
JWT_EXPIRES_IN=$JWT_EXPIRES_IN \
RAILWAY_PUBLIC_DOMAIN=$RAILWAY_PUBLIC_DOMAIN \
RAILWAY_PRIVATE_DOMAIN=$RAILWAY_PRIVATE_DOMAIN \
RAILWAY_PROJECT_NAME=$RAILWAY_PROJECT_NAME \
RAILWAY_ENVIRONMENT_NAME=$RAILWAY_ENVIRONMENT_NAME \
RAILWAY_SERVICE_NAME=$RAILWAY_SERVICE_NAME \
RAILWAY_PROJECT_ID=$RAILWAY_PROJECT_ID \
RAILWAY_ENVIRONMENT_ID=$RAILWAY_ENVIRONMENT_ID \
RAILWAY_SERVICE_ID=$RAILWAY_SERVICE_ID
RUN npm run build
ENV NODE_ENV=production
EXPOSE 3000
CMD ["npm", "run", "start:prod"]
3 months ago
brody just saved my life