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_PWauthenticates 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: truemeans verbose PHP error output is enabled. Disable this if HortusFox ever becomes accessible externally.- Plant images are stored in the
imagesbind mount. This directory should be included in backups to preserve photo history.
Last Updated: 2026-06-17
No comments to display
No comments to display