WIP. A little custom music server
at main 1.3 kB view raw
1FROM oven/bun:alpine AS base 2WORKDIR /app 3 4FROM base AS install 5RUN mkdir -p /temp/dev 6COPY package.json bun.lock /temp/dev/ 7COPY ./backend/package.json /temp/dev/backend/ 8COPY ./shared/package.json /temp/dev/shared/ 9COPY ./web/package.json /temp/dev/web/ 10 11RUN cd /temp/dev && bun install --frozen-lockfile 12# Prod deps 13RUN mkdir -p /temp/prod 14COPY package.json bun.lock /temp/prod/ 15COPY ./backend/package.json /temp/prod/backend/ 16COPY ./shared/package.json /temp/prod/shared/ 17COPY ./web/package.json /temp/prod/web/ 18RUN cd /temp/prod && bun install --frozen-lockfile --production 19 20FROM base AS prerelease 21COPY --from=install /temp/dev/node_modules node_modules 22COPY . . 23ENV NODE_ENV=production 24WORKDIR /app/backend 25RUN bun run build 26WORKDIR /app 27 28FROM base AS release 29COPY --from=install /temp/prod/node_modules node_modules 30COPY --from=prerelease /app/backend/dist . 31# Copy migration files (SQL schemas) 32COPY --from=prerelease /app/backend/drizzle ./drizzle 33 34# Create directories for volumes with proper ownership 35RUN mkdir -p /app/data /app/music && \ 36 chown -R bun:bun /app/data /app/music 37 38# Declare volumes 39VOLUME ["/app/data", "/app/music"] 40 41USER bun 42EXPOSE 3003/tcp 43 44# Set default environment variables 45ENV DB_URL=/app/data/boombox.db 46ENV FOLDER_PATH=/app/music 47 48ENTRYPOINT [ "bun", "index.js" ]