10-hortusfox.md
kstack: book: Centerpoint Home Lab chapter: Documents & Organization page: HortusFox tags: [hortusfox, plants, garden, mariadb]
Overview
emptyHortusFox is a plant care and garden management app. It tracks plants, watering
schedules, fertilisation, and overdue care tasks. A separate cron container
triggers scheduled task checks. Internal-only access via Step-CA TLS — no
external route. The workspace is named "Jeeves Garden".
Access
https://hortusfox.home.local
HortusFox own auth (Step-CA TLS)
No external route — LAN access only.
Containers
hortusfox
ghcr.io/danielbrendel/hortusfox-web:latest
Web application
hortusfox-db
mariadb:11
MariaDB database
hortusfox-cron
alpine:latest
Scheduled task runner
hortusfox (application)
Runtime: PHP 8.3 on Apache
Key environment variables:
APP_WORKSPACE
Jeeves Garden
APP_TIMEZONE
America/Toronto
APP_LANG
en
APP_DEBUG
true
APP_ADMIN_EMAIL
jeeves5454@gmail.com
APP_OVERDUE_TASK_HOURS
10
APP_ENABLE_HISTORY
true
APP_HISTORY_NAME
Garden Log
APP_ENABLE_SYSTEM_MESSAGES
true
APP_ENABLE_PHOTO_SHARE
false
APP_ENABLE_CHAT
false
APP_ENABLE_SCROLLER
true
APP_CRON_PW
REDACTED
DB_HOST
hortusfox-db
DB_PORT
3306
DB_DATABASE
hortusfox
DB_USERNAME
hortusfox
DB_CHARSET
utf8mb4
Bind mounts:
/home/jeeves/docker/hortusfox/images
/var/www/html/public/img
Plant images
/home/jeeves/docker/hortusfox/themes
/var/www/html/public/themes
Custom themes
/home/jeeves/docker/hortusfox/logs
/var/www/html/app/logs
App logs
/home/jeeves/docker/hortusfox/migrations
/var/www/html/app/migrations
DB migration files
/home/jeeves/docker/hortusfox/backup
/var/www/html/public/backup
Export/backup files
hortusfox-db (MariaDB 11)
Image: mariadb:11 (MariaDB 11.8.6)
MYSQL_DATABASE
hortusfox
MYSQL_USER
hortusfox
MYSQL_PASSWORD
REDACTED
MYSQL_ROOT_PASSWORD
REDACTED
Bind mounts:
/home/jeeves/docker/hortusfox/db
/var/lib/mysql
hortusfox-cron (Alpine)
Image: alpine:latest
A lightweight Alpine container that runs periodic cron jobs to trigger
HortusFox's scheduled task processing (e.g., overdue task notifications).
It communicates with the main hortusfox container using the APP_CRON_PW
credential. No persistent volumes.
Traefik Labels
traefik.http.routers.hortusfox.rule: Host(`hortusfox.home.local`)
traefik.http.routers.hortusfox.entrypoints: websecure
traefik.http.routers.hortusfox.tls.certresolver: step-ca
traefik.http.services.hortusfox.loadbalancer.server.port: 80
Notes / Gotchas
APP_CRON_PW authenticates the cron container's requests to the HortusFox
web app. This is set as a plaintext environment variable — treat it as a
secret. It is REDACTED in documentation.
APP_DEBUG: true means verbose PHP error output is enabled. Disable this
if HortusFox ever becomes accessible externally.
Plant images are stored in the images bind mount. This directory should be
included in backups to preserve photo history.
Last Updated: 2026-06-17