Media library server hosting Grimmory (books/manga), RomM (game ROMs), and Shoko Server (anime collection management). Runs on a dedicated Debian LXC (116) with a 4TB Crucial MX500 SSD mounted at /unohana. Each service is deployed independently with its own Docker Compose stack and Forgejo workflow.
4TB SSD (ata-CT4000MX500SSD1_2336E873A527-part1) at /unohana
Services
Service
Container
Port
URL
Database
Grimmory
grimmory
6060
https://library.eva-00.network
MariaDB (grimmory db)
RomM
romm
8080
https://romm.eva-00.network
MariaDB (romm db)
Shoko Server
shoko-server
8111
https://shoko.eva-00.network
SQLite (internal)
MariaDB 11.4.5
mariadb
3306
Internal only
—
Jellyfin integration
The 4TB disk is bind-mounted read-only into Jellyfin (LXC 114) at /unohana. Jellyfin can serve anime from /unohana/shoko/anime without any network filesystem overhead.
All three services have fully automated first-run setup via their Ansible playbooks — no GUI wizard required:
Grimmory: Admin user created via POST /api/v1/setup, libraries created via POST /api/v1/libraries, OIDC configured via PUT /api/v1/settings (Grimmory stores OIDC config in its database, not env vars)
RomM: Admin user created via POST /api/users (unauthenticated when no admins exist), metadata scan priorities preseeded via config.yml, OIDC configured via env vars
Shoko Server: Admin user and import folders configured via API after first boot
Use force_clean=true in the Forgejo workflow dispatch to wipe and redo first-run setup (resets database for Grimmory/RomM).
Post-deploy manual steps
Jellyfin: Add new libraries pointing to /unohana/shoko/anime (and optionally /unohana/grimmory/books)
Glance dashboard
All three services have bookmarks and health-check monitors in the Glance dashboard (services/glance/glance.yml).
Icons use the di: prefix for dashboard-icons (sourced from https://selfh.st/icons/). The si: prefix is for Simple Icons. Prefer di: for self-hosted apps as it has better coverage.