Eine vorhandene Anwendung mit erpc worker import bereitstellen

erpc worker import übernimmt eine vorhandene Anwendung so, wie sie ist. Es schreibt die erpc.toml der Anwendung und ändert nichts an ihrem Code.
Diese Seite beschreibt ERPC CLI v0.1.0-rc.4, eine Vorabversion.

Importieren und bereitstellen

Die Anwendung kann ein Bot sein, der heute unter systemd oder Docker läuft, oder ein Dienst in einer anderen Sprache. import liest das Verzeichnis der Anwendung und schreibt die erpc.toml, die das Verzeichnis beschreibt. Sonst wird nichts in die Anwendung geschrieben, nichts darin ausgeführt, und ihr Code wird nicht geändert. erpc nimmt die Anwendung in seine eigene Liste auf, wie bei init.
bash
cd my-bot                                   # a Cargo package
erpc worker import                          # writes erpc.toml from what is there
erpc worker check                           # what it describes, and what is missing
erpc worker deploy                          # your VPS, or a new hourly one

cd my-go-service && make linux              # any other toolchain: build the Linux binary your way
erpc worker import --binary dist/service --port 8080 --health /healthz
erpc worker deploy
  • Ein Cargo-Paket wird mit cargo build --release gebaut, wie eine mit init erstellte Anwendung. Die Anwendung wird nach dem Paket benannt, sofern --name nichts anderes angibt, und --bin wählt die Binärdatei, wenn das Paket mehrere hat. Ein Workspace-Root wird abgelehnt: Richten Sie import auf das Paket.
  • Eine Linux-Binärdatei, irgendwo und in beliebiger Sprache gebaut, wird mit --binary <PATH> auf dieselbe Weise bereitgestellt und unverändert ausgeliefert. erpc liest ihren Header und lehnt eine ab, die ein Server nicht ausführen kann: eine macOS- oder Windows-Binärdatei, ein Skript, eine Shared Library, eine abgeschnittene Datei oder eine andere Architektur als build.target. Die Binärdatei muss statisch oder gegen glibc gelinkt sein, mit ihrem Loader am üblichen Pfad. Sie ist eine Datei der Anwendung: Ein Link unter diesem Namen, der aus dem Verzeichnis der Anwendung herausführt, wird abgelehnt. Eine Bereitstellung stoppt bei einer unbrauchbaren Binärdatei, bevor ein Server gekauft wird. Bauen Sie die Binärdatei neu, bevor Sie eine Bereitstellung starten, die eine Änderung mitbringen soll.

Was import liest

Im VerzeichnisWas import damit tut
.env.example und ähnliche BeispieldateienJeder Name wird zu einer Einstellung, wenn er eine sein kann: Ein Name, der nicht aus Großbuchstaben, Ziffern und _ besteht (ohne Ziffer am Anfang), oder einer, den erpc oder der Server selbst setzt (ERPC_WORKER_…, LD_…), wird ausgelassen. Ein gewöhnlicher Name kommt mit dem Wert aus dem Beispiel nach [vars]. Einer, der seinem Namen nach wie ein Secret aussieht oder dessen Wert Zugangsdaten enthält, wird mit dem Befehl genannt, der ihn aufbewahrt, und sein Wert wird nicht kopiert
.envNur die Namen werden gelesen, außer einer Portnummer
PORT, API_PORT, EXPOSE eines Dockerfilesrun.port, sofern --port ihn nicht angibt. --health <PATH> fügt den Health-Check auf diesem Port hinzu
GRPC_ENDPOINT, SHREDS_ENDPOINT und andere Einstellungen, die eine Datenleitung bereitstelltWerden nicht in [vars] übernommen: Die Option der Leitung an deploy setzt sie
wallet.json, id.json, *keypair.jsonWerden genannt, mit erpc worker key import <FILE> --wipe, das den Schlüssel dort aufbewahrt, wo erpc worker ihn liest, und die Datei vernichtet
Eine Compose-Datei mit Redis oder PostgreSQL[services], damit deploy sie auf den Server bringt
Dockerfile, die Compose-Datei selbstWerden nicht zum Ausführen der Anwendung verwendet: erpc worker führt die Binärdatei selbst aus, unter einer gehärteten systemd-Unit
import --chain nennt die Chain, für die die Anwendung bestimmt ist, standardmäßig solana.

Wie import ein Verzeichnis liest

Das Verzeichnis kann eines sein, das Sie vor einer Minute geklont haben, daher liest import es mit Vorsicht.
  • erpc.toml wird neu erstellt. Liegt unter diesem Pfad bereits irgendetwas, lehnt import ab: Es schreibt nie über eine Datei und nie durch einen Link.
  • Es liest reguläre Dateien innerhalb des Verzeichnisses, bis zu 1 MiB pro Datei. Ein Link, der aus dem Verzeichnis herausführt, eine Pipe, ein Gerät, eine größere Datei und eine Datei, die nicht UTF-8 ist, werden nicht gelesen, und jeder dieser Fälle wird gemeldet.
  • Kein Wert, den es für ein Secret hält, wird kopiert. Es erkennt Zugangsdaten an ihrer Form, die Prüfung ist also ein Netz, kein Beweis: Ein Secret in einer Form, die es nicht kennt, wird wie jeder andere Wert kopiert. Es liegt bei Ihnen, erpc.toml zu lesen, bevor Sie die Datei committen.
  • erpc worker check warnt vor weniger Arten, als import zurückhält. Es sagt nichts zu einer RPC-URL mit einem Schlüssel im Pfad oder zu einer Wiederherstellungsphrase unter [vars]: Bewahren Sie diese mit erpc worker secret put auf.

Was Ihre Anwendung auf dem Server vorfindet

  • Einstellungen kommen als Umgebungsvariablen an, [vars] und [secrets] gleichermaßen. Auf dem Server gibt es keine .env, und eine Anwendung, die eine .env-Datei mit einer dotenv-Bibliothek liest, funktioniert weiterhin.
  • Ihr eigenes Verzeichnis ist schreibgeschützt. Dateien, die sie schreibt, landen unter dem Verzeichnis, das ERPC_WORKER_STATE_DIR nennt (auch ihr HOME); eine Bereitstellung behält dieses Verzeichnis, und erpc worker backup sichert es.
  • Ein Trading-Schlüssel kommt über eine Pipe an, nicht in einer Datei: 64 Bytes auf dem Dateideskriptor, den ERPC_WORKER_KEY_FD nennt, einmal, beim Start der Anwendung, mit dem öffentlichen Schlüssel in ERPC_WORKER_PUBKEY. Bei einer Anwendung, die eine Schlüsseldatei liest, ist dieser eine Lesevorgang zu ändern; src/wallet.rs der Vorlage pumpfun zeigt, wie.
  • Sie besteht aus einer Binärdatei und den Dateien, die run.files auflistet. Alles andere, was sie zur Laufzeit öffnet, muss in dieser Liste stehen.

Nächste Schritte

  • Schlüssel und Secrets: Bewahren Sie die Einstellungen auf, die import zurückgehalten hat, und den Trading-Schlüssel.
  • Firewall und WAF: Legen Sie fest, wer die Anwendung erreichen darf.
  • Der Worker-Leitfaden: Jede Datei, die import liest, und die Formen von Zugangsdaten, nach denen es sucht.