feat(audiobookshelf): serveur de livres audio et podcasts

Bibliothèque sous /srv/media (dataset partagé, cf services/media). Clé API
dans secrets/audiobookshelf.yml, pas encore consommée par un service. Exposé
publiquement via Pangolin (audiobookshelf.marcpartensky.com).
This commit is contained in:
Hermes Agent
2026-09-27 21:19:35 -04:00
parent 78c257a2a6
commit 819a34629f
2 changed files with 70 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
audiobookshelf_api_key: ENC[AES256_GCM,data:I902L1pfIi60X3I3u+OCuCkwk4iooVNqumgOv8CFv6sYZeArUwRRnwKECyMX1pAwhOSlOl6fVTBxtlUlGcv0h7jZ6ohdKDyZiBAk2YnK3GZ4UeruQWocetDvqk1w5HQCZI91b13TB4+LXhmSy1zQ8u3fzOTlgw69YYwgdbiSq7sxPhIn/Mu8R0Wdu6mCau7SW5iC4V02l5aOeLEOAOujIAuxmWw75cAV+Yeau4pJwUFmAvoOYJ9umOofkT/ygahKLNOjb5yGlAmXne0h8YKe,iv:mRPmf7FDR7ptxAzmjIfHjbDUm25SGRd+xQNlJQoPAiM=,tag:1PF98iTH87go/c/yfkDy4Q==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWeitFdWlqYStNZEhsNDJD
SHpIREdnbVZNVndmOXNoY09ueGI1TGlPaFIwClpwVkFwczNuL1I5NFcyS3gwNmZy
U1htdFdVTXdpTmVZdWR4WWt5MVVZK0kKLS0tIHB6aE9rVXg1Ty96cWZ5dVNoUEVH
SnFLdzVhWVlkZkJlRVl0OHlUZGt5Nk0Kzg4oXxdsqAkHolc9kvq9KbLqo3HTfAia
splmFsWOts/tQ8N0+ubL6yH7SZPZEiFrX7Xrdz2d82YOVEATTpr9gw==
-----END AGE ENCRYPTED FILE-----
recipient: age1usm3v0ugducrzcwud60dda7xfnj49fdhecj7kcsfm7dzwzrzeyqq2jc2hm
lastmodified: "2026-09-28T00:15:31Z"
mac: ENC[AES256_GCM,data:DhVDZnJpQ5x1VNpmQuzKUvAPyRRXQSCL+cfv94aQrIVzHKZ/qMNIAA9FUxhYPkTG0jdo7GdyA1cd3NVK3UFtAI9UaJQtlZNP4Fr1fiEPt89LDm3Y4hm2ZZ2R1bDiZqMFmCeijAjvlb/we9lCxIKNnS7OcXGoNWF+NNDWYqREd+k=,iv:V4OlDM22OLJnWaI/EDmcyuC8hNgfgAT9T1vW7e1HPY4=,tag:fzhK1pcRc9GZbJttgibysQ==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.3
+54
View File
@@ -0,0 +1,54 @@
{
config,
lib,
pkgs,
...
}:
# Serveur de livres audio et podcasts. Bibliothèque sous /srv/media (dataset
# ZFS partagé, cf. services/media : /home/marc/media est banni pour les
# services car systemd-tmpfiles y échoue, "Detected unsafe path transition").
{
# Clé API audiobookshelf (créée dans Settings > Users, compte hermes) : dans
# secrets/audiobookshelf.yml (fichier sops dédié, common.yml/tower.yml ne
# sont pas éditables par hermes sans la clé age privée). Pas encore
# consommée par un service : disponible pour un futur MCP ou script.
sops.secrets."audiobookshelf_api_key" = {
sopsFile = ../../secrets/audiobookshelf.yml;
owner = "hermes";
group = "hermes";
mode = "0400";
};
services.audiobookshelf = {
enable = true;
host = "0.0.0.0";
port = 8000;
};
users.users.audiobookshelf.extraGroups = [ "media" ];
systemd.tmpfiles.rules = [
"d /srv/media/audiobooks 2775 root media -"
"d /srv/media/podcasts 2775 root media -"
];
networking.firewall.allowedTCPPorts = [ 8000 ]; # interface web, LAN uniquement
# Exposition publique via Pangolin (newt, site "tower") : audiobookshelf.marcpartensky.com
# -> 127.0.0.1:8000. Même schéma que jellyfin : `proxy-resources` + `protocol`
# (le Pangolin de ce VPS ignore silencieusement `public-resources`/`mode`,
# cf. services/newt). Pas d'auth Pangolin : audiobookshelf a sa propre auth.
services.newt.blueprint.proxy-resources.audiobookshelf = {
name = "Audiobookshelf";
protocol = "http";
full-domain = "audiobookshelf.marcpartensky.com";
targets = [
{
hostname = "127.0.0.1";
port = 8000;
method = "http";
}
];
};
}