Cobalt Web image Dockerfile

Build and run image with

```
docker build -f web/Dockerfile -t cobalt-web .
docker run -e WEB_DEFAULT_API="https://real.api.endpoint" -e WEB_HOST="http://abc"  -e WEB_PLAUSIBLE_HOST="def" -p 800:80 cobalt-web
```

Currently, vite build still uses process.env env-vars at build time, so the docker container is not using those defined via placeholders in `runtime-config.js`
This commit is contained in:
Jonathan Chemla 2025-06-25 12:56:36 +02:00
parent 35530459b6
commit 782045dd82
4 changed files with 54 additions and 0 deletions

33
web/Dockerfile Normal file
View File

@ -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;"]

12
web/docker-entrypoint.sh Normal file
View File

@ -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 "$@"

4
web/pnpm-workspace.yaml Normal file
View File

@ -0,0 +1,4 @@
packages:
- "api"
- "web"
- "packages/*"

View File

@ -0,0 +1,5 @@
window.COBALT_CONFIG = {
WEB_HOST: "${WEB_HOST}",
WEB_PLAUSIBLE_HOST: "${WEB_PLAUSIBLE_HOST}",
WEB_DEFAULT_API: "${WEB_DEFAULT_API}"
};