Foto af Pero Kalimero på Unsplash

Sådan køres din egen Codius-vært

Og få betalt for at gøre det!

Opsætning af en Codius-vært

I det smarte programøkosystem, som Codius opretter, etableres der et forhold mellem værter og udviklere, der giver mulighed for et væld af hostingindstillinger for udvikleren og giver værten mulighed for at modtage betaling for at være vært for nævnte kode. For den håbefulde Codius-vært vil dette indlæg forklare de trin, der er nødvendige for at starte en for sig selv.

Forudsætninger

Du skal have en server til at køre Codius på, som skal opfylde følgende specifikationer:

  • CentOS 7. Denne tutorial antager, at du bruger CentOS 7, og det er det eneste operativsystem, der officielt understøttes lige nu. Vi arbejder på at give instruktioner til andre Linux-distributioner.
  • x86-64 arkitektur. Du har brug for en moderne 64-bit processor. Desværre understøttes ARM endnu ikke.
  • Support til virtualisering. Din Codius-vært kører kontrakter som VM'er, så du har brug for en processor, der understøtter virtualisering. Heldigvis gør de fleste moderne processorer det.
  • Blot metal (anbefales). Du kan få kendte metalforekomster fra tjenester som Packet og AWS. En VM fungerer også, hvis den understøtter nestede virtualisering. Men det vil være mindre effektivt.
  • Root-adgang. Du installerer software.
  • Mindst 2 GB hukommelse, helst mere. Hver kontrakt bruger 512 MB hukommelse. Derudover har du brug for noget hukommelse til selve værts OS.

Ud over serveren har du brug for:

  • En XRP-tegnebog. Support til andre betalingssystemer findes, men lige nu er XRP det bedste valg. Codius driver en lokal forekomst af Moneyd for at håndtere betalinger. Bemærk, at din tegnebog skal finansieres, dvs. indeholde mindst 36 XRP. Specifikt har tegnebogen brug for 16 XRP ud over den nuværende reserve. Den tegnebog, du bruger her, kan heller ikke bruges med nogen anden forekomst af Moneyd.
  • Et domæne: Du skal have dit eget domæne, der fungerer som det offentlige værtnavn for din Codius-vært. For eksempel. codius.example.com
    Hvis du vil køre flere Codius-værter under det samme domæne, kan du bare nummerere dem, som codius1.example.com, codius2.example.com osv.

Grundlæggende konfiguration

Til denne tutorial antager vi, at du er rod. Hvis du er logget ind som en anden bruger, skal du køre sudo su for at skifte til rodbrugeren.

Inden vi starter, skal vi sørge for, at vores systemværtsnavn er korrekt konfigureret. Kør følgende kommando, og erstatt codius.example.com med dit Codius-værtsnavn.

hostnamectl sæt-værtnavn codius.example.com

Nu skal vi sikre os, at værtsnavnet er indstillet korrekt ved at køre uname -n. Dette skal udskrive det værtsnavn, du lige har angivet:

$ uname -n
codius.example.com

Sørg for, at denne kommando returnerer det rigtige værtsnavn, da vi bruger det i nogle af scripterne senere i denne tutorial.

Installation

Codius er en open-source decentral hostingplaform, bygget med Interledger. Med det kan brugere køre software på servere overalt i verden og betale for det ved hjælp af en hvilken som helst valuta. Denne tutorial vil lære dig, hvordan du opretter din egen Codius-vært og begynder at tjene til at være vært for andre udviklerkoder i XRP.

En Codius-vært består af tre dele: hyperd, moneyd og codiusd. Hyperd håndterer virtualisering, Moneyd giver mulighed for Interledger-betalinger, og Codiusd udsætter slutpunkter for uploadere til at sende deres kode til værten.

