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" ]
							 | 
						|
								
							 |