summary refs log tree commit diff stats
path: root/Dockerfile
diff options
context:
space:
mode:
Diffstat (limited to 'Dockerfile')
-rw-r--r--Dockerfile60
1 files changed, 60 insertions, 0 deletions
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..79533e9
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,60 @@
+# syntax = docker/dockerfile:1
+
+# Adjust BUN_VERSION as desired
+ARG BUN_VERSION=0.8.1
+ARG ZOLA_VERSION=0.17.1
+FROM oven/bun:${BUN_VERSION} as base
+
+LABEL fly_launch_runtime="Bun"
+
+# Bun app lives here
+WORKDIR /app
+
+# Set production environment
+ENV NODE_ENV="production"
+
+# Throw-away build stage to reduce size of final image
+FROM base as build
+
+# # Install packages needed to build node modules
+# RUN apt-get update -qq && \
+#     apt-get install -y build-essential pkg-config python-is-python3
+
+# Install node modules
+COPY --link bun.lockb package.json ./
+RUN bun install --ci
+
+# Copy application code
+COPY --link src src
+
+FROM ghcr.io/getzola/zola:v${ZOLA_VERSION} as ssg
+
+WORKDIR /web
+
+COPY --link website ./
+
+RUN [ "zola", "build", "--force" ]
+
+FROM alpine:edge as postprocess
+
+WORKDIR /web
+
+RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
+
+RUN apk add --no-cache prettier@testing make fd brotli gzip zstd
+
+COPY --from=ssg /web ./
+
+RUN make -j4 format compress
+
+# Final stage for app image
+FROM base
+
+# Copy built application
+COPY --from=build /app /app
+COPY --from=postprocess /web/ /app/website
+
+# Start the server by default, this can be overwritten at runtime
+EXPOSE 3000
+EXPOSE 9091
+CMD [ "bun", "run", "src/index.ts" ]