cleaned up multi-service compose (#75)

* cleaned up multi-service compose
* refactor docker setup
* add all ENVs and remove unneeded variables
* remove comments, unneeded vars and syntax
This commit is contained in:
kinghat 2022-04-13 17:31:38 -05:00 committed by GitHub
parent 3d747f41cc
commit 43aa68e082
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 53 additions and 64 deletions

View file

@ -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
ENV PORT=3001
EXPOSE 3001
ENV PORT 3001
CMD ["node", "server.js"]

View file

@ -1,43 +1,34 @@
version: '3.8'
services:
server:
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

View file

@ -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
@ -34,8 +39,8 @@ COPY --from=builder /app/node_modules ./node_modules
USER drift
ENV PORT=3000
EXPOSE 3000
ENV PORT 3000
CMD ["node", "dist/index.js"]

View file

@ -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",