mirror of https://github.com/ghostfolio/ghostfolio
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							70 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							70 lines
						
					
					
						
							2.1 KiB
						
					
					
				| FROM --platform=$BUILDPLATFORM node:22-slim AS builder | |
|  | |
| # Build application and add additional files | |
| WORKDIR /ghostfolio | |
|  | |
| RUN apt-get update && apt-get install -y --no-install-suggests \ | |
|   g++ \ | |
|   git \ | |
|   make \ | |
|   openssl \ | |
|   python3 \ | |
|   && rm -rf /var/lib/apt/lists/* | |
|  | |
| # Only add basic files without the application itself to avoid rebuilding | |
| # layers when files (package.json etc.) have not changed | |
| COPY ./.config .config/ | |
| COPY ./CHANGELOG.md CHANGELOG.md | |
| COPY ./LICENSE LICENSE | |
| COPY ./package.json package.json | |
| COPY ./package-lock.json package-lock.json | |
| COPY ./prisma/schema.prisma prisma/ | |
|  | |
| RUN npm install | |
|  | |
| # See https://github.com/nrwl/nx/issues/6586 for further details | |
| COPY ./decorate-angular-cli.js decorate-angular-cli.js | |
| RUN node decorate-angular-cli.js | |
|  | |
| COPY ./apps apps/ | |
| COPY ./libs libs/ | |
| COPY ./jest.config.ts jest.config.ts | |
| COPY ./jest.preset.js jest.preset.js | |
| COPY ./nx.json nx.json | |
| COPY ./replace.build.mjs replace.build.mjs | |
| COPY ./tsconfig.base.json tsconfig.base.json | |
|  | |
| ENV NX_DAEMON=false | |
| RUN npm run build:production | |
|  | |
| # Prepare the dist image with additional node_modules | |
| WORKDIR /ghostfolio/dist/apps/api | |
| # package.json was generated by the build process, however the original | |
| # package-lock.json needs to be used to ensure the same versions | |
| COPY ./package-lock.json /ghostfolio/dist/apps/api/ | |
|  | |
| RUN npm install | |
| COPY .config /ghostfolio/dist/apps/api/.config/ | |
| COPY prisma /ghostfolio/dist/apps/api/prisma/ | |
|  | |
| # Overwrite the generated package.json with the original one to ensure having | |
| # all the scripts | |
| COPY package.json /ghostfolio/dist/apps/api/ | |
| RUN npm run database:generate-typings | |
|  | |
| # Image to run, copy everything needed from builder | |
| FROM node:22-slim | |
| LABEL org.opencontainers.image.source="https://github.com/ghostfolio/ghostfolio" | |
| ENV NODE_ENV=production | |
| 
 | |
| RUN apt-get update && apt-get install -y --no-install-suggests \ | |
|   curl \ | |
|   openssl \ | |
|   && rm -rf /var/lib/apt/lists/* | |
|  | |
| COPY --chown=node:node --from=builder /ghostfolio/dist/apps /ghostfolio/apps/ | |
| COPY --chown=node:node ./docker/entrypoint.sh /ghostfolio/ | |
| WORKDIR /ghostfolio/apps/api | |
| EXPOSE ${PORT:-3333} | |
| USER node | |
| CMD [ "/ghostfolio/entrypoint.sh" ]
 | |
| 
 |