Nixpacks
Kinsta bietet Nixpacks, ein Open-Source-Projekt, das von Railway gepflegt wird, als eine der Optionen an, um das Container-Image deiner Anwendung automatisch auf Basis deines Repositorys zu erstellen. Nixpacks sind Skripte, die beim Deployment deiner Anwendung ausgeführt werden, um Abhängigkeiten für deine Anwendung zu installieren und deine Umgebung zu konfigurieren.
Wir empfehlen die Verwendung von Nixpacks, weil sie weniger Ressourcen verbrauchen und mehr als 20 Sprachen unterstützen. Du kannst Nixpacks auswählen, wenn du eine Anwendung hinzufügst oder indem du die Option Build Umgebung in den Anwendungseinstellungen änderst (Einstellungen > Grundlegende Details > Details bearbeiten).
Unterstützte Sprachen
Nixpacks unterstützt die folgenden Sprachen:
- Clojure
- Cobol
- Crystal
- C#/.NET
- Dart
- Deno
- Elixir
- F#
- Go
- Haskell
- Java
- Lunatic
- Node.js
- PHP
- Python
- Rust
- Swift
- Scala
- Zig
Wenn du eine andere Sprachversion verwenden willst, musst du die Version in den Dateien deiner Anwendung festlegen.
Wenn du Nixpacks verwendest, ist es normalerweise nicht nötig, verschiedene Provider für den Build auszuwählen oder hinzuzufügen, da sie automatisch erkannt werden. Wenn du zusätzliche Provider für deine Anwendung benötigst, kannst du diese in einer Nixpacks-Konfigurationsdatei festlegen.
Wenn du eine Sprache verwenden möchtest, die nicht von Nixpacks oder Buildpacks unterstützt wird, musst du ein Dockerfile verwenden. Wenn du deine Anwendung hinzufügst, kannst du die Option Dockerfile zum Einrichten des Container-Images verwenden auswählen.
Nixpacks konfigurieren
Einige Anwendungen müssen nicht konfiguriert werden, aber einige benötigen spezielle Befehle und Optionen, um ausgeführt zu werden, wie z. B:
Umgebungsvariablen – Möglicherweise musst du bestimmte Umgebungsvariablen setzen, um deine Anwendung auszuführen.
Prozesse – Kinsta kann deinen Webprozessbefehl automatisch erkennen. Du kannst dies bei Bedarf ändern und zusätzliche Prozesse definieren.
Prozesse in einem Procfile – Vielleicht möchtest du deine Prozesse in einem Procfile im Code deiner Anwendung definieren.
Nixpacks Binärverzeichnisse
Bei Nixpacks können die Binärverzeichnisse von den Standard-Binärverzeichnissen für die Anwendungssprache abweichen. Die folgende Tabelle zeigt die Binärverzeichnisse, die für einige der gängigsten Sprachen verwendet werden:
Sprache | Verzeichnis |
---|---|
Node.js | /nix/var/nix/profiles/default/bin/node |
Ruby | /nix/var/nix/profiles/default/bin/ruby |
Python | /nix/var/nix/profiles/default/bin/python |
Java | /nix/var/nix/profiles/default/bin/java |
Scala | Scala hat keinen bestimmten Standard-Binärpfad wie einige andere kompilierte Sprachen. Wenn du ein Scala-Programm kompilierst, wird Bytecode erzeugt, der auf der Java Virtual Machine (JVM) ausgeführt wird.
Die kompilierten Scala-Klassen werden normalerweise in einer Verzeichnisstruktur gespeichert, die die Paketstruktur deines Codes widerspiegelt. Das ist ähnlich wie bei der Organisation von Java-Klassen. Wenn du eine Scala-Quelldatei kompilierst, werden die kompilierten Klassendateien standardmäßig im gleichen Verzeichnis wie der Quellcode abgelegt (in einer Unterverzeichnisstruktur, die auf den Paketdeklarationen basiert). Bei Bedarf kannst du die Scala-Laufzeitwerkzeuge auch mit einer Dockerdatei installieren, anstatt ein Nixpack zu verwenden. |
PHP | /nix/var/nix/profiles/default/bin/php |
Go | Go hat keinen bestimmten Standard-Binärpfad wie einige andere kompilierte Sprachen. Wenn du ein Go-Programm kompilierst, wird die daraus resultierende ausführbare Binärdatei normalerweise im gleichen Verzeichnis wie dein Quellcode abgelegt.
Bei Bedarf kannst du die Laufzeitwerkzeuge von Go mit einer Dockerdatei installieren, anstatt ein Nixpack zu verwenden. |
Einstellen der Sprachversion eines Nixpacks
Wenn du die Option Nixpacks zum Einrichten des Container-Images verwenden auswählst und keine Version im Code deiner Anwendung angibst, verwendet das Nixpack die letzte verfügbare Version. Wenn du eine andere Sprachversion für deine Anwendung verwenden möchtest, musst du die Version in den Dateien deiner Anwendung oder, je nach Sprache, mit einer Umgebungsvariablen festlegen.
Die verfügbaren Methoden zum Einstellen der Version sind je nach Sprache unterschiedlich. Im Folgenden haben wir Beispiele für die gängigsten Sprachen aufgeführt.
Go
Um deine Go-Version anzugeben, füge Folgendes in die go.mod-Datei deiner Anwendung ein:
go 1.18
Java
Um deine Java-Version anzugeben, setze die Umgebungsvariable NIXPACKS_JDK_VERSION
und stelle sicher, dass die Variable während des Build-Prozesses verfügbar ist.
Wenn du Gradle verwendest, gibst du die Version über die Umgebungsvariable NIXPACKS_GRADLE_VERSION
an und stellst sicher, dass die Variable während des Build-Prozesses verfügbar ist.
Node.js
Um deine Node.js-Version anzugeben, führe einen der folgenden Schritte aus:
Füge Folgendes in die package.json-Datei deiner Anwendung ein:
"engines": {
"node": "18"
}
Setze die Umgebungsvariable NIXPACKS_NODE_VERSION
und stelle sicher, dass die Variable während des Build-Prozesses verfügbar ist.
PHP
Um deine PHP-Version anzugeben, füge Folgendes in die composer.json-Datei deiner Anwendung ein:
{
"require": {
"php": "8.2"
}
}
Python
Um deine Python-Version anzugeben, mach einen der folgenden Schritte:
- Füge Folgendes in die Datei runtime.txt deiner Anwendung ein:
python-3.10.6
- Füge das Folgende in eine .python-version-Datei in deinem Repository ein:
3.10.6
- Setze die Umgebungsvariable
NIXPACKS_PYTHON_VERSION
und stelle sicher, dass die Variable während des Build-Prozesses verfügbar ist.
Scala
Um deine Scala-Version anzugeben, füge Folgendes in die build.sbt-Datei deiner Anwendung ein:
scalaVersion := "3.2.2"