mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	chore: reduce docker image size (#1523)
* chore: remove @tensorflow/tfjs-node-gpu as it is unused * chore: remove ffmpeg from machine-learning docker image * chore: remove unneeded dependencies + move dev dependencies in server * chore: reduce server image size * chore: machine-learning remove extraneous dependencies * chore: web remove extraneous dependencies * chore: web Dockerfile reduce production image size * chore: add exiftool-vendored.pl as a dependency
This commit is contained in:
		| @@ -1,4 +1,3 @@ | |||||||
|  |  | ||||||
| FROM node:16-bullseye-slim as builder | FROM node:16-bullseye-slim as builder | ||||||
|  |  | ||||||
| ARG DEBIAN_FRONTEND=noninteractive | ARG DEBIAN_FRONTEND=noninteractive | ||||||
| @@ -6,7 +5,7 @@ ARG DEBIAN_FRONTEND=noninteractive | |||||||
| WORKDIR /usr/src/app | WORKDIR /usr/src/app | ||||||
|  |  | ||||||
| RUN apt-get update | RUN apt-get update | ||||||
| RUN apt-get install gcc g++ make cmake python3 python3-pip ffmpeg -y | RUN apt-get install gcc g++ make cmake python3 python3-pip -y | ||||||
|  |  | ||||||
| COPY package.json package-lock.json ./ | COPY package.json package-lock.json ./ | ||||||
|  |  | ||||||
| @@ -15,24 +14,17 @@ RUN npm rebuild @tensorflow/tfjs-node --build-from-source | |||||||
|  |  | ||||||
| COPY . . | COPY . . | ||||||
|  |  | ||||||
|  |  | ||||||
| FROM builder as prod | FROM builder as prod | ||||||
|  |  | ||||||
| RUN npm run build | RUN npm run build | ||||||
|  |  | ||||||
| RUN npm prune --omit=dev | RUN npm prune --omit=dev | ||||||
|  |  | ||||||
|  |  | ||||||
| FROM node:16-bullseye-slim | FROM node:16-bullseye-slim | ||||||
|  |  | ||||||
| ARG DEBIAN_FRONTEND=noninteractive | ARG DEBIAN_FRONTEND=noninteractive | ||||||
|  |  | ||||||
| WORKDIR /usr/src/app | WORKDIR /usr/src/app | ||||||
|  |  | ||||||
| RUN apt-get update \ |  | ||||||
|   && apt-get install -y ffmpeg \ |  | ||||||
|   && rm -rf /var/cache/apt/lists |  | ||||||
|  |  | ||||||
| COPY --from=prod /usr/src/app/node_modules ./node_modules | COPY --from=prod /usr/src/app/node_modules ./node_modules | ||||||
| COPY --from=prod /usr/src/app/dist ./dist | COPY --from=prod /usr/src/app/dist ./dist | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										565
									
								
								machine-learning/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										565
									
								
								machine-learning/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -23,19 +23,9 @@ | |||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@nestjs/common": "^8.0.0", |     "@nestjs/common": "^8.0.0", | ||||||
|     "@nestjs/core": "^8.0.0", |     "@nestjs/core": "^8.0.0", | ||||||
|     "@nestjs/mapped-types": "^1.0.1", |  | ||||||
|     "@nestjs/platform-express": "^8.0.0", |  | ||||||
|     "@tensorflow-models/coco-ssd": "^2.2.2", |     "@tensorflow-models/coco-ssd": "^2.2.2", | ||||||
|     "@tensorflow-models/mobilenet": "^2.1.0", |     "@tensorflow-models/mobilenet": "^2.1.0", | ||||||
|     "@tensorflow/tfjs": "^3.19.0", |     "@tensorflow/tfjs-node": "^3.19.0" | ||||||
|     "@tensorflow/tfjs-converter": "^3.19.0", |  | ||||||
|     "@tensorflow/tfjs-core": "^3.19.0", |  | ||||||
|     "@tensorflow/tfjs-node": "^3.19.0", |  | ||||||
|     "@tensorflow/tfjs-node-gpu": "^3.19.0", |  | ||||||
|     "@trpc/server": "^9.20.3", |  | ||||||
|     "reflect-metadata": "^0.1.13", |  | ||||||
|     "rimraf": "^3.0.2", |  | ||||||
|     "rxjs": "^7.2.0" |  | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@nestjs/cli": "^8.2.4", |     "@nestjs/cli": "^8.2.4", | ||||||
| @@ -52,6 +42,7 @@ | |||||||
|     "eslint-plugin-prettier": "^4.0.0", |     "eslint-plugin-prettier": "^4.0.0", | ||||||
|     "jest": "^27.2.5", |     "jest": "^27.2.5", | ||||||
|     "prettier": "^2.3.2", |     "prettier": "^2.3.2", | ||||||
|  |     "rimraf": "^3.0.2", | ||||||
|     "source-map-support": "^0.5.20", |     "source-map-support": "^0.5.20", | ||||||
|     "supertest": "^6.1.3", |     "supertest": "^6.1.3", | ||||||
|     "ts-jest": "^27.0.3", |     "ts-jest": "^27.0.3", | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ FROM node:16-alpine3.14 as builder | |||||||
|  |  | ||||||
| WORKDIR /usr/src/app | WORKDIR /usr/src/app | ||||||
|  |  | ||||||
| RUN apk add --update-cache build-base python3 libheif vips-dev ffmpeg exiftool perl | RUN apk add --update-cache build-base python3 libheif vips-dev ffmpeg perl | ||||||
|  |  | ||||||
| COPY package.json package-lock.json ./ | COPY package.json package-lock.json ./ | ||||||
|  |  | ||||||
| @@ -14,14 +14,14 @@ COPY . . | |||||||
| FROM builder as prod | FROM builder as prod | ||||||
|  |  | ||||||
| RUN npm run build | RUN npm run build | ||||||
| RUN npm prune --omit=dev | RUN npm prune --omit=dev --omit=optional | ||||||
|  |  | ||||||
|  |  | ||||||
| FROM node:16-alpine3.14 | FROM node:16-alpine3.14 | ||||||
|  |  | ||||||
| WORKDIR /usr/src/app | WORKDIR /usr/src/app | ||||||
|  |  | ||||||
| RUN apk add --no-cache libheif vips ffmpeg exiftool perl | RUN apk add --no-cache libheif vips ffmpeg perl | ||||||
|  |  | ||||||
| COPY --from=prod /usr/src/app/node_modules ./node_modules | COPY --from=prod /usr/src/app/node_modules ./node_modules | ||||||
| COPY --from=prod /usr/src/app/dist ./dist | COPY --from=prod /usr/src/app/dist ./dist | ||||||
| @@ -32,7 +32,7 @@ COPY LICENSE /LICENSE | |||||||
| COPY package.json package-lock.json ./ | COPY package.json package-lock.json ./ | ||||||
| COPY start-server.sh start-microservices.sh ./ | COPY start-server.sh start-microservices.sh ./ | ||||||
|  |  | ||||||
| RUN npm link | RUN npm link && npm cache clean --force | ||||||
|  |  | ||||||
| VOLUME /usr/src/app/upload | VOLUME /usr/src/app/upload | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										1245
									
								
								server/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1245
									
								
								server/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -42,7 +42,6 @@ | |||||||
|     "@nestjs/common": "^9.2.1", |     "@nestjs/common": "^9.2.1", | ||||||
|     "@nestjs/config": "^2.2.0", |     "@nestjs/config": "^2.2.0", | ||||||
|     "@nestjs/core": "^9.2.1", |     "@nestjs/core": "^9.2.1", | ||||||
|     "@nestjs/mapped-types": "1.2.0", |  | ||||||
|     "@nestjs/platform-express": "^9.2.1", |     "@nestjs/platform-express": "^9.2.1", | ||||||
|     "@nestjs/platform-socket.io": "^9.2.1", |     "@nestjs/platform-socket.io": "^9.2.1", | ||||||
|     "@nestjs/schedule": "^2.1.0", |     "@nestjs/schedule": "^2.1.0", | ||||||
| @@ -58,15 +57,11 @@ | |||||||
|     "class-validator": "^0.13.2", |     "class-validator": "^0.13.2", | ||||||
|     "cookie-parser": "^1.4.6", |     "cookie-parser": "^1.4.6", | ||||||
|     "diskusage": "^1.1.3", |     "diskusage": "^1.1.3", | ||||||
|     "dotenv": "^14.2.0", |  | ||||||
|     "exiftool-vendored": "^19.0.0", |     "exiftool-vendored": "^19.0.0", | ||||||
|     "fdir": "^5.3.0", |     "exiftool-vendored.pl": "^12.54.0", | ||||||
|     "fluent-ffmpeg": "^2.1.2", |     "fluent-ffmpeg": "^2.1.2", | ||||||
|     "geo-tz": "^7.0.2", |  | ||||||
|     "handlebars": "^4.7.7", |     "handlebars": "^4.7.7", | ||||||
|     "i18n-iso-countries": "^7.5.0", |     "i18n-iso-countries": "^7.5.0", | ||||||
|     "ioredis": "^5.2.4", |  | ||||||
|     "jest-when": "^3.5.2", |  | ||||||
|     "joi": "^17.5.0", |     "joi": "^17.5.0", | ||||||
|     "local-reverse-geocoder": "0.12.5", |     "local-reverse-geocoder": "0.12.5", | ||||||
|     "lodash": "^4.17.21", |     "lodash": "^4.17.21", | ||||||
| @@ -77,11 +72,9 @@ | |||||||
|     "pg": "^8.8.0", |     "pg": "^8.8.0", | ||||||
|     "redis": "^4.5.1", |     "redis": "^4.5.1", | ||||||
|     "reflect-metadata": "^0.1.13", |     "reflect-metadata": "^0.1.13", | ||||||
|     "rimraf": "^3.0.2", |  | ||||||
|     "rxjs": "^7.2.0", |     "rxjs": "^7.2.0", | ||||||
|     "sanitize-filename": "^1.6.3", |     "sanitize-filename": "^1.6.3", | ||||||
|     "sharp": "^0.28.0", |     "sharp": "^0.28.0", | ||||||
|     "systeminformation": "^5.11.0", |  | ||||||
|     "typeorm": "^0.3.11" |     "typeorm": "^0.3.11" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
| @@ -107,11 +100,14 @@ | |||||||
|     "@types/supertest": "^2.0.11", |     "@types/supertest": "^2.0.11", | ||||||
|     "@typescript-eslint/eslint-plugin": "^5.48.1", |     "@typescript-eslint/eslint-plugin": "^5.48.1", | ||||||
|     "@typescript-eslint/parser": "^5.48.1", |     "@typescript-eslint/parser": "^5.48.1", | ||||||
|  |     "dotenv": "^14.2.0", | ||||||
|     "eslint": "^8.31.0", |     "eslint": "^8.31.0", | ||||||
|     "eslint-config-prettier": "^8.3.0", |     "eslint-config-prettier": "^8.3.0", | ||||||
|     "eslint-plugin-prettier": "^4.0.0", |     "eslint-plugin-prettier": "^4.0.0", | ||||||
|     "jest": "^27.2.5", |     "jest": "^27.2.5", | ||||||
|  |     "jest-when": "^3.5.2", | ||||||
|     "prettier": "^2.3.2", |     "prettier": "^2.3.2", | ||||||
|  |     "rimraf": "^3.0.2", | ||||||
|     "source-map-support": "^0.5.20", |     "source-map-support": "^0.5.20", | ||||||
|     "supertest": "^6.1.3", |     "supertest": "^6.1.3", | ||||||
|     "ts-jest": "^27.0.3", |     "ts-jest": "^27.0.3", | ||||||
|   | |||||||
| @@ -1,29 +1,40 @@ | |||||||
| # Our Node base image | # Our Node base image | ||||||
| FROM node:16-alpine3.14 as base | FROM node:16-alpine3.14 as base | ||||||
|  |  | ||||||
| COPY LICENSE /licenses/LICENSE.txt |  | ||||||
| COPY LICENSE /LICENSE |  | ||||||
|  |  | ||||||
| WORKDIR /usr/src/app | WORKDIR /usr/src/app | ||||||
|  | EXPOSE 3000 | ||||||
|  | RUN apk add --no-cache setpriv | ||||||
|  |  | ||||||
|  | FROM base as builder | ||||||
|  |  | ||||||
| RUN chown node:node /usr/src/app | RUN chown node:node /usr/src/app | ||||||
|  |  | ||||||
| RUN apk add --no-cache setpriv |  | ||||||
|  |  | ||||||
| COPY --chown=node:node package*.json ./ | COPY --chown=node:node package*.json ./ | ||||||
|  |  | ||||||
| RUN npm ci | RUN npm ci | ||||||
|  |  | ||||||
| COPY --chown=node:node . . | COPY --chown=node:node . . | ||||||
|  |  | ||||||
| RUN npm run build |  | ||||||
|  |  | ||||||
| EXPOSE 3000 | EXPOSE 3000 | ||||||
|  |  | ||||||
| FROM base AS dev | FROM builder AS dev | ||||||
| ENV CHOKIDAR_USEPOLLING=true | ENV CHOKIDAR_USEPOLLING=true | ||||||
| EXPOSE 24678 | EXPOSE 24678 | ||||||
| CMD ["npm", "run", "dev"] | CMD ["npm", "run", "dev"] | ||||||
|  |  | ||||||
| FROM base as prod | FROM builder AS prod | ||||||
|  |  | ||||||
|  | RUN npm run build | ||||||
|  | RUN npm prune --omit=dev | ||||||
|  |  | ||||||
|  | FROM base | ||||||
|  |  | ||||||
| ENV NODE_ENV=production | ENV NODE_ENV=production | ||||||
|  |  | ||||||
|  | WORKDIR /usr/src/app | ||||||
|  |  | ||||||
|  | COPY --from=prod /usr/src/app/node_modules ./node_modules | ||||||
|  | COPY --from=prod /usr/src/app/build ./build | ||||||
|  |  | ||||||
|  | COPY package.json package-lock.json ./ | ||||||
|  | COPY entrypoint.sh ./ | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -14,7 +14,6 @@ | |||||||
| 				"exifr": "^7.1.3", | 				"exifr": "^7.1.3", | ||||||
| 				"handlebars": "^4.7.7", | 				"handlebars": "^4.7.7", | ||||||
| 				"leaflet": "^1.8.0", | 				"leaflet": "^1.8.0", | ||||||
| 				"lodash": "^4.17.21", |  | ||||||
| 				"lodash-es": "^4.17.21", | 				"lodash-es": "^4.17.21", | ||||||
| 				"luxon": "^3.1.1", | 				"luxon": "^3.1.1", | ||||||
| 				"socket.io-client": "^4.5.1", | 				"socket.io-client": "^4.5.1", | ||||||
| @@ -8999,7 +8998,8 @@ | |||||||
| 		"node_modules/lodash": { | 		"node_modules/lodash": { | ||||||
| 			"version": "4.17.21", | 			"version": "4.17.21", | ||||||
| 			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | 			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | ||||||
| 			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" | 			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", | ||||||
|  | 			"dev": true | ||||||
| 		}, | 		}, | ||||||
| 		"node_modules/lodash-es": { | 		"node_modules/lodash-es": { | ||||||
| 			"version": "4.17.21", | 			"version": "4.17.21", | ||||||
| @@ -17880,7 +17880,8 @@ | |||||||
| 		"lodash": { | 		"lodash": { | ||||||
| 			"version": "4.17.21", | 			"version": "4.17.21", | ||||||
| 			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | 			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | ||||||
| 			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" | 			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", | ||||||
|  | 			"dev": true | ||||||
| 		}, | 		}, | ||||||
| 		"lodash-es": { | 		"lodash-es": { | ||||||
| 			"version": "4.17.21", | 			"version": "4.17.21", | ||||||
|   | |||||||
| @@ -66,7 +66,6 @@ | |||||||
| 		"exifr": "^7.1.3", | 		"exifr": "^7.1.3", | ||||||
| 		"handlebars": "^4.7.7", | 		"handlebars": "^4.7.7", | ||||||
| 		"leaflet": "^1.8.0", | 		"leaflet": "^1.8.0", | ||||||
| 		"lodash": "^4.17.21", |  | ||||||
| 		"lodash-es": "^4.17.21", | 		"lodash-es": "^4.17.21", | ||||||
| 		"luxon": "^3.1.1", | 		"luxon": "^3.1.1", | ||||||
| 		"socket.io-client": "^4.5.1", | 		"socket.io-client": "^4.5.1", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user