En Codius-vært består af tre hovedkomponenter:

  • Hyperd - Håndterer virtualisering og hardwareisolering af kode
  • Moneyd - Tillader afsendelse og modtagelse af betalinger på Interledger
  • Codiusd - Synliggør endepunkter, der giver udviklere mulighed for at uploade kode til værten og starte pods for dem.

Installation af Hyperd

Hyperd giver værten mulighed for at køre uploadet kode i en hardware-isoleret pod, som derefter tildeler containere til uploadet kode, når den kaldes.

SSH til din CentOS-server og installer følgende pakker:

yum installer -y gcc-c ++ fabrikat
curl -sSl https://codius.s3.amazonaws.com/hyper-bootstrap.sh | bash

Dette vil installere alle vores RPM-afhængigheder for NodeJS og hyperd, samt automatisk videresende porte fra hyperd pods. Det starter også hyperd og giver dig mulighed for at bruge hypercli-kommandolinjegrænsefladen.

Installation af Moneyd

Moneyd er en dæmon, der giver en vært mulighed for at sende og modtage betalinger via Interledger. I denne opsætning vil det blive installeret og konfigureret til at foretage betalinger med XRP, men der arbejdes på plugins til Ethereum og andre blockchains. Hold øje med den aktuelle liste over uplinks.

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

På dette tidspunkt har du brug for din XRP Secret klar.

moneyd xrp: konfigurering
# Du bliver bedt om at indtaste din hemmelighed her
systemctl start moneyd-xrp

Du kan bekræfte status for dæmonen med systemctl status moneyd-xrp

Installation af Codiusd

Codiusd er serversiden af ​​Codius, der afslører endepunkter, der giver brugerne mulighed for at uploade kode og proviant containere til dem. Det tillader også anmodninger om pods, som det i øjeblikket er vært, til.

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

Til sidst oprette en fil kaldet codiusd.service med følgende indhold i / etc / systemd / system:

[Enhed]
Beskrivelse = Codiusd
Efter = netværk.target nss-lookup.target
[Service]
ExecStart = / usr / bin / npm start
Miljø = "DEBUG = *"
Miljø = "CODIUS_PUBLIC_URI = https: //codius.example.com"
Miljø = "CODIUS_XRP_PER_MONTH = 10"
WorkingDirectory = / usr / lib / node_modules / codiusd
Genstart = altid
Standardoutput = syslog
StandardError = syslog
SyslogIdentifier = codiusd
User = root
Gruppe = root
[Installere]
WantedBy = multi-user.target

Derefter skal vi redigere denne fil for at bruge vores faktiske værtsnavn.

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

Alternativt kan du trække eksemplet filen og gemme i en kommando:

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

For at starte codiusd kan du køre følgende kommandoer:

systemctl aktivere codiusd
systemctl start codiusd

Din codiusd-server kører nu på port 3000. Manifester kan uploades via endpoints på denne adresse.

Du kan kontrollere serverens status med kommandoen systemctl status codiusd

Domæneopsætning

For at konfigurere dit domæne til brug med Codius, udfører du følgende trin:

  • Tilføj DNS-poster, der peger på din Codius-vært
  • Anmod om et jokertekst TLS-certifikat fra Let’s Encrypt
  • Indstil en nginx-omvendt proxy

Tilføjelse af DNS-poster

For at køre Codius har vi brug for et primært værtsnavn til vores Codius-vært, og vi har brug for eventuelle underdomæner for at pege også på vores vært. Hvis dit domæne f.eks. Er eksempel.com, skal du pege codius.example.com til din Codius-vært, herunder eventuelle underdomæner som xyz.codius.example.com.

For at opnå det opretter vi to A-poster:

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

Udskift codius.example.com med dit Codius-værtsnavn og 203.0.113.1 med IP-adressen på din Codius-vært.

Sørg for, at du kan pinge din Codius-vært under dens nye værtsnavn:

