Foto von Pero Kalimero auf Unsplash

So führen Sie Ihren eigenen Codius-Host aus

Und dafür bezahlt werden!

Einrichten eines Codius-Hosts

In dem von Codius erstellten Smart-Program-Ökosystem besteht eine Beziehung zwischen Hosts und Entwicklern, die dem Entwickler eine Vielzahl von Hosting-Optionen bietet und dem Host die Zahlung für das Hosten des Codes ermöglicht. Für den angehenden Codius-Host werden in diesem Beitrag die Schritte erläutert, die erforderlich sind, um einen für sich selbst zu starten.

Voraussetzungen

Sie benötigen einen Server, auf dem Codius ausgeführt werden kann. Dieser sollte die folgenden Spezifikationen erfüllen:

  • CentOS 7. In diesem Tutorial wird davon ausgegangen, dass Sie CentOS 7 verwenden und dies das einzige Betriebssystem ist, das derzeit offiziell unterstützt wird. Wir arbeiten daran, Anweisungen für andere Linux-Distributionen bereitzustellen.
  • x86-64-Architektur. Sie benötigen einen modernen 64-Bit-Prozessor. ARM wird leider noch nicht unterstützt.
  • Virtualisierungs-Support. Ihr Codius-Host wird Verträge als VMs ausführen. Sie benötigen daher einen Prozessor, der die Virtualisierung unterstützt. Glücklicherweise tun es die meisten modernen Prozessoren.
  • Bare Metal (empfohlen). Sie können Bare-Metal-Instanzen von Diensten wie Packet und AWS erhalten. Eine VM funktioniert auch, wenn sie verschachtelte Virtualisierung unterstützt. Aber es wird weniger effizient sein.
  • Root-Zugriff. Sie installieren die Software.
  • Mindestens 2 GB Speicher, idealerweise mehr. Jeder Vertrag belegt 512 MB Arbeitsspeicher. Außerdem benötigen Sie Speicher für das Host-Betriebssystem.

Zusätzlich zum Server benötigen Sie:

  • Eine XRP Geldbörse. Unterstützung für andere Zahlungssysteme ist in Arbeit, aber im Moment ist XRP Ihre beste Wahl. Codius führt eine lokale Instanz von Moneyd aus, um Zahlungen abzuwickeln. Beachten Sie, dass Ihr Portemonnaie aufgeladen werden muss, d. H. Mindestens 36 XRP enthalten muss. Das Portemonnaie benötigt zusätzlich zur aktuellen Reserve 16 XRP. Die Brieftasche, die Sie hier verwenden, kann auch nicht mit einer anderen Instanz von Moneyd verwendet werden.
  • Eine Domain: Sie benötigen eine eigene Domain, die als öffentlicher Hostname Ihres Codius-Hosts fungiert. Z.B. codius.example.com
    Wenn Sie mehrere Codius-Hosts unter derselben Domain ausführen möchten, können Sie diese einfach nummerieren, z. B. codius1.example.com, codius2.example.com usw.

Grundkonfiguration

In diesem Lernprogramm wird davon ausgegangen, dass Sie Root sind. Wenn Sie als ein anderer Benutzer angemeldet sind, führen Sie sudo su aus, um zum Root-Benutzer zu wechseln.

Bevor wir beginnen, müssen wir sicherstellen, dass unser Systemhostname korrekt konfiguriert ist. Führen Sie den folgenden Befehl aus und ersetzen Sie codius.example.com durch Ihren Codius-Hostnamen.

hostnamectl set-hostname codius.example.com

Jetzt müssen wir sicherstellen, dass der Hostname korrekt eingestellt ist, indem wir uname -n ausführen. Dies sollte den soeben eingestellten Hostnamen ausgeben:

$ uname -n
codius.example.com

Stellen Sie sicher, dass dieser Befehl den richtigen Hostnamen zurückgibt, da er später in einigen Skripten verwendet wird.

Installation

