# dl.fvh.fi — dependencies

Simple directory-listing / download site. Surveyed 2026-09-02 on services.fvh.io.

## Runtime stack

| Dependency | Detail | Notes |
|---|---|---|
| nginx 1.26.3 | vhost `/etc/nginx/sites-enabled/dl.fvh.fi` | `autoindex on`, `disable_symlinks off` — the symlink traversal is load-bearing, see below |
| PHP-FPM 8.3 | socket `/var/run/php/php8.3-fpm.sock` | only used by `.index.php` |
| Parsedown 1.x | vendored at `.parsedown/Parsedown.php` | renders each directory's `README.md` as the page header |
| `.sorttable.js`, `.style.css` | vendored, local | client-side table sorting |
| Certbot / Let's Encrypt | `/etc/letsencrypt/live/dl.fvh.fi` | |

There is no database and no application framework. `.index.php` is a ~130-line
directory lister: `opendir(".")` + Parsedown over `README.md`.

## External dependency — the significant one

**Hetzner Storage Box over SSHFS.**

- `sbox_public` in the web root is a symlink to `/mnt/sbox_public`
- mount: `u337634@u337634.your-storagebox.de:/datahold/PUBLIC` , type `fuse.sshfs`
- defined in `/etc/fstab` as a systemd automount (`x-systemd.automount`, `idle-timeout=60s`)
- authenticated by `IdentityFile=/home/juhani.kantola/.ssh/id_ed25519`
- currently **3.7 TB used of 5.0 TB**

Consequences for migration:

1. The served content does not live on this VM. Only the ~30 KB lister does.
2. The mount depends on a private key in **one person's home directory**. That key is a single point of failure and must be provisioned deliberately on any replacement host, not copied ad hoc.
3. `disable_symlinks off` in nginx exists solely so the `sbox_public` symlink resolves. Any replacement config needs the equivalent, or the content 403s.
4. Directory listings are generated live from the SSHFS mount, so page latency is bound to storage-box responsiveness.

Top-level content on the share: `20240313-Hameentie-Haukilahdenkatu-video`, `ePowerMove`, `KYMP`, `liidi2`, `treasource`.

## Notes

- macOS metadata litter (`._*`, `.DS_Store`) is present throughout the share and shows up in listings.
