From 079a400e74ab2516518dd4d764a097164fe59aef Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 20 Nov 2022 16:07:54 -0800 Subject: [PATCH] Optimize docker build --- .dockerignore | 2 +- Dockerfile | 22 ++++++++++++++-------- docker-compose.dev.yml | 2 +- docker-compose.yml | 17 ++++++++++------- example.env | 4 ++-- example.env.dev | 11 ----------- server/package.json | 2 +- 7 files changed, 29 insertions(+), 31 deletions(-) delete mode 100644 example.env.dev diff --git a/.dockerignore b/.dockerignore index 23b8f96c1..fbd082697 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ node_modules release/app/node_modules release/app/dist -src/server/node_modules +server/node_modules diff --git a/Dockerfile b/Dockerfile index 992a8b2e9..3c3a478d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,15 +2,22 @@ FROM node:16.5-alpine as ui-builder WORKDIR /app COPY . . -RUN npm install && npm run build:renderer +RUN npm install +RUN npm run build:renderer +RUN npm prune --production +RUN npm cache clean --force +RUN rm -rf /root/.cache # Stage 2 - Build server FROM node:16.5-alpine as server-builder WORKDIR /app -COPY src/server . -RUN ls -lh -RUN npm install +COPY server . +RUN npm install && npx prisma generate RUN npm run build +RUN npm prune --production +RUN npm cache clean --force +RUN rm -rf /root/.cache + # Stage 3 - Deploy FROM node:16.5-alpine @@ -19,12 +26,12 @@ RUN mkdir appdata RUN mkdir feishin-server RUN mkdir feishin-client -# Install server modules -COPY src/server/package.json ./feishin-server -RUN cd ./feishin-server && npm install --production +RUN npm cache clean --force +RUN npm prune --production # Add server build files COPY --from=server-builder /app/dist ./feishin-server +COPY --from=server-builder /app/node_modules ./feishin-server/node_modules COPY --from=server-builder /app/prisma ./feishin-server/prisma # Add client build files @@ -33,7 +40,6 @@ COPY --from=ui-builder /app/release/app/dist/renderer ./feishin-client COPY docker-entrypoint.sh ./feishin-server/docker-entrypoint.sh RUN chmod +x ./feishin-server/docker-entrypoint.sh -RUN cd ./feishin-server && npx prisma generate RUN npm install pm2 -g WORKDIR /root/feishin-server diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 2651fcb8d..6efe260a2 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -30,7 +30,7 @@ services: - TOKEN_EXPIRATION=${TOKEN_EXPIRATION} - TOKEN_REFRESH_EXPIRATION=${TOKEN_REFRESH_EXPIRATION} ports: - - '9321:9321' + - '8843:9321' restart: unless-stopped prisma: container_name: feishin_prisma_studio diff --git a/docker-compose.yml b/docker-compose.yml index 18eb758f0..149aec379 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,27 +3,30 @@ services: db: container_name: feishin_db image: postgres:13 - ports: - - '5432:5432' volumes: - ${DATABASE_PERSIST_PATH}:/var/lib/postgresql/data environment: - POSTGRES_USER=${DATABASE_USERNAME} - POSTGRES_PASSWORD=${DATABASE_PASSWORD} - POSTGRES_DB=${DATABASE_NAME} - restart: always + ports: + - '${DATABASE_PORT}:5432' + restart: unless-stopped server: container_name: feishin - image: feishin:latest + build: + context: . + dockerfile: Dockerfile + image: feishin depends_on: - db environment: - APP_BASE_URL=${APP_BASE_URL} - DATABASE_URL=postgresql://${DATABASE_USERNAME}:${DATABASE_PASSWORD}@db/${DATABASE_NAME}?schema=public&connection_limit=14&pool_timeout=20 - - DATABASE_SECRET=${DATABASE_SECRET} + - DATABASE_PORT=${DATABASE_PORT} - TOKEN_SECRET=${TOKEN_SECRET} - TOKEN_EXPIRATION=${TOKEN_EXPIRATION} - TOKEN_REFRESH_EXPIRATION=${TOKEN_REFRESH_EXPIRATION} ports: - - '9321:9321' - restart: always + - '8643:9321' + restart: unless-stopped diff --git a/example.env b/example.env index 00808eb1e..ac17d9108 100644 --- a/example.env +++ b/example.env @@ -4,6 +4,6 @@ DATABASE_NAME=feishin DATABASE_PORT=5432 DATABASE_PERSIST_PATH=C:/docker/feishin/db TOKEN_SECRET=SUPERSECRET -TOKEN_EXPIRATION=15d +TOKEN_EXPIRATION=30m TOKEN_REFRESH_EXPIRATION=90d -APP_BASE_URL=http://localhost:4343 +APP_BASE_URL=http://localhost:8643 diff --git a/example.env.dev b/example.env.dev deleted file mode 100644 index 190246204..000000000 --- a/example.env.dev +++ /dev/null @@ -1,11 +0,0 @@ -# RENAME FILE TO ".env.dev" and use "npm run docker:up" on repository root - -DATABASE_USERNAME=admin -DATABASE_PASSWORD=admin -DATABASE_NAME=feishin -DATABASE_PORT=5432 -DATABASE_PERSIST_PATH=C:/docker/feishin/db -TOKEN_SECRET=SUPERSECRET -TOKEN_EXPIRATION=15d -TOKEN_REFRESH_EXPIRATION=90d -APP_BASE_URL=http://localhost:4343 diff --git a/server/package.json b/server/package.json index 955e02361..0754e5ea5 100644 --- a/server/package.json +++ b/server/package.json @@ -5,7 +5,7 @@ "main": "server.js", "scripts": { "dev": "nodemon --legacy-watch -e ts,js --exec ts-node -r tsconfig-paths/register server.ts", - "prod": "ts-node -r tsconfig-paths/register server.ts", + "prod": "ts-node --transpileOnly -r tsconfig-paths/register server.ts", "dev:debug": "nodemon --config nodemon.json --inspect-brk server.ts", "build": "tsc --project . && tsconfig-replace-paths --project tsconfig.json" },