Codius ist eine Open-Source-Plattform für dezentrales Hosting, die mit Interledger erstellt wurde. Mit ihm können Benutzer Software auf Servern auf der ganzen Welt ausführen und mit jeder Währung bezahlen. In diesem Tutorial erfahren Sie, wie Sie Ihren eigenen Codius-Host erstellen und damit beginnen, den Code anderer Entwickler in XRP zu hosten.

Ein Codius-Host besteht aus drei Teilen: Hyperd, Moneyd und Codiusd. Hyperd übernimmt die Virtualisierung, Moneyd ermöglicht Interledger-Zahlungen und Codiusd stellt Endpunkte zur Verfügung, über die Uploader ihren Code an den Host senden können.

Ein Codius-Host besteht aus drei Hauptkomponenten:

  • Hyperd - Behandelt die Virtualisierung und Hardware-Isolation von Code
  • Moneyd - Ermöglicht das Senden und Empfangen von Zahlungen auf Interledger
  • Codiusd - Macht Endpunkte verfügbar, mit denen Entwickler Code auf den Host hochladen und Pods für sie starten können.

Hyperd installieren

Mit Hyperd kann der Host hochgeladenen Code in einem Hardware-isolierten Pod ausführen, der dann beim Aufrufen Container für hochgeladenen Code zuweist.

SSH auf Ihrem CentOS-Server und installieren Sie die folgenden Pakete:

yum install -y gcc-c ++ make
curl -sSl https://codius.s3.amazonaws.com/hyper-bootstrap.sh | Bash

Dadurch werden alle unsere RPM-Abhängigkeiten für NodeJS und hyperd installiert und die Ports von den hyperd-Pods automatisch weitergeleitet. Außerdem wird hyperd gestartet und Sie können die Befehlszeilenschnittstelle hypercli verwenden.

Moneyd installieren

Moneyd ist ein Daemon, mit dem ein Host Zahlungen über Interledger senden und empfangen kann. In diesem Setup wird es installiert und konfiguriert, um Zahlungen mit XRP zu leisten, aber Plugins für Ethereum und andere Blockchains werden bearbeitet. Behalten Sie die aktuelle Liste der Uplinks im Auge.

curl --silent --location https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs
yum install -y https://codius.s3.amazonaws.com/moneyd-xrp-4.0.0-1.x86_64.rpm

Zu diesem Zeitpunkt müssen Sie Ihr XRP-Geheimnis bereit.

moneyd xrp: configure
# Sie werden aufgefordert, Ihr Geheimnis hier einzugeben
systemctl starte moneyd-xrp

Sie können den Status des Daemons mit systemctl status moneyd-xrp bestätigen

Codiusd installieren

Codiusd ist die serverseitige Komponente von Codius, die Endpunkte bereitstellt, über die Benutzer Code hochladen und Container für sie bereitstellen können. Es überträgt auch Anfragen an Pods, die gerade gehostet werden.

yum install -y git
npm install -g codiusd --unsafe-perm

Erstellen Sie abschließend eine Datei namens codiusd.service mit folgendem Inhalt in / etc / systemd / system:

[Einheit]
Beschreibung = Codiusd
After = network.target nss-lookup.target
[Bedienung]
ExecStart = / usr / bin / npm start
Environment = "DEBUG = *"
Environment = "CODIUS_PUBLIC_URI = https: //codius.example.com"
Umgebung = "CODIUS_XRP_PER_MONTH = 10"
WorkingDirectory = / usr / lib / node_modules / codiusd
Neustart = immer
StandardOutput = Syslog
StandardError = Syslog
SyslogIdentifier = codiusd
Benutzer = root
Gruppe = root
[Installieren]
WantedBy = multi-user.target

Dann müssen wir diese Datei bearbeiten, um unseren tatsächlichen Hostnamen zu verwenden.

sed -i s / codius.example.com / `uname -n` / g /etc/systemd/system/codiusd.service

Alternativ können Sie die Beispieldatei abrufen und in einem Befehl speichern:

curl -sSl https://codius.s3.amazonaws.com/codiusd.service | sed s / codius.example.com / `uname -n` /> /etc/systemd/system/codiusd.service