$ ping -c 1 codius.example.com
PING codius.example.com (203.0.113.1) 56 (84) byte af data.
64 byte fra 203.0.113.1 (203.0.113.1): icmp_seq = 1 ttl = 48 tid = 4.13 ms
--- codius.example.com pingstatistik ---
1 pakker sendt, 1 modtaget, 0% pakketab, tid 0ms
rtt min / gennemsnit / max / mdev = 4.131 / 4.131 / 4.131 / 0.000 ms

Og sørg for, at det også kan nås for ethvert vilkårligt underdomæne:

$ ping -c 1 foobar.codius.example.com
PING foobar.codius.example.com (203.0.113.1) 56 (84) byte af data.
64 byte fra 203.0.113.1 (203.0.113.1): icmp_seq = 1 ttl = 48 tid = 3,72 m
--- foobar.codius.example.com pingstatistik ---
1 pakker sendt, 1 modtaget, 0% pakketab, tid 0ms
rtt min / gennemsnit / max / mdev = 3.722 / 3.722 / 3.722 / 0.000 ms

Bemærk, at værtsnavnet i begge tilfælde blev løst til vores Codius-værts IP-adresse, 203.0.113.1.

Nu hvor vores vært kan nås, er vi klar til at anmode om et TLS-certifikat.

Anmoder om et wildcard-certifikat

Tidligere var certifikater dyre. Heldigvis kan du i disse dage få gratis certs fra Let's Encrypt. Overvej venligst at donere til denne fantastiske service:

  • Donering til ISRG / Let’s Encrypt: https://letsencrypt.org/donate
  • Donering til EFF: https://eff.org/donate-le

Jeg vil donere 25 $ lige nu. Mød dig lidt tilbage her.

Okay, tilbage? Lad os komme igang.

Først skal vi downloade certbot og installere nogle afhængigheder:

yum installere -y git
git klon https://github.com/certbot/certbot
cd certbot
git checkout v0.23.0
./certbot-auto -n --os-pakker-kun
./tools/venv.sh
ln-s `pwd` / venv / bin / certbot / usr / local / bin / certbot

Nu er vi klar til at anmode om vores certifikat. Bare kør denne kommando og følg anvisningerne.

certbot -d `uname -n` -d * .`uname -n` - manuel - foredrag-udfordringer dns-01 - server https://acme-v02.api.letsencrypt.org/directory certonly

Certbot vil:

  • Beder dig om din e-mail-adresse
  • Bed dig om at acceptere Servicevilkårene for Let's Encrypt
  • Spørg dig, om du vil have vigtige meddelelser fra EFF spam
  • Spørg dig, om du har det godt, at din IP logges offentligt
  • Bed dig om at tilføje en TXT-post til _acme-challenge.codius.example.com
  • Bed dig om at tilføje en anden TXT-post til _acme-challenge.codius.example.com
    Hvis du bruger AWS, skal du blot tilføje de to poster som separate linjer som beskrevet her.

Vigtigt: Du skal tilføje begge poster som separate TXT-poster. Når du spørger om TXT _acme-challenge.codius.example.com, skal du se noget lignende:

$ grave TXT _acme-challenge.codius.example.com
;; - >> HEADER << - opcode: QUERY, rcode: NOERROR, id: 64965
;; flag: qr rd ra; SPØRGSMÅL: 1, SVAR: 2, MYNDIGHED: 2, TILLÆGGENDE: 4
;; SPØRGSMÅL:
;; _acme-challenge.codius.example.com. I TXT
;; SVAR AFSNIT:
_acme-challenge.codius.example.com. 300 I TXT "QwHjEBqK2RBhk5XyjriHPmjf2h2Ijettgy4BpwdVNlY"
_acme-challenge.codius.example.com. 300 I TXT "YOMfcUWwPsW5hs2vl5AE / CRPg5m5BH7ORjEaUJReK4U"

Hvis du gjorde alt korrekt, skal du få en meddelelse som:

