modernleft-docs/Applications/quartz-docker.md

99 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: quartz-docker
draft: false
date: 2025-01-16
---
[quartz-docker image](https://code.modernleft.org/gravityfargo/-/packages/container/quartz-docker/v4.4.0)
```bash
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](https://quartz.jzhao.xyz/features/Docker-Support), it requires additional configuration. This container simplifies the process significantly.
## 🚀 Features
- **Easy Configuration** Customize settings using environment variables
- **Automated Site Updates** Configurable cron job to fetch and rebuild content
## 🛠️ Getting Started
### 🐳 Docker Compose
1. Create a data directory and pull your existing content:
```bash
git clone https://code.modernleft.org/gravityfargo/modernleft-docs.git quartz
```
2. Create a `docker-compose.yml` file:
#### Minimal Example
```yaml
version: "3"
services:
quartz:
image: code.modernleft.org/gravityfargo/quartz-docker:v4.4.0
environment:
- BASE_URL=https://example.com
volumes:
- ./quartz:/usr/share/nginx/html
ports:
- "80:80"
```
##### `BASE_URL`
The only required variable is `BASE_URL`. This sets both Quartz's `baseUrl` and Nginx's `server_name`.
#### Recommended Setup
```yaml
version: "3"
services:
quartz:
image: code.modernleft.org/gravityfargo/quartz-docker:v4.4.0
environment:
- BASE_URL=https://example.com
- ENABLE_CRON=true
- BUILD_SCHEDULE="0 * * * *"
volumes:
- ./quartz:/usr/share/nginx/html
- node_modules:/usr/share/nginx/html/node_modules
ports:
- "80:80"
volumes:
node_modules:
```
##### Persistent `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.
##### Enabling Cron Jobs
Setting `ENABLE_CRON` to `true` and defining `BUILD_SCHEDULE` as a cron expression allows `npx quartz build` to run on a schedule. That command pulls the latest content and rebuilds the site.
Example:
```yaml
environment:
- ENABLE_CRON=true
- BUILD_SCHEDULE=" * * * *" # Runs every hour
```
## 📌 Environment Variables
See a list of all environment variables [here](#environment-variables).
| Variable | Description | Default Value |
| ---------------- | -------------------------------------------- | ------------------------------- |
| `BASE_URL` | The base URL for the site (Required) | None |
| `ENABLE_CRON` | Enables scheduled builds (`true` or `false`) | `false` |
| `BUILD_SCHEDULE` | Cron expression for scheduling site builds | `0 0 * * *` (Daily at midnight) |
This setup ensures a fully automated Quartz deployment with minimal configuration.