Um codiusd zu starten, können Sie die folgenden Befehle ausführen:

systemctl enable codiusd
systemctl start codiusd

Ihr Codiusd-Server wird nun auf Port 3000 ausgeführt. Manifeste können über Endpunkte an dieser Adresse hochgeladen werden.

Sie können den Status des Servers mit dem Befehl systemctl status codiusd überprüfen

Domain Setup

Um Ihre Domain für die Verwendung mit Codius einzurichten, führen Sie die folgenden Schritte aus:

  • Fügen Sie DNS-Einträge hinzu, die auf Ihren Codius-Host verweisen
  • Fordern Sie ein Platzhalter-TLS-Zertifikat bei Let's Encrypt an
  • Richten Sie einen Nginx-Reverse-Proxy ein

DNS-Einträge hinzufügen

Um Codius ausführen zu können, benötigen wir einen primären Hostnamen für unseren Codius-Host und alle Unterdomänen, die auf unseren Host verweisen. Wenn Ihre Domain beispielsweise example.com lautet, müssen Sie codius.example.com auf Ihren Codius-Host verweisen, einschließlich Subdomains wie xyz.codius.example.com.

Um dies zu erreichen, erstellen wir zwei A-Sätze:

codius.example.com. 300 IN A 203.0.113.1
* .codius.example.com. 300 IN A 203.0.113.1

Ersetzen Sie codius.example.com durch Ihren Codius-Hostnamen und 203.0.113.1 durch die IP-Adresse Ihres Codius-Hosts.

Stellen Sie sicher, dass Sie Ihren Codius-Host unter seinem neuen Hostnamen anpingen können:

$ ping -c 1 codius.example.com
PING codius.example.com (203.0.113.1) 56 (84) Datenbytes.
64 Bytes von 203.0.113.1 (203.0.113.1): icmp_seq = 1 ttl = 48 time = 4,13 ms
--- codius.example.com ping statistics ---
1 Pakete gesendet, 1 empfangen, 0% Paketverlust, Zeit 0ms
rtt min / avg / max / mdev = 4,131 / 4,131 / 4,131 / 0,000 ms

Und stellen Sie sicher, dass es auch für jede beliebige Subdomain erreichbar ist:

$ ping -c 1 foobar.codius.example.com
PING foobar.codius.example.com (203.0.113.1) 56 (84) Datenbytes.
64 Bytes von 203.0.113.1 (203.0.113.1): icmp_seq = 1 ttl = 48 time = 3,72 m
--- foobar.codius.example.com ping statistics ---
1 Pakete gesendet, 1 empfangen, 0% Paketverlust, Zeit 0ms
rtt min / avg / max / mdev = 3,722 / 3,722 / 3,722 / 0,000 ms

Beachten Sie, dass in beiden Fällen der Hostname in die IP-Adresse 203.0.113.1 unseres Codius-Hosts aufgelöst wird.

Nachdem unser Host erreichbar ist, können wir ein TLS-Zertifikat anfordern.

Anfordern eines Wildcard-Zertifikats

Zertifikate waren früher teuer. Glücklicherweise können Sie heutzutage kostenlose Zertifikate von Let's Encrypt erhalten. Bitte überlegen Sie, für diesen großartigen Service zu spenden:

  • Spenden an ISRG / Let’s Encrypt: https://letsencrypt.org/donate
  • Spende an EFF: https://eff.org/donate-le

Ich werde jetzt 25 $ spenden. Wir sehen uns gleich wieder.

OK zurück? Lass uns anfangen.

Zuerst müssen wir certbot herunterladen und einige Abhängigkeiten installieren:

yum install -y git
Git-Klon https://github.com/certbot/certbot
cd certbot
git checkout v0.23.0
./certbot-auto -n --os-packages-only
./tools/venv.sh
ln -s `pwd` / venv / bin / certbot / usr / local / bin / certbot

Jetzt können wir unser Zertifikat anfordern. Führen Sie einfach diesen Befehl aus und befolgen Sie die Anweisungen.

