feat: 优化docker配置

master
绝弹 2023-09-24 13:52:06 +08:00
parent 277601fdf9
commit d161435bc2
5 changed files with 37 additions and 61 deletions

7
.dockerignore Normal file
View File

@ -0,0 +1,7 @@
dist
node_modules
scripts
.git
.gitea
.gitignore
README.md

View File

@ -11,7 +11,7 @@ on:
env:
docker_host: ${{ secrets.DOCKER_REGISTRY }}
docker_image: ${{ secrets.DOCKER_REGISTRY }}/${{ gitea.repository }}
docker_name: ${{ secrets.DOCKER_REGISTRY }}/${{ gitea.repository }}
docker_user: ${{ secrets.DOCKER_USERNAME }}
docker_pass: ${{ secrets.DOCKER_PASSWORD }}
deploy_host: ${{ secrets.DEPLOY_HOSTNAME }}
@ -30,22 +30,9 @@ jobs:
id: checkout
uses: https://gitea.com/actions/checkout@v3
# - name: 设置环境
# uses: https://gitea.com/actions/setup-node@v2
# - name: 安装依赖
# run: |
# npm install --registry https://registry.npmmirror.com/
# - name: 构建产物
# run: npm run build
# - name: 打印目录
# run: ls ./dist
- name: 构建镜像
run: |
docker build -t ${{ env.docker_image }}:latest .
docker build -t ${{ env.docker_name }}:latest .
- name: 登陆镜像
run: |
@ -54,7 +41,7 @@ jobs:
- name: 推送镜像
shell: bash
run: |
docker push ${{ env.docker_image }}:latest
docker push ${{ env.docker_name }}:latest
- name: 更新服务
uses: http://git.dev.juetan.cn/mirror/ssh-action@v1.0.0
@ -65,4 +52,4 @@ jobs:
password: ${{ env.deploy_pass }}
script: |
docker service ls | grep -q ${{ env.deploy_name }} || exit 0
docker service update --image ${{ env.docker_image }}:latest ${{ env.deploy_name }}
docker service update --image ${{ env.docker_name }}:latest ${{ env.deploy_name }}

View File

@ -1,37 +1,19 @@
FROM node:18-alpine As development
WORKDIR /usr/src/app
COPY --chown=node:node package*.json ./
RUN npm ci
COPY --chown=node:node . .
USER node
FROM node:18-alpine As dev
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
RUN npm run build && npm prune --production
FROM node:18-alpine As build
WORKDIR /usr/src/app
COPY --chown=node:node package*.json ./
COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules
COPY --chown=node:node . .
RUN npm run build
WORKDIR /app
ENV NODE_ENV production
COPY --from=dev /app/content/ ./content/
COPY --from=dev /app/dist/ ./dist/
COPY --from=dev /app/node_modules/ ./node_modules/
COPY --from=dev /app/.env ./
COPY --from=dev /app/package.json ./
RUN npm ci --only=production && npm cache clean --force
USER node
FROM node:18-alpine As production
COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
COPY --chown=node:node --from=build /usr/src/app/dist ./dist
CMD [ "node", "dist/main.js" ]
EXPOSE 3030
CMD [ "node", "./dist/main.js" ]

View File

@ -48,10 +48,18 @@
"winston": "^3.10.0",
"nodemailer": "^6.9.5",
"mysql2": "^3.6.1",
"@nestjs/cache-manager": "^2.1.0",
"cache-manager": "^5.2.3",
"cache-manager-redis-store": "^3.0.1",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"mockjs": "^1.1.0",
"multer": "1.4.5-lts.1",
"redis": "^4.6.8",
"sqlite3": "^5.1.6",
"winston-daily-rotate-file": "^4.7.1"
},
"devDependencies": {
"@nestjs/cache-manager": "^2.1.0",
"@nestjs/cli": "^9.5.0",
"@nestjs/schematics": "^9.2.0",
"@nestjs/testing": "^9.4.3",
@ -67,21 +75,13 @@
"@types/uuid": "^9.0.3",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"cache-manager": "^5.2.3",
"cache-manager-redis-store": "^3.0.1",
"eslint": "^8.49.0",
"eslint-config-prettier": "^8.10.0",
"eslint-plugin-prettier": "^4.2.1",
"jest": "28.1.2",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"mockjs": "^1.1.0",
"multer": "1.4.5-lts.1",
"plop": "^3.1.2",
"prettier": "^2.8.8",
"redis": "^4.6.8",
"source-map-support": "^0.5.21",
"sqlite3": "^5.1.6",
"supertest": "^6.3.3",
"ts-jest": "28.0.5",
"ts-loader": "^9.4.4",

View File

@ -1,8 +1,8 @@
import { LoggerService } from '@/common/logger';
import { initSwagger } from '@/common/swagger';
import { ConfigService } from '@/config';
import { VersioningType } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { initSwagger } from '@/common/swagger';
import { LoggerService } from '@/common/logger';
import { ConfigService } from '@/config';
import { AppModule } from './app.module';
import { ScanModule } from './utils/scan.module';