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:
commit
6acde3f034
@ -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
23
.gitignore
vendored
@ -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*
|
|
||||||
|
50
Dockerfile
50
Dockerfile
@ -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" ]
|
||||||
|
16
package.json
16
package.json
@ -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",
|
||||||
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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"
|
||||||
}
|
}
|
||||||
|
1464
pnpm-lock.yaml
1464
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user