From 158f1d32e9a4cb107c0d6e96ce8f6f489707dc6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20R=C3=B6del?= Date: Sun, 16 Oct 2022 12:13:19 +0200 Subject: [PATCH] Add non-Nix Dockerfile Tested using: podman build --build-arg SITE=angestoepselt . podman run -p 8123:80 -e ZAMMAD_TOKEN=1 -e HCAPTCHA_SITE_KEY=1 -e HCAPTCHA_SECRET_KEY=1 --- .eleventy.js | 4 ++- Dockerfile | 59 ++++++++++++++++++++++++++++++++++ flake.nix | 2 +- sites/angestoepselt/httpd.conf | 2 +- 4 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 Dockerfile diff --git a/.eleventy.js b/.eleventy.js index 3ba2fb9..724fd46 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -19,7 +19,9 @@ function hyphenize(input) { module.exports = function (eleventyConfig) { const siteName = process.env.SITE; if (!siteName) { - throw 'Cannot determine the name of the site to build. Make sure to set the SITE environment variable.'; + throw new Error( + 'Cannot determine the name of the site to build. Make sure to set the SITE environment variable.' + ); } eleventyConfig.addPlugin(pluginRss); diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..487d897 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,59 @@ +# +# Static site build phase +# +FROM node:16 as build +ARG SITE + +WORKDIR /build + +COPY package.json package-lock.json /build/ +RUN npm ci + +COPY styles /build/styles/ +RUN npm run build:styles + +COPY .eleventy* /build/ +COPY assets /build/assets/ +COPY includes /build/includes/ +COPY sites/${SITE} /build/sites/${SITE}/ +RUN SITE=${SITE} npm run build + + +# +# Actual server container +# +FROM python:3.10-alpine +ARG SITE + +# Install dependencies, see flake.nix for details. +RUN apk add --no-cache lighttpd && \ + python -m pip install itsdangerous requests + +COPY --from=build /build/dist /www/ +COPY cgi-bin /cgi-bin/ +COPY sites/${SITE}/httpd.conf /httpd.conf + +# Patch the lighttpd config file. These placeholders expect a Nix derivation +# path, so the Python binary used in the end is at @python@/bin/python. The +# values here make sure they are found correctly in the non-Nix container, +# even though the might not necessarily make sense directly. +RUN sed -i \ + -e "s,@mimetypes@,/etc/lighttpd/mime-types.conf,g" \ + -e "s,@python@,/usr/local,g" \ + -e "s,@site@,/www,g" \ + -e "s,@cgibin@,/cgi-bin,g" \ + /httpd.conf + +EXPOSE 80/tcp +# Note: these are just those environment variables that have a default variable +# and are optional, the non optional ones *will* need to be set by the user. +ENV ZAMMAD_URL=https://ticket.z31.it +ENV ZAMMAD_GROUP="" + +HEALTHCHECK --interval=30s --timeout=10s --retries=3 \ + CMD curl --fail localhost || exit 1 + +# Reroute stdout to a new file descriptor so that Lighttpd can use it as the +# access log. See http.conf and here: +# https://redmine.lighttpd.net/boards/2/topics/8382 +ENTRYPOINT exec 3>&1 && /usr/sbin/lighttpd -Df /httpd.conf diff --git a/flake.nix b/flake.nix index 1ee8cb9..57b6139 100644 --- a/flake.nix +++ b/flake.nix @@ -42,9 +42,9 @@ lighttpdConfig = pkgs.substituteAll { src = ./sites/angestoepselt/httpd.conf; - inherit (pkgs) lighttpd; inherit (packages) site; inherit python; + mimetypes = "${pkgs.lighttpd}/share/lighttpd/doc/config/conf.d/mime.conf"; cgibin = pkgs.copyPathToStore ./cgi-bin; }; diff --git a/sites/angestoepselt/httpd.conf b/sites/angestoepselt/httpd.conf index 7402997..02b6bf0 100644 --- a/sites/angestoepselt/httpd.conf +++ b/sites/angestoepselt/httpd.conf @@ -5,7 +5,7 @@ server.port = 80 # See here: https://redmine.lighttpd.net/boards/2/topics/8382 accesslog.filename = "/dev/fd/3" -include "@lighttpd@/share/lighttpd/doc/config/conf.d/mime.conf" +include "@mimetypes@" server.document-root = "@site@" index-file.names = ( "index.html" )