mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
ARG NUSQLITE3_DIR="/usr/local/lib/nusqlite3"
 | 
						|
ARG NUSQLITE3_PATH="${NUSQLITE3_DIR}/libnusqlite3.so"
 | 
						|
 | 
						|
### STAGE 0: Build client ###
 | 
						|
FROM node:20-alpine AS build-client
 | 
						|
 | 
						|
WORKDIR /client
 | 
						|
COPY /client /client
 | 
						|
RUN npm ci && npm cache clean --force
 | 
						|
RUN npm run generate
 | 
						|
 | 
						|
### STAGE 1: Build server ###
 | 
						|
FROM node:20-alpine AS build-server
 | 
						|
 | 
						|
ARG NUSQLITE3_DIR
 | 
						|
ARG TARGETPLATFORM
 | 
						|
 | 
						|
ENV NODE_ENV=production
 | 
						|
 | 
						|
RUN apk add --no-cache --update \
 | 
						|
  curl \
 | 
						|
  make \
 | 
						|
  python3 \
 | 
						|
  g++ \
 | 
						|
  unzip
 | 
						|
 | 
						|
WORKDIR /server
 | 
						|
COPY index.js package* /server
 | 
						|
COPY /server /server/server
 | 
						|
 | 
						|
RUN case "$TARGETPLATFORM" in \
 | 
						|
  "linux/amd64") \
 | 
						|
  curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.2/libnusqlite3-linux-musl-x64.zip" ;; \
 | 
						|
  "linux/arm64") \
 | 
						|
  curl -L -o /tmp/library.zip "https://github.com/mikiher/nunicode-sqlite/releases/download/v1.2/libnusqlite3-linux-musl-arm64.zip" ;; \
 | 
						|
  *) echo "Unsupported platform: $TARGETPLATFORM" && exit 1 ;; \
 | 
						|
  esac && \
 | 
						|
  unzip /tmp/library.zip -d $NUSQLITE3_DIR && \
 | 
						|
  rm /tmp/library.zip
 | 
						|
 | 
						|
RUN npm ci --only=production
 | 
						|
 | 
						|
### STAGE 2: Create minimal runtime image ###
 | 
						|
FROM node:20-alpine
 | 
						|
 | 
						|
ARG NUSQLITE3_DIR
 | 
						|
ARG NUSQLITE3_PATH
 | 
						|
 | 
						|
# Install only runtime dependencies
 | 
						|
RUN apk add --no-cache --update \
 | 
						|
  tzdata \
 | 
						|
  ffmpeg \
 | 
						|
  tini
 | 
						|
 | 
						|
WORKDIR /app
 | 
						|
 | 
						|
# Copy compiled frontend and server from build stages
 | 
						|
COPY --from=build-client /client/dist /app/client/dist
 | 
						|
COPY --from=build-server /server /app
 | 
						|
COPY --from=build-server ${NUSQLITE3_PATH} ${NUSQLITE3_PATH}
 | 
						|
 | 
						|
EXPOSE 80
 | 
						|
 | 
						|
ENV PORT=80
 | 
						|
ENV NODE_ENV=production
 | 
						|
ENV CONFIG_PATH="/config"
 | 
						|
ENV METADATA_PATH="/metadata"
 | 
						|
ENV SOURCE="docker"
 | 
						|
ENV NUSQLITE3_DIR=${NUSQLITE3_DIR}
 | 
						|
ENV NUSQLITE3_PATH=${NUSQLITE3_PATH}
 | 
						|
 | 
						|
ENTRYPOINT ["tini", "--"]
 | 
						|
CMD ["node", "index.js"]
 |