diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c5fb1ef --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +node_modules +Dockerfile +.dockerignore +.git +.gitignore +README.md +LICENSE +.editorconfig +.idea +coverage* + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7693d73 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +# use the official Bun image +# see all versions at https://hub.docker.com/r/oven/bun/tags +FROM docker.io/oven/bun:1 as base +WORKDIR /usr/src/app + +# install dependencies into temp directory +# this will cache them and speed up future builds +FROM base AS install +RUN mkdir -p /temp/dev +COPY package.json bun.lockb /temp/dev/ +RUN cd /temp/dev && bun install --frozen-lockfile + +# install with --production (exclude devDependencies) +RUN mkdir -p /temp/prod +COPY package.json bun.lockb /temp/prod/ +RUN cd /temp/prod && bun install --frozen-lockfile --production + +# copy node_modules from temp directory +# then copy all (non-ignored) project files into the image +FROM install AS prerelease +COPY --from=install /temp/dev/node_modules node_modules +COPY . . + +# [optional] tests & build +ENV NODE_ENV=production +RUN bun test +RUN bun run build + +# copy production dependencies and source code into final image +FROM base AS release +COPY --from=install /temp/prod/node_modules node_modules +COPY --from=prerelease /usr/src/app/index.ts . +COPY --from=prerelease /usr/src/app/package.json . + +# run the app +USER bun +EXPOSE 8000/tcp +EXPOSE 8080/tcp +ENTRYPOINT [ "bun", "run", "index.ts" ] + diff --git a/bun.lockb b/bun.lockb index 866b480..0b96ba4 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 8d9ff67..e42eb85 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,17 @@ "scripts": { "start": "bun run server.ts", "init": "mkdir -p /tmp/sanic/{music,playlists}; touch /tmp/sanic/mpd_db", - "mpd": "mpd --no-daemon ./mpd.conf" + "mpd": "mpd --no-daemon ./mpd.conf", + "docker-build": "docker build --pull -t sanic .", + "docker-run": "docker run -it --rm -p 8000:8000 -p 8080:8080 sanic" }, "devDependencies": { "bun-types": "latest" }, "peerDependencies": { "typescript": "^5.0.0" + }, + "dependencies": { + "react": "^18.2.0" } }