VIGTIGE BEMÆRKNINGER:
 - Tillykke! Dit certifikat og kæde er gemt på:
   /etc/letsencrypt/live/codius.example.com/fullchain.pem
   Din nøglefil er gemt på:
   /etc/letsencrypt/live/codius.example.com/privkey.pem
   Dit certifikat udløber den 04-09-2018. At få en ny eller finjusteret
   version af dette certifikat i fremtiden, skal du blot køre certbot
   igen. For at ikke-interaktivt fornye * alle * af dine certifikater skal du køre
   "certbot fornye"
 - Hvis du kan lide Certbot, kan du overveje at støtte vores arbejde ved:
   Donering til ISRG / Let's Encrypt: https://letsencrypt.org/donate
   Donering til EFF: https://eff.org/donate-le

Hvis du kommer så langt, skal du give dig en klap på bagsiden. Den hårde del er forbi!

Bemærk, at dit certifikat kun er gyldigt i 90 dage. Vi vil dække, hvordan du konfigurerer automatisk fornyelse i en fremtidig tutorial.

Opsætning af Nginx

Nu er vi nødt til at indstille Nginx, der fungerer som en omvendt proxy for vores Codius-vært. Nginx vil modtage al indkommende trafik og videresende den til Codiusd.

Det første trin til installation af Nginx på CentOS 7 er at aktivere EPEL-arkivet:

yum installere -y epel-release

Så kan vi installere Nginx selv.

yum installere -y nginx
systemctl aktivere nginx
ekko 'return 301 https: // $ vært $ request_uri;' > /etc/nginx/default.d/ssl-redirect.conf
openssl dhparam -out /etc/nginx/dhparam.pem 2048

For at konfigurere Nginx som en omvendt proxy for Codius skal du oprette en fil med navnet /etc/nginx/conf.d/codius.conf med følgende indhold:

kort $ http_upgrade $ connection_upgrade {
  standardopgradering;
  '' $ http_forbindelse;
}
server {
  lyt 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 tændt;
  ssl_dhparam /etc/nginx/dhparam.pem;
  ssl_cifhers ECDHE-RSA-AES256-GCM-SHA512: DHE-RSA-AES256-GCM-SHA512: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-AES256-GCM-SHA384: ECDHE-RSA-AES;
  ssl_ecdh_curve secp384r1;
  ssl_session_timeout 10m;
  ssl_session_cache delt: SSL: 10m;
  ssl_session_tickets deaktiveret;
  ssl_stapling on;
  ssl_stapling_verify on;
  resolver 1.1.1.1 1.0.0.1 gyldig = 300s;
  resolver_timeout 5s;
  add_header Strict-Transport-Security "max-age = 63072000; includeSubDomains; preload";
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode = block";
  Beliggenhed / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $ vært;
    proxy_set_header X-Forwarded-For $ remote_addr;
    proxy_set_header Opgradering $ http_upgrade;
    proxy_set_header Forbindelse $ connection_upgrade;
    proxy_buffering off;
  }
}

Endnu en gang er vi nødt til at erstatte eksempel.codius.com med det faktiske værtsnavn:

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

Vi er nødt til at sikre, at SElinux er indstillet til at give Nginx mulighed for at fungere som en proxy:

setsebool -P httpd_can_network_connect 1

Bare rolig, hvis det fortæller dig, at SElinux er deaktiveret. I dette tilfælde er kommandoen ovenfor ikke nødvendig, men det skader heller ikke noget.

Endelig er vi nødt til at starte Nginx:

systemctl start nginx

Åbn Port 443 i Firewalld

Dit system leveres muligvis eller ikke med firewalld forudinstalleret. Hvis du finder ud af, at du ikke kan få adgang til https://codius.example.com for din vært, kan du prøve denne kommando for at åbne port 443:

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

Du er færdig!

Nu skal du kunne besøge https://codius.example.com/version (erstatte codius.example.com med dit værtsnavn) og se output, der ligner dette:

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