certbot -d `uname -n` -d * .`uname -n` --manuell --präfered-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

Certbot wird:

  • Fragen Sie nach Ihrer E-Mail-Adresse
  • Bitten Sie Sie, den Nutzungsbedingungen für Let’s Encrypt zuzustimmen
  • Fragen Sie, ob Sie wichtige Spam-Nachrichten von EFF erhalten möchten
  • Fragen Sie, ob Sie mit der öffentlichen Protokollierung Ihrer IP-Adresse einverstanden sind
  • Bitten Sie Sie, einen TXT-Eintrag für _acme-challenge.codius.example.com hinzuzufügen
  • Bitten Sie Sie, einen zweiten TXT-Eintrag für _acme-challenge.codius.example.com hinzuzufügen
    Wenn Sie AWS verwenden, fügen Sie die beiden Datensätze einfach wie hier beschrieben als separate Zeilen hinzu.

Wichtig: Sie müssen beide Datensätze als separate TXT-Datensätze hinzufügen. Wenn Sie TXT _acme-challenge.codius.example.com abfragen, sollte Folgendes angezeigt werden:

$ dig TXT _acme-challenge.codius.example.com
;; - >> HEADER << - Opcode: QUERY, Rcode: NOERROR, ID: 64965
;; Flags: qr rd ra; ABFRAGE: 1, ANTWORT: 2, BEHÖRDE: 2, ZUSÄTZLICHE: 4
;; FRAGE ABSCHNITT:
;; _acme-challenge.codius.example.com. IN TXT
;; ANTWORT ABSCHNITT:
_acme-challenge.codius.example.com. 300 IN TXT "QwHjEBqK2RBhk5XyjriHPmjf2h2Ijettgy4BpwdVNlY"
_acme-challenge.codius.example.com. 300 IN TXT "YOMfcUWwPsW5hs2vl5AE / CRPg5m5BH7ORjEaUJReK4U"

Wenn Sie alles richtig gemacht haben, sollten Sie eine Nachricht erhalten wie:

WICHTIGE NOTIZEN:
 - Herzliche Glückwünsche! Ihr Zertifikat und Ihre Kette wurden gespeichert unter:
   /etc/letsencrypt/live/codius.example.com/fullchain.pem
   Ihre Schlüsseldatei wurde gespeichert unter:
   /etc/letsencrypt/live/codius.example.com/privkey.pem
   Ihr Zertifikat läuft am 04.09.2018 ab. Um eine neue oder optimierte zu erhalten
   Version dieses Zertifikats in der Zukunft einfach Certbot ausführen
   nochmal. Führen Sie Folgendes aus, um * alle * Zertifikate nicht interaktiv zu erneuern
   "certbot erneuern"
 - Wenn Ihnen Certbot gefällt, können Sie unsere Arbeit unterstützen durch:
   Spenden an ISRG / Let's Encrypt: https://letsencrypt.org/donate
   Spende an EFF: https://eff.org/donate-le

Wenn Sie so weit gekommen sind, klopfen Sie sich auf den Rücken. Der schwierige Teil ist vorbei!

Beachten Sie, dass Ihr Zertifikat nur 90 Tage gültig ist. In einem zukünftigen Lernprogramm wird erläutert, wie die automatische Verlängerung eingerichtet wird.

Einrichten von Nginx

Jetzt müssen wir Nginx einrichten, das als Reverse-Proxy für unseren Codius-Host fungiert. Nginx empfängt eingehenden Datenverkehr und leitet ihn an Codiusd weiter.

Der erste Schritt zur Installation von Nginx unter CentOS 7 besteht darin, das EPEL-Repository zu aktivieren:

yum install -y epel-release

Dann können wir Nginx selbst installieren.

yum install -y nginx
Systemctl aktivieren Nginx
echo 'return 301 https: // $ host $ request_uri;' > /etc/nginx/default.d/ssl-redirect.conf
openssl dhparam -out /etc/nginx/dhparam.pem 2048

