diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8b6d5d1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +# use the official Bun image +# see all versions at https://hub.docker.com/r/oven/bun/tags +FROM 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 base AS prerelease +COPY --from=install /temp/dev/node_modules node_modules +COPY . . + +# 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/mqtt.js . +COPY --from=prerelease /usr/src/app/package.json . + +# run the app +USER bun +ENTRYPOINT [ "bun", "run", "mqtt.js" ] diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..e9cefe1 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,11 @@ +version: '3' +services: + liveqso: + build: + dockerfile: ./Dockerfile + container_name: liveqso + ports: + - 8000:8000 # Exposed port - see WEBPORT above + volumes: + - ./config.js:/usr/src/app/config.js + restart: unless-stopped