modernleft-docs/Applications/quartz-docker.md

3.2 KiB
Raw Blame History

title draft date
quartz-docker false 2025-01-16

quartz-docker image

docker pull code.modernleft.org/gravityfargo/quartz-docker:v4.4.0

This project runs Quartz 4, a fast, batteries-included static site generator, inside a Docker container. It transforms Markdown content into a fully functional website.

While Quartz provides Docker support, it is not as self contained as this project.

This container will be using my fork of Quartz as my PR to have configuration set via JSON was denied. I tried a few alternative methods for configuration with this container but none were as "clean"

🚀 Features

  • Easy Configuration Customize settings using a json file
  • Automated Site Updates Configurable cron job to fetch and rebuild content

🐳 Docker Compose Setup

Prepare Data Directories

Create a data directory and pull your existing content

# create directories
mkdir -p /srv/quartz/config
cd /srv/quartz
# clone your content
git clone https://code.modernleft.org/gravityfargo/modernleft-docs.git content

Compose File

Create a docker-compose.yml file: !docker-compose

First Run

docker-compose up -d
docker stop quartz-wiki

On first run, the container will download the necessary dependencies and build the site.

In /srv/quartz/config/config.json, you need to change the baseUrl to your domain.

⚙️ Configuration

Optional node_modules volume

To keep the image small, node_modules are not included. When the container is run, they are downloaded to /usr/share/nginx/html/node_modules. Mounting this as a volume ensures they persist between container runs, reducing setup time.

cron

This is the command run by cron

cd /usr/share/nginx/html/content && \
git pull >/dev/null 2>&1 && \
cd /usr/share/nginx/html && \
npx quartz build >/dev/null 2>&1

Setting ENABLE_CRON to true and defining BUILD_SCHEDULE performs these actions. If you need help configuring Crontab.guru - The cron schedule expression generator is a useful tool for that

Example:

environment:
  ENABLE_CRON: true
  BUILD_SCHEDULE: "*/1 * * * *" # Runs every minute

Environment Variables

See a list of all environment variables here.

Variable Description Default Value
NGINX_PORT Port for the Nginx server 80
SERVER_NAME NGINX server name quartz.zhao.xyz
ENABLE_CRON Enables scheduled builds (true or false) false
BUILD_SCHEDULE Cron expression for scheduling site builds "*/10 * * * *" every 10 min
QUARTZ_CONFIG_PATH Path to the Quartz configuration file /config/quartz.json

You shouldn't need to change QUARTZ_CONFIG_PATH