Um Nginx als Reverse-Proxy für Codius zu konfigurieren, erstellen Sie eine Datei mit dem Namen /etc/nginx/conf.d/codius.conf mit folgendem Inhalt:

map $ http_upgrade $ connection_upgrade {
  Standard-Upgrade;
  '' $ http_connection;
}
Server {
  hören 443 ssl;
  ssl_certificate /etc/letsencrypt/live/codius.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/codius.example.com/privkey.pem;
  ssl_protocols TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_dhparam /etc/nginx/dhparam.pem;
  ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512: DHE-RSA-AES256-GCM-SHA512: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-AES256-GCM-SHA384: ECDHE-RSA-AES254;
  ssl_ecdh_curve secp384r1;
  ssl_session_timeout 10m;
  ssl_session_cache freigegeben: SSL: 10m;
  ssl_session_tickets off;
  ssl_stapling on;
  ssl_stapling_verify on;
  Resolver 1.1.1.1 1.0.0.1 gültig = 300s;
  resolver_timeout 5s;
  add_header Strict-Transport-Security "max-age = 63072000; includeSubDomains; preload";
  add_header X-Frame-Optionen DENY;
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode = block";
  Standort / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $ host;
    proxy_set_header X-Forwarded-For $ remote_addr;
    proxy_set_header Upgrade $ http_upgrade;
    proxy_set_header Connection $ connection_upgrade;
    proxy_buffering off;
  }
}

Wieder müssen wir example.codius.com durch den tatsächlichen Hostnamen ersetzen:

sed -i s / codius.example.com / `uname -n` / g /etc/nginx/conf.d/codius.conf

Wir müssen sicherstellen, dass SElinux so eingestellt ist, dass Nginx als Proxy fungiert:

setsebool -P httpd_can_network_connect 1

Machen Sie sich keine Sorgen, wenn Sie erfahren, dass SElinux deaktiviert ist. In diesem Fall wird der obige Befehl nicht benötigt, aber es tut auch nichts weh.

Schließlich müssen wir Nginx starten:

systemctl starte nginx

Öffnen Sie Port 443 in Firewalld

Auf Ihrem System ist möglicherweise eine Firewall vorinstalliert. Wenn Sie feststellen, dass Sie für Ihren Host nicht auf https://codius.example.com zugreifen können, versuchen Sie Folgendes, um Port 443 zu öffnen:

firewall-cmd --zone = public --add-port = 443 / tcp --permanent

Sie sind fertig!

Nun sollten Sie in der Lage sein, https://codius.example.com/version zu besuchen (ersetzen Sie codius.example.com durch Ihren Hostnamen) und eine Ausgabe ähnlich der folgenden zu sehen:

{"name": "Codiusd (JavaScript)", "version": "1.0.3"}

Das ist es! Ihr Codius-Host ist aktiv. Es wird automatisch versucht, eine Verbindung zum Codius-Netzwerk herzustellen und anderen Hosts von seiner Existenz zu berichten.

Wenn Sie auf Probleme stoßen, schauen Sie sich bitte unseren Gitter-Chat an. Wir helfen Ihnen gerne weiter!

Fehlerbehebung

502 Bad Gateway

Wenn Sie versuchen, auf https://codius.example.com zuzugreifen und diese Fehlermeldung erhalten, bedeutet dies, dass Ihr Nginx keine Verbindung zu Ihrem Codiusd herstellen kann. Suchen Sie in /var/log/nginx/error.log nach dem Fehler.

connect () to 127.0.0.1:3000 ist fehlgeschlagen (13: Berechtigung verweigert), während eine Verbindung zum Upstream hergestellt wird

Wenn Sie wie oben gezeigt a13: Berechtigung verweigert sehen, ist der wahrscheinliche Schuldige SElinux. Führen Sie den folgenden Befehl aus:

setsebool -P httpd_can_network_connect 1

Ein weiteres häufiges Problem ist, dass Codiusd nicht zuhört:

connect () ist fehlgeschlagen (111: Verbindung abgelehnt), während eine Verbindung zum Upstream hergestellt wird

