# ─────────────────────────────────────────────────────────────────────────── # Loki — docker-compose pour Unraid (image préconstruite par GitHub Actions) # # Loki est un fork conteneurisé d'AJEAN (github.com/nathaninline/ajean, MIT) : # moteur llama.cpp CUDA + interface web dans UN conteneur autonome. # Aucun build ni git nécessaire sur Unraid — l'image est publiée sur GHCR à # chaque push sur main. # # MISE EN PLACE : # 1) Plugin « Nvidia Driver » (Apps) installé, GPU visible (nvidia-smi). # 2) Crée les dossiers de données (terminal Unraid) : # mkdir -p /mnt/user/appdata/loki/data /mnt/user/appdata/loki/models # 3) Plugin « Compose Manager » -> nouvelle stack -> colle ce fichier. # 4) Compose Up. Interface : http://:8090 # # Les modèles se téléchargent directement depuis l'UI (catalogue intégré), # ou dépose tes .gguf dans /mnt/user/appdata/loki/models. # # Mise à jour : Compose Down puis Up avec « pull image », ou # « docker compose pull » avant Up. # ─────────────────────────────────────────────────────────────────────────── services: loki: image: ghcr.io/r0m1k3/loki:latest container_name: loki runtime: nvidia ports: # Pour changer de port : modifie 8090 à gauche ET LOKI_WEB_PORT… ou # seulement à gauche (ex. "8717:8090") si tu veux garder l'ancien port. - "8090:8090" environment: - NVIDIA_VISIBLE_DEVICES=all # Optionnel : modèle initial (sinon, choisis-le dans l'UI au premier # lancement). Ex. LOKI_MODEL=Qwen3-14B-Q4_K_M.gguf après dépôt du # fichier dans /mnt/user/appdata/loki/models. - LOKI_MODEL= # Accès par NOM DE DOMAINE (reverse proxy, ex. loki.mondomaine.fr) sans # clé de pilotage : liste ici le(s) nom(s), séparés par des virgules — # sinon l'API répond 403 (protection contre les sites tiers / DNS # rebinding). Inutile pour un accès par IP ou nom local. - LOKI_TRUSTED_HOSTS= volumes: # PERFORMANCE — /mnt/user/… passe par la couche FUSE des partages # Unraid (shfs) : chaque écriture de la base et chaque page d'un gros # modèle relue depuis le disque (modèle plus gros que la RAM) traverse un # démon en espace utilisateur. Loki le signale au démarrage (encart # d'information, rien n'est perdu). Deux remèdes, au choix : # - Recommandé (Unraid 6.12+) : partages en « Exclusive access ». # Ce n'est pas une case mais un état : Settings -> Global Share # Settings -> « Permit exclusive shares » = Yes, puis le partage # appdata (et celui des modèles) entièrement sur UN pool — mover # d'abord vers le pool, ensuite Secondary storage = None. La page du # partage affiche alors « Exclusive access : Yes ». Redémarre le # conteneur : le chemin /mnt/user reste le même, FUSE est # court-circuité. # - Avancé : mapper /mnt//appdata/loki/… (ex. /mnt/cache si # ton pool s'appelle « cache »). Migration MANUELLE obligatoire : # Compose Down, rsync -a de l'ancien dossier vers le nouveau, puis # changer les deux lignes ci-dessous. Un /mnt/ qui n'existe # pas atterrit dans la RAM d'Unraid : données perdues au redémarrage, # et un modèle de 80 Go peut saturer la mémoire du serveur. # Ne change JAMAIS ce chemin sans migrer : /data apparaîtrait vide. # /data : config, base, mémoire, workspace, modèles téléchargés par l'UI - /mnt/user/appdata/loki/data:/data # /models : dossier de .gguf déposés à la main (gros fichiers) - /mnt/user/appdata/loki/models:/models # Moteur Strata (Qwen3.8 Flash Next) : il verrouille ses experts en RAM # (mlock, 30 à 50 Go). La limite Docker par défaut (64 Ko) l'en empêche. ulimits: memlock: -1 restart: unless-stopped