diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 00000000..913b5645 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,33 @@ +# syntax=docker/dockerfile:1 + + +# docker build -f web/Dockerfile -t cobalt-web . + +FROM node:20-alpine AS builder + +WORKDIR /repo + +RUN npm install -g pnpm + +# Copy monorepo into container +COPY . . + +# Install all deps for monorepo +RUN pnpm install --frozen-lockfile + +WORKDIR /repo/web +RUN pnpm --filter ./web run build + + +FROM nginx:alpine + +WORKDIR /usr/share/nginx/html +COPY --from=builder /repo/web/build . + +COPY web/docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod +x /docker-entrypoint.sh + +EXPOSE 80 + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/web/docker-entrypoint.sh b/web/docker-entrypoint.sh new file mode 100644 index 00000000..3d74020a --- /dev/null +++ b/web/docker-entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +# Replace config placeholders with runtime values +if [ -f "/usr/share/nginx/html/runtime-config.js" ]; then + envsubst '${WEB_HOST} ${WEB_PLAUSIBLE_HOST} ${WEB_DEFAULT_API}' \ + < /usr/share/nginx/html/runtime-config.js \ + > /usr/share/nginx/html/runtime-config.tmp.js && \ + mv /usr/share/nginx/html/runtime-config.tmp.js /usr/share/nginx/html/runtime-config.js +fi + +exec "$@" \ No newline at end of file diff --git a/web/pnpm-workspace.yaml b/web/pnpm-workspace.yaml new file mode 100644 index 00000000..d7ab6cba --- /dev/null +++ b/web/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - "api" + - "web" + - "packages/*" diff --git a/web/static/runtime-config.js b/web/static/runtime-config.js new file mode 100644 index 00000000..94fcb40b --- /dev/null +++ b/web/static/runtime-config.js @@ -0,0 +1,5 @@ +window.COBALT_CONFIG = { + WEB_HOST: "${WEB_HOST}", + WEB_PLAUSIBLE_HOST: "${WEB_PLAUSIBLE_HOST}", + WEB_DEFAULT_API: "${WEB_DEFAULT_API}" +}; \ No newline at end of file