In diesem Fall überprüfen Sie mit netstat -tulpn, welche Prozesse empfangsbereit sind:

netstat -tulpn
Aktive Internetverbindungen (nur Server)
Proto Recv-Q Send-Q Lokale Adresse Fremdadresse Status PID / Programmname
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1 / systemd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 33155 / nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2093 / sshd
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 47079 / node
tcp 0 0 169.254.77.68:7768 0.0.0.0:* LISTEN 47079 / node
tcp 0 0 127.0.0.1:7768 0.0.0.0:* LISTEN 19651 / node
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2017 / master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 33155 / nginx: master
tcp6 0 0 ::: 111 ::: * LISTEN 1 / systemd
tcp6 0 0 ::: 80 ::: * LISTEN 33155 / nginx: master
tcp6 0 0 ::: 22 ::: * LISTEN 2093 / sshd
tcp6 0 0 :: 1: 25 ::: * LISTEN 2017 / master
udp 0 0 0.0.0.0:111 0.0.0.0:* 20975 / rpcbind
udp 0 0 127.0.0.1:323 0.0.0.0:* 1344 / chronyd
udp 0 0 0.0.0.0:798 0.0.0.0:* 20975 / rpcbind
udp6 0 0 ::: 111 ::: * 20975 / rpcbind
udp6 0 0 :: 1: 323 ::: * 1344 / chronyd
udp6 0 0 ::: 798 ::: * 20975 / rpcbind

Wenn Sie 127.0.0.1:7768 nicht sehen, bedeutet dies, dass Moneyd nicht zuhört. Gehen Sie zum Abschnitt „Moneyd hört nicht zu“.

Wenn Sie 127.0.0.1:3000 sehen, aber 127.0.0.1:3000 nicht sehen, bedeutet dies, dass Moneyd zuhört, Codiusd jedoch nicht. Gehen Sie weiter unten zu "Codiusd hört nicht zu".

Wenn Sie 127.0.0.1:3000 sehen, aber immer noch 111: Connection refused erhalten, liegt wahrscheinlich ein Firewall-Problem vor. Stellen Sie sicher, dass Sie die folgenden Befehle ausführen, um Ihre Firewall ordnungsgemäß zu konfigurieren:

firewall-cmd --zone = public --add-port = 443 / tcp --permanent
firewall-cmd --zone = public --add-port = 7768 / tcp --permanent
firewall-cmd --reload

Moneyd hört nicht zu

Überprüfen Sie, ob Ihr Moneyd läuft:

systemctl status moneyd-xrp

Wenn es ausgeführt wird, stoppen Sie es und führen Sie es im Debug-Modus aus:

systemctl stop moneyd-xrp
DEBUG = * moneyd xrp: start

Wenn Sie Fehler sehen und Hilfe beim Verstehen der Vorgänge benötigen, können Sie Gitter um Hilfe bitten. Das häufigste Problem ist unzureichendes Guthaben in Ihrem XRP-Portemonnaie. Sie benötigen zusätzlich zur Reserve 16 XRP. Die Reserve hängt vom Konto ab. Für ein brandneues Konto sind es 20 XRP, aber es erhöht sich, wenn Sie verschiedene XRP-Ledger-Funktionen verwenden. Um sicherzugehen, können Sie 16 XRP mehr an die Brieftasche senden, Moneyd neu starten und prüfen, ob das Problem dadurch behoben wird.

Wenn Sie Moneyd in der Befehlszeile zum Laufen gebracht haben, halten Sie es an (Strg + C) und führen Sie es erneut als Dienst aus:

systemctl start moneyd-xrp

Codiusd hört nicht zu

Überprüfen Sie in diesem Fall, ob Codiusd ausgeführt wird:

systemctl status codiusd

Sie können versuchen, es neu zu starten:

systemctl starte codiusd neu

Oder überprüfen Sie die Protokolle auf nützliche Informationen:

journalctl -t codiusd -n 200

Wenn Sie Fehler sehen und Hilfe beim Verstehen der Vorgänge benötigen, können Sie Gitter um Hilfe bitten.