Skip to main content

10-hortusfox.md

kstack: book: Centerpoint Home Lab chapter: Documents & Organization page: HortusFox tags: [hortusfox, plants, garden, mariadb]

Overview

HortusFox 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