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:
@@ -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
|
||||
@@ -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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user