diff --git a/.env.example b/.env.example index 689378b..ce66f4f 100644 --- a/.env.example +++ b/.env.example @@ -2,7 +2,7 @@ HOST=0.0.0.0 PORT=8080 -REDIS_URL=redis://username:password@localhost:6379 +REDIS_URL=redis://dragonfly:6379 REDIS_TTL=3600 # seconds # this is only the default value if non is give in /id diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2438f47 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# use the official Bun image +# see all versions at https://hub.docker.com/r/oven/bun/tags +FROM oven/bun:latest AS base +WORKDIR /usr/src/app + +FROM base AS install +RUN mkdir -p /temp/dev +COPY package.json bun.lock /temp/dev/ +RUN cd /temp/dev && bun install --frozen-lockfile + +# install with --production (exclude devDependencies) +RUN mkdir -p /temp/prod +COPY package.json bun.lock /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 . . + +# [optional] tests & build +ENV NODE_ENV=production + +# 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/src ./src +COPY --from=prerelease /usr/src/app/public ./public +COPY --from=prerelease /usr/src/app/package.json . +COPY --from=prerelease /usr/src/app/tsconfig.json . +COPY --from=prerelease /usr/src/app/config ./config +COPY --from=prerelease /usr/src/app/types ./types + +RUN mkdir -p /usr/src/app/logs && chown bun:bun /usr/src/app/logs + +USER bun +ENTRYPOINT [ "bun", "run", "start" ] diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..f2c01ff --- /dev/null +++ b/compose.yml @@ -0,0 +1,29 @@ +services: + profile-page: + container_name: profilePage + build: + context: . + restart: unless-stopped + ports: + - "${PORT:-6600}:${PORT:-6600}" + env_file: + - .env + networks: + - profilePage-network + + dragonfly: + image: 'docker.dragonflydb.io/dragonflydb/dragonfly' + restart: unless-stopped + ulimits: + memlock: -1 + volumes: + - dragonflydata:/data + networks: + - profilePage-network + +volumes: + dragonflydata: + +networks: + profilePage-network: + driver: bridge