Skip to content

Potato auf Hetzner, Vultr oder Linode bereitstellen

Eine Potato-Annotationsstudie mit potato deploy auf eine VM bei Hetzner, Vultr oder Linode bringen, ab etwa €6 im Monat, mit HTTPS und dauerhaftem Datenträger.

potato deploy up --provider hetzner bringt eine Annotationsstudie für etwa €6 im Monat auf eine virtuelle Maschine bei Hetzner Cloud, der niedrigste Standardpreis unter den kostenpflichtigen VM-Zielen von Potato. --provider vultr und --provider linode tun dasselbe auf Vultr und Akamais Linode für $10 bzw. $12 im Monat. Jedes davon ist eine gewöhnliche virtuelle Maschine mit einem Datenträger, der Neustarts übersteht, sodass eine Studie wochenlang ohne Backup-Dienst darauf läuft. Potato richtet alle drei auf dieselbe Weise ein: mit einer Firewall, die nur die Ports 22, 80 und 443 öffnet, mit Docker, dem Webserver Caddy samt Let's-Encrypt-Zertifikat und Potato als Systemdienst. Diese Seite setzt Potato 2.10 oder neuer voraus und eine Konfiguration, die Sie bereits mit potato start ausgeführt haben.

Die Wahl zwischen den dreien

Die drei unterscheiden sich in Preis, Arbeitsspeicher, Abrechnungswährung und dem Standort, an dem die Maschine standardmäßig läuft. Die Tabelle nennt die Größe, die Potato anlegt, sofern Sie kein --size übergeben, mit dem monatlichen Preis, den es ausgibt:

--provider hetzner--provider vultr--provider linode
Standardgrößecx23, 2 vCPU und 4 GBvc2-1c-2gb, 1 vCPU und 2 GBg6-standard-1, 1 vCPU und 2 GB
Monatlicher Preisetwa €6, mit der IPv4-Adresse$10$12
Standardstandortnbg1, Nürnbergewr, New Jerseyus-east, Newark
Token-VariableHCLOUD_TOKENVULTR_API_KEYLINODE_TOKEN

Hetzner bietet den meisten Arbeitsspeicher für den Preis, und Potato hält den Item-Bestand im Speicher, daher eignet sich Hetzner für ein großes Korpus bei kleinem Budget. Hetzner rechnet in Euro über ein Unternehmen in Deutschland ab, was die Beschaffungsregeln mancher Einrichtungen nicht zulassen. Vultr und Linode rechnen in US-Dollar ab.

Ein API-Token erstellen

Jeder Anbieter authentifiziert über ein API-Token, das Sie in seiner Konsole erstellen und in Ihrer Umgebung ablegen:

  • Hetzner. Öffnen Sie in der Hetzner Cloud Console den Bereich Security des Projekts und erstellen Sie ein API-Token mit Lese- und Schreibrechten.
  • Vultr. Erstellen Sie im Vultr-Dashboard einen API-Schlüssel und tragen Sie die IP-Adresse Ihres Rechners in die Zugriffsliste des Schlüssels ein, sonst lehnt Vultr jede Anfrage ab.
  • Linode. Erstellen Sie ein Personal Access Token mit Lese- und Schreibzugriff auf Linodes, Firewalls und Volumes.

Installieren Sie das Deploy-Extra, exportieren Sie das Token und prüfen Sie, ob Potato es verwenden kann:

bash
pip install 'potato-annotation[deploy]'
export HCLOUD_TOKEN=...
potato deploy providers --verify

Festlegen, wer sich anmelden kann

potato deploy ändert Ihre Anmeldeeinstellungen nicht, und die Adresse der Maschine ist öffentlich. Wenn sich laut Konfiguration jeder registrieren kann, meldet der Probelauf unten die Warnung D003, „Anyone who finds the URL can register and annotate.“ (Jeder, der die URL findet, kann sich registrieren und annotieren.) Bei einer Crowdsourcing-Studie ist offene Registrierung meist gewollt. Für benannte Annotatoren tragen Sie diese vor dem Deployment unter user_config.users mit allow_all_users: false ein (Passwortverwaltung) oder lassen sie sich über Google, GitHub oder Ihre Einrichtung anmelden (SSO und OAuth).

Den Plan prüfen und bereitstellen

Ein Probelauf braucht kein Konto und legt nichts an. Er gibt jeden Schritt aus, die geschätzten Kosten und jede riskante Einstellung in der Konfiguration:

bash
potato deploy up myproject/config.yaml --provider hetzner --dry-run
potato deploy up myproject/config.yaml --provider hetzner

Der zweite Befehl stellt bereit, nachdem Sie den Plan bestätigt haben. Am Ende gibt er die URL aus, eine https://-Adresse auf der IP der Maschine, und den Pfad der Datei mit dem Admin-Schlüssel, .potato/secrets.json neben Ihrer Konfiguration. Der Admin-Schlüssel öffnet das Admin-Dashboard unter /admin. Wenn Sie up nach einer Änderung der Konfiguration erneut ausführen, lädt es die neue Version auf dieselbe Maschine hoch. Während der Studie verfolgt potato deploy logs myproject/config.yaml -f bei allen drei Anbietern das Serverprotokoll.

--region und --size ändern Standort und Maschine, und --volume-gb fügt einen separaten Datenträger für die Daten der Aufgabe hinzu. Hetzner verkauft seine cx-Maschinen nur an seinen europäischen Standorten, daher braucht ein Deployment an den US-Standorten ash und hil einen cpx-Typ, den Sie mit --size übergeben. Wird der Typ am gewählten Standort nicht angeboten, bricht Potato ab, bevor es etwas anlegt, und listet die Standorte auf, die ihn anbieten.

Zertifikate ohne Domainnamen

Ohne Domainnamen stellt Let's Encrypt das Zertifikat für die IP-Adresse der Maschine aus. Es gilt etwa sechs Tage und erneuert sich automatisch. potato deploy status meldet eine fehlgeschlagene Erneuerung, prüfen Sie es also alle paar Tage, wenn die Studie unbeaufsichtigt läuft. Für eine eigene Domain richten Sie einen DNS-A-Eintrag auf die IP der Maschine und stellen mit --domain annotate.example.edu erneut bereit. Das Let's-Encrypt-Konto verwendet die Adresse aus Ihrem git config user.email als Kontakt, und --acme-email setzt eine andere.

Details zu den Anbietern

Linode verlangt beim Anlegen einer Maschine ein Root-Passwort, auch wenn SSH-Schlüssel übergeben werden. Potato erzeugt eines, speichert es in .potato/secrets.json und schaltet die Passwortanmeldung über SSH ab, sodass sich mit dem Passwort niemand anmelden kann. Auf Vultr wird ein separater Datenträger aus --volume-gb erst nach dem Start der Maschine angehängt, und die Einrichtung wartet, bis das Gerät erscheint, bevor sie es formatiert und einhängt.

Die Studie beenden

Die Annotationen liegen auf dem Datenträger der Maschine, der mit der Maschine gelöscht wird. Holen Sie sie zuerst auf Ihren Rechner, prüfen Sie sie und entfernen Sie dann den Server:

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull schreibt alles, was das Deployment gesammelt hat, in ein neues Verzeichnis potato-pull-<name>-<timestamp> und kopiert die Datenbanken mit dem Backup-Befehl von SQLite. destroy läuft nicht bei einem Deployment, von dem nie ein Pull gemacht wurde.

Weiterführende Informationen