3.9 KiB
title | draft | date |
---|---|---|
quartz-docker | false | 2025-01-16 |
image | quartz-docker image |
base project | quartz |
image source | gravityfargo/quartz-dockerl |
docker pull code.modernleft.org/gravityfargo/quartz-docker:v4.4.0
This project runs Quartz v4.4.0, 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.
There is no support for SSL or any other features that are not directly related to building the site. I run everything behind traeffik, so I don't need it.
🐳 Docker Compose Setup
Create a data directory
mkdir -p /srv/quartz
services:
quartz-docker:
container_name: quartz-docker
image: code.modernleft.org/gravityfargo/quartz-docker:dev
ports:
- 80:80
environment:
USER_ID: 1000
GROUP_ID: 1001
SERVER_NAME: "docs.modernleft.org"
ENABLE_CRON: "true"
BUILD_SCHEDULE: "*/30 * * * *"
CONTENT_REPO: "https://code.modernleft.org/gravityfargo/modernleft-docs.git"
volumes:
- /srv/quartz:/quartz
First Run
docker-compose up -d
docker stop quartz-wiki
On first run, the container will download the necessary dependencies, build the site, and download the content repository.
After that, you can configure whatever you would like in /srv/quartz/src
using the stock options found in the quartz documentation Bare minimum should be baseUrl
and pageTitle
.
🥳 Done! 🎉
Manually Building the Site
docker exec -it quartz-wiki bash
cd content/
git restore .
cd ../src/
npx quartz build
⚙️ 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 /quartz/content
git restore .
git pull
cd /quartz/src &
npx quartz build
echo 'Content Updated.'
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
Variable | Description | Default Value |
---|---|---|
USER_ID /GROUP_ID |
UID/GID that /quartz will be chown'd to. |
1000 :1000 |
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 |
CONTENT_REPO |
URL of the content repository |