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:

SpracheVerzeichnis
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
ScalaScala 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
GoGo 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"

 

War dieser Artikel hilfreich?