Merge pull request 'build: reduce container size by removing dev dependencies from final image' (#9534) from asrael/calckey:Dockerfile-optimization into develop

Reviewed-on: https://codeberg.org/calckey/calckey/pulls/9534
This commit is contained in:
Kainoa Kanter 2023-02-07 04:00:48 +00:00
commit 6acde3f034
8 changed files with 794 additions and 905 deletions

View File

@ -1,16 +1,48 @@
.autogen # Visual Studio Code
.github /.vscode
.travis !/.vscode/extensions.json
.vscode
.config # Intelij-IDEA
/.idea
packages/backend/.idea/backend.iml
packages/backend/.idea/modules.xml
packages/backend/.idea/vcs.xml
# Node.js
node_modules
report.*.json
# Cypress
cypress/screenshots
cypress/videos
# Coverage
coverage
# config
/.config/*
!/.config/example.yml
!/.config/docker_example.env
#docker dev config
/dev/docker-compose.yml
# misskey
built
db
elasticsearch
redis
npm-debug.log
*.pem
run.bat
api-docs.json
*.log
*.code-workspace
.DS_Store
files
ormconfig.json
packages/backend/assets/instance.css
# dockerignore custom
.git
Dockerfile Dockerfile
build/
built/
db/
docker-compose.yml
elasticsearch/
node_modules/
redis/
files/
misskey-assets/
.pnp.*

23
.gitignore vendored
View File

@ -28,32 +28,17 @@ coverage
/dev/docker-compose.yml /dev/docker-compose.yml
# misskey # misskey
/build
built built
/data db
/.cache-loader elasticsearch
/db redis
/elasticsearch
npm-debug.log npm-debug.log
*.pem *.pem
run.bat run.bat
api-docs.json api-docs.json
*.log *.log
/redis
*.code-workspace *.code-workspace
.DS_Store .DS_Store
/files files
ormconfig.json ormconfig.json
/custom
packages/backend/assets/instance.css packages/backend/assets/instance.css
# blender backups
*.blend1
*.blend2
*.blend3
*.blend4
*.blend5
# old yarn
.yarn
yarn*

View File

@ -1,25 +1,51 @@
FROM node:19-alpine ## Install dev and compilation dependencies, build files
ARG NODE_ENV=production FROM node:19-alpine as build
WORKDIR /calckey WORKDIR /calckey
# Copy Files # Install compilation dependencies
COPY . ./ RUN apk add --no-cache --no-progress git alpine-sdk python3
# Install Dependencies # Copy only the dependency-related files first, to cache efficiently
RUN apk update COPY package.json pnpm*.yaml ./
RUN apk add git ffmpeg tini alpine-sdk python3 COPY packages/backend/package.json packages/backend/package.json
COPY packages/client/package.json packages/client/package.json
COPY packages/sw/package.json packages/sw/package.json
# Configure corepack and pnpm # Configure corepack and pnpm
RUN corepack enable RUN corepack enable
RUN corepack prepare pnpm@latest --activate RUN corepack prepare pnpm@latest --activate
RUN pnpm i --frozen-lockfile
ARG NODE_ENV=production
# Build project (pnp dependencies are installed) # Install dev mode dependencies for compilation
RUN pnpm i --frozen-lockfile
# Copy in the rest of the files, to compile from TS to JS
COPY . ./
RUN pnpm run build RUN pnpm run build
# Remove git files # Trim down the dependencies to only the prod deps
RUN rm -rf .git RUN pnpm i --prod --frozen-lockfile
## Runtime container
FROM node:19-alpine
WORKDIR /calckey
# Install runtime dependencies
RUN apk add --no-cache --no-progress tini ffmpeg
COPY . ./
# Copy node modules
COPY --from=build /calckey/node_modules /calckey/node_modules
COPY --from=build /calckey/packages/backend/node_modules /calckey/packages/backend/node_modules
COPY --from=build /calckey/packages/sw/node_modules /calckey/packages/sw/node_modules
COPY --from=build /calckey/packages/client/node_modules /calckey/packages/client/node_modules
# Copy the finished compiled files
COPY --from=build /calckey/built /calckey/built
COPY --from=build /calckey/packages/backend/built /calckey/packages/backend/built
COPY --from=build /calckey/packages/backend/assets/instance.css /calckey/packages/backend/assets/instance.css
RUN corepack enable
ENTRYPOINT [ "/sbin/tini", "--" ] ENTRYPOINT [ "/sbin/tini", "--" ]
CMD [ "pnpm", "run", "migrateandstart" ] CMD [ "pnpm", "run", "migrateandstart" ]

View File

@ -32,22 +32,14 @@
"cleanall": "pnpm run clean-all" "cleanall": "pnpm run clean-all"
}, },
"resolutions": { "resolutions": {
"chokidar": "^3.3.1", "chokidar": "^3.3.1"
"lodash": "^4.17.21"
}, },
"dependencies": { "dependencies": {
"@bull-board/api": "^4.10.2", "@bull-board/api": "^4.10.2",
"@bull-board/ui": "^4.10.2", "@bull-board/ui": "^4.10.2",
"@tensorflow/tfjs": "^3.21.0", "@tensorflow/tfjs": "^3.21.0",
"calckey-js": "^0.0.20", "calckey-js": "^0.0.20",
"execa": "5.1.1",
"gulp": "4.0.2",
"gulp-cssnano": "2.1.3",
"gulp-rename": "2.0.0",
"gulp-replace": "1.1.4",
"gulp-terser": "2.1.0",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"long": "^5.2.1",
"phosphor-icons": "^1.4.2", "phosphor-icons": "^1.4.2",
"seedrandom": "^3.0.5" "seedrandom": "^3.0.5"
}, },
@ -56,6 +48,12 @@
"@types/gulp-rename": "2.0.1", "@types/gulp-rename": "2.0.1",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"cypress": "10.11.0", "cypress": "10.11.0",
"execa": "5.1.1",
"gulp": "4.0.2",
"gulp-cssnano": "2.1.3",
"gulp-rename": "2.0.0",
"gulp-replace": "1.1.4",
"gulp-terser": "2.1.0",
"install-peers": "^1.0.4", "install-peers": "^1.0.4",
"rome": "^11.0.0", "rome": "^11.0.0",
"start-server-and-test": "1.15.2", "start-server-and-test": "1.15.2",

View File

@ -15,8 +15,7 @@
"test": "pnpm run mocha" "test": "pnpm run mocha"
}, },
"resolutions": { "resolutions": {
"chokidar": "^3.3.1", "chokidar": "^3.3.1"
"lodash": "^4.17.21"
}, },
"optionalDependencies": { "optionalDependencies": {
"@swc/core-android-arm64": "1.3.11", "@swc/core-android-arm64": "1.3.11",
@ -34,13 +33,10 @@
"@peertube/http-signature": "1.7.0", "@peertube/http-signature": "1.7.0",
"@redocly/openapi-core": "1.0.0-beta.120", "@redocly/openapi-core": "1.0.0-beta.120",
"@sinonjs/fake-timers": "9.1.2", "@sinonjs/fake-timers": "9.1.2",
"@swc/cli": "^0.1.59",
"@swc/core": "^1.3.26",
"@syuilo/aiscript": "0.11.1", "@syuilo/aiscript": "0.11.1",
"@tensorflow/tfjs": "^4.2.0", "@tensorflow/tfjs": "^4.2.0",
"ajv": "8.11.2", "ajv": "8.11.2",
"archiver": "5.3.1", "archiver": "5.3.1",
"autobind-decorator": "2.4.0",
"autwh": "0.1.0", "autwh": "0.1.0",
"aws-sdk": "2.1277.0", "aws-sdk": "2.1277.0",
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
@ -68,8 +64,6 @@
"is-svg": "4.3.2", "is-svg": "4.3.2",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"jsdom": "20.0.3", "jsdom": "20.0.3",
"json5": "2.2.3",
"json5-loader": "4.0.1",
"jsonld": "6.0.0", "jsonld": "6.0.0",
"jsrsasign": "10.6.1", "jsrsasign": "10.6.1",
"koa": "2.13.4", "koa": "2.13.4",
@ -83,7 +77,6 @@
"koa-views": "7.0.2", "koa-views": "7.0.2",
"mfm-js": "0.23.2", "mfm-js": "0.23.2",
"mime-types": "2.1.35", "mime-types": "2.1.35",
"mocha": "10.2.0",
"multer": "1.4.4-lts.1", "multer": "1.4.4-lts.1",
"nested-property": "4.0.0", "nested-property": "4.0.0",
"node-fetch": "3.3.0", "node-fetch": "3.3.0",
@ -96,7 +89,6 @@
"private-ip": "2.3.4", "private-ip": "2.3.4",
"probe-image-size": "7.2.3", "probe-image-size": "7.2.3",
"promise-limit": "2.7.0", "promise-limit": "2.7.0",
"pug": "3.0.2",
"punycode": "2.1.1", "punycode": "2.1.1",
"pureimage": "0.3.15", "pureimage": "0.3.15",
"qrcode": "1.5.1", "qrcode": "1.5.1",
@ -108,13 +100,11 @@
"rename": "1.0.4", "rename": "1.0.4",
"rndstr": "1.0.0", "rndstr": "1.0.0",
"rss-parser": "3.12.0", "rss-parser": "3.12.0",
"s-age": "1.1.2",
"sanitize-html": "2.8.1", "sanitize-html": "2.8.1",
"seedrandom": "^3.0.5", "seedrandom": "^3.0.5",
"semver": "7.3.8", "semver": "7.3.8",
"sharp": "0.31.3", "sharp": "0.31.3",
"speakeasy": "2.0.0", "speakeasy": "2.0.0",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0", "stringz": "2.1.0",
"summaly": "2.7.0", "summaly": "2.7.0",
"syslog-pro": "1.0.0", "syslog-pro": "1.0.0",
@ -122,9 +112,6 @@
"tesseract.js": "^3.0.3", "tesseract.js": "^3.0.3",
"tinycolor2": "1.5.2", "tinycolor2": "1.5.2",
"tmp": "0.2.1", "tmp": "0.2.1",
"ts-loader": "9.4.2",
"ts-node": "10.9.1",
"tsconfig-paths": "4.1.2",
"twemoji-parser": "14.0.0", "twemoji-parser": "14.0.0",
"typeorm": "0.3.11", "typeorm": "0.3.11",
"ulid": "2.3.0", "ulid": "2.3.0",
@ -132,10 +119,11 @@
"uuid": "9.0.0", "uuid": "9.0.0",
"web-push": "3.5.0", "web-push": "3.5.0",
"websocket": "1.0.34", "websocket": "1.0.34",
"ws": "8.11.0",
"xev": "3.0.2" "xev": "3.0.2"
}, },
"devDependencies": { "devDependencies": {
"@swc/cli": "^0.1.59",
"@swc/core": "^1.3.26",
"@types/bcryptjs": "2.4.2", "@types/bcryptjs": "2.4.2",
"@types/bull": "3.15.9", "@types/bull": "3.15.9",
"@types/cbor": "6.0.0", "@types/cbor": "6.0.0",
@ -179,11 +167,21 @@
"@types/web-push": "3.3.2", "@types/web-push": "3.3.2",
"@types/websocket": "1.0.5", "@types/websocket": "1.0.5",
"@types/ws": "8.5.3", "@types/ws": "8.5.3",
"autobind-decorator": "2.4.0",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"eslint": "^8.31.0", "eslint": "^8.31.0",
"execa": "6.1.0", "execa": "6.1.0",
"json5": "2.2.3",
"json5-loader": "4.0.1",
"mocha": "10.2.0",
"pug": "3.0.2",
"strict-event-emitter-types": "2.0.0",
"swc-loader": "^0.2.3", "swc-loader": "^0.2.3",
"ts-loader": "9.4.2",
"ts-node": "10.9.1",
"tsconfig-paths": "4.1.2",
"typescript": "4.9.4", "typescript": "4.9.4",
"webpack": "^5.75.0" "webpack": "^5.75.0",
"ws": "8.11.0"
} }
} }

View File

@ -7,13 +7,32 @@
"lint": "pnpm rome check \"src/**/*.{ts,vue}\"" "lint": "pnpm rome check \"src/**/*.{ts,vue}\""
}, },
"dependencies": { "dependencies": {
"@discordapp/twemoji": "14.0.2",
},
"devDependencies": {
"@rollup/plugin-alias": "3.1.9", "@rollup/plugin-alias": "3.1.9",
"@rollup/plugin-json": "4.1.0", "@rollup/plugin-json": "4.1.0",
"@rollup/pluginutils": "^4.2.1", "@rollup/pluginutils": "^4.2.1",
"@syuilo/aiscript": "0.11.1", "@types/escape-regexp": "0.0.1",
"@types/glob": "8.0.0",
"@types/gulp": "4.0.10",
"@types/gulp-rename": "2.0.1",
"@types/katex": "0.14.0",
"@types/matter-js": "0.18.2",
"@types/punycode": "2.1.0",
"@types/seedrandom": "3.0.4",
"@types/throttle-debounce": "5.0.0",
"@types/tinycolor2": "1.4.3",
"@types/uuid": "8.3.4",
"@vitejs/plugin-vue": "4.0.0", "@vitejs/plugin-vue": "4.0.0",
"@vue/compiler-sfc": "3.2.45", "@vue/compiler-sfc": "3.2.45",
"cross-env": "7.0.3",
"cypress": "10.11.0",
"rollup": "3.9.1",
"start-server-and-test": "1.15.2",
"typescript": "4.9.4",
"@discordapp/twemoji": "14.0.2",
"@syuilo/aiscript": "0.11.1",
"autobind-decorator": "2.4.0", "autobind-decorator": "2.4.0",
"autosize": "5.0.2", "autosize": "5.0.2",
"blurhash": "1.1.5", "blurhash": "1.1.5",
@ -54,7 +73,6 @@
"tsc-alias": "1.8.2", "tsc-alias": "1.8.2",
"tsconfig-paths": "4.1.2", "tsconfig-paths": "4.1.2",
"twemoji-parser": "14.0.0", "twemoji-parser": "14.0.0",
"typescript": "4.9.4",
"uuid": "9.0.0", "uuid": "9.0.0",
"vanilla-tilt": "1.8.0", "vanilla-tilt": "1.8.0",
"vite": "^4.1.0-beta.1", "vite": "^4.1.0-beta.1",
@ -63,22 +81,5 @@
"vue-plyr": "^7.0.0", "vue-plyr": "^7.0.0",
"vue-prism-editor": "2.0.0-alpha.2", "vue-prism-editor": "2.0.0-alpha.2",
"vuedraggable": "4.1.0" "vuedraggable": "4.1.0"
},
"devDependencies": {
"@types/escape-regexp": "0.0.1",
"@types/glob": "8.0.0",
"@types/gulp": "4.0.10",
"@types/gulp-rename": "2.0.1",
"@types/katex": "0.14.0",
"@types/matter-js": "0.18.2",
"@types/punycode": "2.1.0",
"@types/seedrandom": "3.0.4",
"@types/throttle-debounce": "5.0.0",
"@types/tinycolor2": "1.4.3",
"@types/uuid": "8.3.4",
"cross-env": "7.0.3",
"cypress": "10.11.0",
"rollup": "3.9.1",
"start-server-and-test": "1.15.2"
} }
} }

View File

@ -7,15 +7,14 @@
"lint": "pnpm rome check \"src/**/*.ts\"" "lint": "pnpm rome check \"src/**/*.ts\""
}, },
"dependencies": { "dependencies": {
"@swc/cli": "^0.1.59",
"@swc/core": "^1.3.26",
"calckey-js": "^0.0.20",
"idb-keyval": "^6.2.0"
},
"optionalDependencies": {
"@swc/core-android-arm64": "1.3.11"
}, },
"devDependencies": { "devDependencies": {
"@swc/cli": "^0.1.59",
"@swc/core": "^1.3.26",
"@swc/core-android-arm64": "1.3.11",
"calckey-js": "^0.0.20",
"idb-keyval": "^6.2.0",
"swc-loader": "^0.2.3", "swc-loader": "^0.2.3",
"webpack": "^5.75.0" "webpack": "^5.75.0"
} }

File diff suppressed because it is too large Load Diff