Paket-Cache
Composer, npm, Yarn, pnpm, pip, uv, Go (Module und Build-Cache), Bundler, Maven und NuGet legen ihre Downloads in einem Paket-Cache ab. Eingehängt wird er unter /var/cache/envoryx in die PHP-, Node.js-, Python-, Go-, Ruby-, Java- und .NET-Container, in die Worker und in die Einmal-Container, die Templates anlegen. Jedes Projekt hat seinen eigenen, auf der Envoryx-Seite unter /config/projects/<id>/cache, damit eine neue Installation der Abhängigkeiten eines Projekts sie nicht noch einmal lädt.
Zwischen Projekten teilen
Abschnitt betitelt „Zwischen Projekten teilen“Zehn Projekte mit denselben Paketen laden sie zehnmal. Unter Einstellungen → Paket-Cache kannst du Paket-Cache zwischen Projekten teilen ankreuzen: Dann benutzen alle Projekte einen Cache (/config/cache), ein Paket wird einmal geladen, und das zweite Laravel-Projekt steht in einem Bruchteil der Zeit, die das erste gebraucht hat. Die Projekte stellen beim nächsten Neustart um.
Mach das nur, wenn du allen vertraust, die in deinem Envoryx an einem Projekt arbeiten. Jedes Projekt kann in den geteilten Cache schreiben, und Composer, pip, Maven und einige andere übernehmen ein gecachtes Paket, ohne es gegen die Lock-Datei zu prüfen. Ein Developer eines Projekts könnte dort also Code unterbringen, den ein anderes Projekt dann installiert. Benutzt du Envoryx allein, musst du dir darüber keine Gedanken machen.
Jedes Werkzeug findet den Cache über eine Variable:
| Werkzeug | Variable, die in den Cache zeigt |
|---|---|
| Composer | COMPOSER_CACHE_DIR |
| npm | npm_config_cache |
| Yarn 1 | YARN_CACHE_FOLDER |
| Yarn 2 und neuer | YARN_GLOBAL_FOLDER (darin liegt der globale Cache) |
| pnpm | store-dir in ~/.config/pnpm/rc, storeDir in ~/.config/pnpm/config.yaml (siehe unten) |
| pip | PIP_CACHE_DIR |
| uv | UV_CACHE_DIR |
| Go | GOMODCACHE, GOCACHE |
| Bundler | BUNDLE_USER_CACHE mit eingeschaltetem globalem Gem-Cache |
| Maven | MAVEN_OPTS mit -Dmaven.repo.local |
| NuGet | NUGET_PACKAGES, NUGET_HTTP_CACHE_PATH |
Braucht ein Projekt etwas anderes, überschreibst du die Variablen wie jede andere Projektvariable. pnpm tanzt dabei aus der Reihe: Es liest den Ort seines Stores aus keiner eigenen Variable, und die eine, die es liest (npm_config_store_dir), bringt npm dazu, bei jedem Befehl zu warnen. Deshalb schreibt Envoryx pnpms eigene Konfigurationsdateien ins Projekt-Home: ~/.config/pnpm/rc mit store-dir=/var/cache/envoryx/pnpm-store für pnpm bis 10 und ~/.config/pnpm/config.yaml mit storeDir: /var/cache/envoryx/pnpm-store für pnpm 11 und neuer, das rc nicht mehr liest. Jede Datei schreibt es nur, wenn sie noch fehlt, und sie gehören dir: Soll der Store woanders liegen, änderst du sie einfach. Über Mount-Grenzen hinweg kann pnpm keine Hardlinks setzen und kopiert die Dateien aus dem Store nach node_modules, das geht immer noch deutlich schneller als ein neuer Download.
Ein Yarn-Fall bleibt außen vor: ein Projekt mit Yarn 2+ und Zero-Installs (enableGlobalCache: false, der Cache liegt eingecheckt unter .yarn/cache). YARN_CACHE_FOLDER schickt auch diesen Cache in den Paket-Cache, also setzt du für so ein Projekt YARN_CACHE_FOLDER=/var/www/html/.yarn/cache als Projektvariable (mit vollem Pfad: Ein relativer zählt ab dem Ordner, in dem du yarn aufrufst). Ruby-Gems werden ins Projekt-Home installiert, in ein Verzeichnis pro Ruby-Version (/home/envoryx/.gem/ruby/<X.Y.0>, für Ruby 3.4 also ~/.gem/ruby/3.4.0).
Gradle liegt gar nicht im Paket-Cache: Es hält sein Home in ~/.gradle im Projekt-Home, siehe Java.
Größe und Leeren
Abschnitt betitelt „Größe und Leeren“Von selbst werden die Caches nie kleiner. Unter Einstellungen → Paket-Cache siehst du, wie viel jedes Werkzeug dort ablegt, zusammengezählt über alle Projekte, und kannst den Teil eines Werkzeugs oder alles leeren; die nächste Installation lädt dann eben neu. Instanz-Backups lassen die Caches weg, weil sie sich jederzeit wieder aufbauen lassen. Unter Unraid liegt er zusammen mit /config auf dem Appdata-Share, meist also auf dem SSD-Pool.