From 9a4e3cdc2710a8195fd75b521a1001ceb61266ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20P=C3=A9rez?= Date: Fri, 21 Nov 2025 21:40:44 +0100 Subject: [PATCH] Fix the Dockerfile (#630) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## Added - Ignore the `.pnpm-store` directory generated by the `pnpm` package manager. - Make the `eleventy` command render changes incrementally when in dev ("serve") mode. ## Changed - Rename the npm script `serve` to `dev` to improve clarity. - Update documentation to reflect new npm script name and Dockerfile volume mount point. ## Fixed - Update the `Dockerfile` to fix errors when building the documentation container. --- ## 1st problem The current version of the `README.md` tells to run this command: `docker build -t Codeberg/Documentation-server .` Unfortunately, it returns this error: ```bash docker build -t Codeberg/Documentation-server . [+] Building 0.0s (0/0) docker:default ERROR: invalid tag "Codeberg/Documentation-server": repository name must be lowercase ``` ## 2nd problem If you try to build an image with the current version of `Dockerfile`, this error occurs: ```bash [+] Building 2.7s (5/10) docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 409B 0.0s => [internal] load metadata for docker.io/library/node:16.15.1- 1.1s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => CACHED [1/7] FROM docker.io/library/node:16.15.1-stretch-sli 0.0s => ERROR [2/7] RUN apt-get update && apt-get -y upgrade 1.4s ------ > [2/7] RUN apt-get update && apt-get -y upgrade: 0.235 Ign:1 http://security.debian.org/debian-security stretch/updates InRelease 0.278 Ign:2 http://security.debian.org/debian-security stretch/updates Release 0.280 Ign:3 http://deb.debian.org/debian stretch InRelease 0.293 Ign:4 http://security.debian.org/debian-security stretch/updates/main all Packages 0.308 Ign:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages 0.320 Ign:6 http://deb.debian.org/debian stretch-updates InRelease 0.323 Ign:4 http://security.debian.org/debian-security stretch/updates/main all Packages 0.339 Ign:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages 0.356 Ign:4 http://security.debian.org/debian-security stretch/updates/main all Packages 0.363 Ign:7 http://deb.debian.org/debian stretch Release 0.378 Ign:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages 0.408 Ign:4 http://security.debian.org/debian-security stretch/updates/main all Packages 0.415 Ign:8 http://deb.debian.org/debian stretch-updates Release 0.441 Ign:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages 0.463 Ign:9 http://deb.debian.org/debian stretch/main amd64 Packages 0.465 Ign:4 http://security.debian.org/debian-security stretch/updates/main all Packages 0.482 Ign:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages 0.496 Ign:4 http://security.debian.org/debian-security stretch/updates/main all Packages 0.503 Ign:10 http://deb.debian.org/debian stretch/main all Packages 0.511 Err:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages 0.511 404 Not Found [IP: 151.101.2.132 80] 0.542 Ign:11 http://deb.debian.org/debian stretch-updates/main all Packages 0.583 Ign:12 http://deb.debian.org/debian stretch-updates/main amd64 Packages 0.623 Ign:9 http://deb.debian.org/debian stretch/main amd64 Packages 0.662 Ign:10 http://deb.debian.org/debian stretch/main all Packages 0.701 Ign:11 http://deb.debian.org/debian stretch-updates/main all Packages 0.741 Ign:12 http://deb.debian.org/debian stretch-updates/main amd64 Packages 0.781 Ign:9 http://deb.debian.org/debian stretch/main amd64 Packages 0.825 Ign:10 http://deb.debian.org/debian stretch/main all Packages 0.872 Ign:11 http://deb.debian.org/debian stretch-updates/main all Packages 0.912 Ign:12 http://deb.debian.org/debian stretch-updates/main amd64 Packages 0.953 Ign:9 http://deb.debian.org/debian stretch/main amd64 Packages 0.994 Ign:10 http://deb.debian.org/debian stretch/main all Packages 1.033 Ign:11 http://deb.debian.org/debian stretch-updates/main all Packages 1.073 Ign:12 http://deb.debian.org/debian stretch-updates/main amd64 Packages 1.112 Ign:9 http://deb.debian.org/debian stretch/main amd64 Packages 1.152 Ign:10 http://deb.debian.org/debian stretch/main all Packages 1.193 Ign:11 http://deb.debian.org/debian stretch-updates/main all Packages 1.233 Ign:12 http://deb.debian.org/debian stretch-updates/main amd64 Packages 1.274 Err:9 http://deb.debian.org/debian stretch/main amd64 Packages 1.274 404 Not Found 1.316 Ign:10 http://deb.debian.org/debian stretch/main all Packages 1.357 Ign:11 http://deb.debian.org/debian stretch-updates/main all Packages 1.397 Err:12 http://deb.debian.org/debian stretch-updates/main amd64 Packages 1.397 404 Not Found 1.401 Reading package lists... 1.407 W: The repository 'http://security.debian.org/debian-security stretch/updates Release' does not have a Release file. 1.407 W: The repository 'http://deb.debian.org/debian stretch Release' does not have a Release file. 1.407 W: The repository 'http://deb.debian.org/debian stretch-updates Release' does not have a Release file. 1.407 E: Failed to fetch http://security.debian.org/debian-security/dists/stretch/updates/main/binary-amd64/Packages 404 Not Found [IP: 151.101.2.132 80] 1.407 E: Failed to fetch http://deb.debian.org/debian/dists/stretch/main/binary-amd64/Packages 404 Not Found 1.407 E: Failed to fetch http://deb.debian.org/debian/dists/stretch-updates/main/binary-amd64/Packages 404 Not Found 1.407 E: Some index files failed to download. They have been ignored, or old ones used instead. ------ Dockerfile:3 -------------------- 1 | FROM node:16.15.1-stretch-slim 2 | 3 | >>> RUN apt-get update && apt-get -y upgrade 4 | 5 | RUN apt-get install -y git curl -------------------- ERROR: failed to solve: process "/bin/sh -c apt-get update && apt-get -y upgrade" did not complete successfully: exit code: 100 ``` I have fixed both issues and tested building the image and running the container to build the docs site locally. Reviewed-on: https://codeberg.org/Codeberg/Documentation/pulls/630 Reviewed-by: Gusted Co-authored-by: Javier Pérez Co-committed-by: Javier Pérez --- .gitignore | 4 ++++ .prettierignore | 1 - Dockerfile | 27 ++++++++++++++++----------- README.md | 10 +++++----- container-init.sh | 6 ++++++ package.json | 4 ++-- 6 files changed, 33 insertions(+), 19 deletions(-) create mode 100755 container-init.sh diff --git a/.gitignore b/.gitignore index b3672cb..0352ba9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ _site/ .cache/ + # Integrated development environments (IDEs) and text editors ## JetBrains .idea/ @@ -15,6 +16,9 @@ _site/ ## npm - Node.js node_modules/ +## pnpm - Node.js +.pnpm-store/ + # Web servers ## Codeberg Pages diff --git a/.prettierignore b/.prettierignore index 46430d7..bd5535a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1 @@ pnpm-lock.yaml -.pnpm-store/ diff --git a/Dockerfile b/Dockerfile index f9465f0..e0e3ffc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,21 @@ -FROM node:16.15.1-stretch-slim +# The main purpose of this Dockerfile is to install the `pnpm` package manager in the official Node.js image +# and use an init script as the entrypoint of a custom image to build and run the documentation site. +FROM node:lts-slim@sha256:0afb7822fac7bf9d7c1bf3b6e6c496dee6b2b64d8dfa365501a3c68e8eba94b2 -RUN apt-get update && apt-get -y upgrade +EXPOSE 8080/tcp +SHELL [ "bash", "-c" ] +ENTRYPOINT [ "./container-init.sh" ] -RUN apt-get install -y git curl -RUN curl -fsSL https://get.pnpm.io/install.sh | sh - +ENV CI="true" -RUN mkdir /opt/documentation && chown node: /opt/documentation +# renovate: datasource=npm depName=pnpm +ENV PNPM_VERSION="10.23.0" + +RUN apt-get update \ +&& DEBIAN_FRONTEND=noninteractive apt-get --assume-yes upgrade \ +&& rm --recursive --force /var/lib/apt/lists/* + +RUN npm install --global pnpm@${PNPM_VERSION} USER node - -WORKDIR /opt/documentation - -RUN pnpm install - -CMD [ "pnpm", "run", "serve"] +WORKDIR /docs diff --git a/README.md b/README.md index ac260a3..5f7ab42 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ You only have to do this once. Then run -`pnpm run serve` +`pnpm run dev` to start a development web server that by default is listening at `http://localhost:8080`. @@ -48,14 +48,14 @@ You must have a container-engine installed (docker, podman, etc.) First build the container image: ```shell -docker build -t Codeberg/Documentation-server . +docker build --tag codeberg-docs:dev . ``` You do not have to rebuild the image every time. Once you build the image you can always start the development webserver using the container engine: ```shell -docker run --rm -v $PWD:/opt/documentation Codeberg/Documentation-server:latest +docker run --name "codeberg-docs" --rm --tty --interactive --volume "${PWD}:/docs" --publish "127.0.0.1:8080:8080/tcp" codeberg-docs:dev ``` Use the "External" URL the container outputs on startup to access your documentation. @@ -67,9 +67,9 @@ Use `Ctrl-C` to exit / end the container. The parameters are: `--rm` removes the container after it's use -`-v` mounts the current (documentation repository root) folder to `/opt/documentation` in the container. +`--volume` mounts the current (documentation repository root) folder to `/docs` in the container. -`Codeberg/Documentation-server:latest` refers to the container image built in the first step (using `docker build`). +`codeberg-docs:dev` refers to the container image built in the first step (using `docker build`). ### Build & Deployment diff --git a/container-init.sh b/container-init.sh new file mode 100755 index 0000000..27dc8f0 --- /dev/null +++ b/container-init.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# This script allows developers to easily build and preview the +# Codeberg documentation locally when using containers. +pnpm install +pnpm run dev diff --git a/package.json b/package.json index 65b712e..c114041 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "description": "The documentation site for Codeberg", "private": true, "scripts": { - "build": "rm -rf _site/ && eleventy", - "serve": "eleventy --serve" + "build": "eleventy", + "dev": "eleventy --serve --incremental" }, "devDependencies": { "@11ty/eleventy": "3.1.2",