Skip to content

Commit

Permalink
cleaned up multi-service compose (#75)
Browse files Browse the repository at this point in the history
* cleaned up multi-service compose
* refactor docker setup
* add all ENVs and remove unneeded variables
* remove comments, unneeded vars and syntax
  • Loading branch information
kinghat authored Apr 13, 2022
1 parent 3d747f4 commit 43aa68e
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 64 deletions.
42 changes: 17 additions & 25 deletions client/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,58 +1,50 @@
# Install dependencies only when needed
FROM node:16-alpine AS deps
FROM node:17-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 ./

RUN yarn install --frozen-lockfile

# If using npm with a `package-lock.json` comment out above and use below instead
# COPY package.json package-lock.json ./
# RUN npm ci
FROM node:17-alpine AS builder

# Rebuild the source code only when needed
FROM node:16-alpine AS builder
WORKDIR /app

COPY --from=deps /app/node_modules ./node_modules
COPY . .

# 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
ARG API_URL http://localhost:3000
ARG SECRET_KEY secret
ARG API_URL

ENV NEXT_TELEMETRY_DISABLED=1
ENV API_URL=${API_URL:-http://localhost:3000}

RUN yarn build

# If using npm comment out above and use below instead
# RUN npm run build
FROM node:17-alpine AS runner

# Production image, copy all the files and run next
FROM node:16-alpine AS runner
WORKDIR /app

ENV NODE_ENV production
ARG NODE_ENV

ENV NEXT_TELEMETRY_DISABLED 1
ENV NEXT_TELEMETRY_DISABLED=1
ENV NODE_ENV=${NODE_ENV:-production}

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

# You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/next.config.mjs ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json

# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 3001
ENV PORT=3001

ENV PORT 3001
EXPOSE 3001

CMD ["node", "server.js"]
41 changes: 16 additions & 25 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,43 +1,34 @@
version: '3.8'
services:
server:
build:
build:
context: ./server
args:
SECRET_KEY: secret
- NODE_ENV=production
container_name: server
restart: unless-stopped
user: 1000:1000
environment:
- JWT_SECRET=change_me! # use `openssl rand -hex 32` to generate a strong secret
- SECRET_KEY=secret
- PORT
- JWT_SECRET=jwt_secret # change_me! # use `openssl rand -hex 32` to generate a strong secret
- SECRET_KEY=secret # change me!
- MEMORY_DB
- REGISTRATION_PASSWORD
- WELCOME_CONTENT
- WELCOME_TITLE
- ENABLE_ADMIN
- DRIFT_HOME
ports:
- "3000:3000"
networks:
- general
container_name: server
client:
build:
context: ./client
network: host
args:
API_URL: http://localhost:3000
SECRET_KEY: secret
- API_URL=http://server:3000
container_name: client
restart: unless-stopped
user: 1000:1000
environment:
- API_URL=http://localhost:3000
- SECRET_KEY=secret
- API_URL=http://server:3000
- SECRET_KEY=secret # change me!
ports:
- "3001:3001"
expose:
- 3001
networks:
- general
# depends_on:
# server:
# condition: service_healthy
container_name: client

networks:
general:
driver: bridge
33 changes: 19 additions & 14 deletions server/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,30 +1,35 @@
# Install dependencies only when needed
FROM node:16-alpine AS deps
FROM node:17-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 git

WORKDIR /app

COPY package.json yarn.lock tsconfig.json tslint.json ./

RUN yarn install --frozen-lockfile

# If using npm with a `package-lock.json` comment out above and use below instead
# COPY package.json package-lock.json ./
# RUN npm ci
FROM node:17-alpine AS builder

# Rebuild the source code only when needed
FROM node:16-alpine AS builder
WORKDIR /app

COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NODE_ENV production

ARG NODE_ENV

ENV NODE_ENV=${NODE_ENV:-production}

RUN apk add --no-cache git
ARG SECRET_KEY secret
RUN yarn build:docker

RUN yarn build
FROM node:17-alpine AS runner

FROM node:16-alpine AS runner
WORKDIR /app

ENV NODE_ENV production
ARG NODE_ENV

ENV NODE_ENV=${NODE_ENV:-production}

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 drift
Expand All @@ -34,8 +39,8 @@ COPY --from=builder /app/node_modules ./node_modules

USER drift

EXPOSE 3000
ENV PORT=3000

ENV PORT 3000
EXPOSE 3000

CMD ["node", "dist/index.js"]
1 change: 1 addition & 0 deletions server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"start": "cross-env NODE_ENV=production node dist/index.js",
"dev": "cross-env NODE_ENV=development nodemon index.ts",
"build": "mkdir -p ./dist && cp .env ./dist/.env && tsc -p ./tsconfig.json && tsc-alias -p ./tsconfig.json && yarn post-build",
"build:docker": "mkdir -p ./dist && cp .env.test ./dist/.env && tsc -p ./tsconfig.json && tsc-alias -p ./tsconfig.json && yarn post-build",
"post-build": "cp package.json ./dist/package.json && cp yarn.lock ./dist/yarn.lock && cd dist && env NODE_ENV=production yarn install",
"migrate:up": "ts-node migrate up",
"migrate:down": "ts-node migrate down",
Expand Down

0 comments on commit 43aa68e

Please sign in to comment.