Det er det! Din Codius-vært er i gang. Det vil automatisk forsøge at oprette forbindelse til Codius-netværket og fortælle andre værter om dets eksistens.

Hvis du støder på problemer, skal du svinge ved vores Gitter-chat. Vi vil være der for at hjælpe!

Fejlfinding

502 Bad Gateway

Hvis du prøver at få adgang til https://codius.example.com og får denne fejl, betyder det, at din nginx ikke er i stand til at oprette forbindelse til din codiusd. Kontroller for fejlen i /var/log/nginx/error.log.

forbind () til 127.0.0.1:3000 mislykkedes (13: Tilladelse afvist), mens der oprettes forbindelse til opstrøms

Hvis du ser a13: Tilladelse afvist som vist ovenfor, er den sandsynlige skyldige SElinux. Kør følgende kommando:

setsebool -P httpd_can_network_connect 1

Et andet almindeligt spørgsmål er, at Codiusd ikke lytter:

forbindelse () mislykkedes (111: Forbindelse nægtet), mens forbindelsen til opstrøms

I dette tilfælde skal du kontrollere, hvilke processer der lytter med netstat -tulpn:

netstat -tulpn
Aktive internetforbindelser (kun servere)
Proto Recv-Q Send-Q Lokal adresse Fremmed adresse Stat PID / Programnavn
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:* LYST 2093 / sshd
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LYST 47079 / node
tcp 0 0 169.254.77.68:7768 0.0.0.0:* LYST 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 ::: * LYST 1 / systemd
tcp6 0 0 ::: 80 ::: * LYST 33155 / nginx: master
tcp6 0 0 ::: 22 ::: * LYST 2093 / sshd
tcp6 0 0 :: 1: 25 ::: * LYST 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

Hvis du ikke kan se 127.0.0.1:7768, betyder det, at Moneyd ikke lytter. Gå til afsnittet "Moneyd ikke lytter" nedenfor.

Hvis du ser 127.0.0.1:3000, men du ikke ser 127.0.0.1:3000, betyder det, at Moneyd lytter, men Codiusd ikke. Gå til “Codiusd ikke lytter” nedenfor.

Hvis du ser 127.0.0.1:3000, men stadig får 111: Forbindelse nægtet, er det sandsynligvis et firewall-problem. Sørg for, at du kører disse kommandoer til korrekt konfigurering af din firewall:

firewall-cmd - zone = public --add-port = 443 / tcp --permanent
firewall-cmd - zone = public --add-port = 7768 / tcp --permanent
firewall-cmd - genindlæst

Moneyd lytter ikke

Kontroller, om din Moneyd kører:

systemctl status moneyd-xrp

Hvis det kører, kan du prøve at stoppe det og køre det i debugtilstand:

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

Hvis du ser fejl og har brug for hjælp til at forstå, hvad der foregår, er du velkommen til at bede om hjælp til Gitter. Det mest almindelige problem er utilstrækkelige midler i din XRP-tegnebog. Du har brug for 16 XRP ud over reserven. Reserve afhænger af kontoen. For en splinterny konto er den 20 XRP, men den øges, når du bruger forskellige XRP Ledger-funktioner. For at være sikker, kan du sende 16 XRP mere til tegnebogen, genstarte Moneyd og se, om det løser problemet.

Når du har fået Moneyd til at arbejde på kommandolinjen, skal du stoppe den (Ctrl + C) og køre den som en service igen:

systemctl start moneyd-xrp

Codius lytter ikke

I dette tilfælde skal du kontrollere, om Codiusd kører:

systemctl status codiusd

Du kan prøve at genstarte det:

systemctl genstart codiusd

Eller tjek logfilerne for nyttige oplysninger:

journalctl -t codiusd -n 200

Hvis du ser fejl og har brug for hjælp til at forstå, hvad der foregår, er du velkommen til at bede om hjælp til Gitter.