Skip to main content

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

Type URL Auth Internal https://hortusfox.home.local HortusFox own auth (Step-CA TLS)

No external route — LAN access only.

Containers

Container Image Role 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:

Variable Value / Notes 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:

Host Path Container Path Purpose /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)

Variable Value MYSQL_DATABASE hortusfox MYSQL_USER hortusfox MYSQL_PASSWORD REDACTED MYSQL_ROOT_PASSWORD REDACTED

Bind mounts:

Host Path Container Path /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