WIP. A little custom music server
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" ]