diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f7a644b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +dist +node_modules +README.md +.vscode \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b6d8a47 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +############################ +# Docker build environment # +############################ + +FROM node:18.16.1-bookworm AS build + +WORKDIR /build + +COPY . . + +RUN npm i +RUN npm run build + +############################ +# Docker final environment # +############################ + +FROM caddy:2.7.4-alpine + +EXPOSE 80 +WORKDIR /var/www/html + +COPY --from=build /build/dist/public-pool-ui . +COPY docker/Caddyfile.tpl /etc/Caddyfile.tpl +COPY docker/entrypoint.sh /entrypoint.sh + +CMD ["/bin/sh", "/entrypoint.sh"] diff --git a/README.md b/README.md index 2526751..3b0443d 100644 --- a/README.md +++ b/README.md @@ -37,3 +37,17 @@ Install pm2 (https://pm2.keymetrics.io/) ```bash $ pm2 serve --spa dist/public-pool-ui/ 3335 --name ui ``` + +## Docker + +```bash +$ docker build -t public-pool-ui . +$ docker run --name public-pool-ui --rm -p 8080:80 public-pool-ui +``` + +From Docker commands, website will be accessible on [http://localhost:8080](http://localhost:8080). By default Caddy server listen on port 80, but we bind it to port 8080 which allows you to launch image without root permissions. + +Available variables: +* `DOMAIN`: website domain (default: `localhost`) +* `LOGLEVEL`: loglevel in stdout (default: `INFO`) +* `LOGFORMAT`: log format in stdout (default: `json`) diff --git a/docker/Caddyfile.tpl b/docker/Caddyfile.tpl new file mode 100644 index 0000000..c89e284 --- /dev/null +++ b/docker/Caddyfile.tpl @@ -0,0 +1,10 @@ +http://%%DOMAIN%% { + root * /var/www/html + file_server + + log { + output stdout + format %%LOGFORMAT%% + level %%LOGLEVEL%% + } +} diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 0000000..7c11a05 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +if [ ! -e "/etc/Caddyfile" ]; then + sed -i "s#%%DOMAIN%%#${DOMAIN:-localhost}#g" /etc/Caddyfile.tpl + sed -i "s#%%LOGLEVEL%%#${LOGLEVEL:-INFO}#g" /etc/Caddyfile.tpl + sed -i "s#%%LOGFORMAT%%#${LOGFORMAT:-json}#g" /etc/Caddyfile.tpl + mv /etc/Caddyfile.tpl /etc/Caddyfile +else + rm -f /etc/Caddyfile.tpl +fi + +exec caddy run --config /etc/Caddyfile