Dieser Artikel soll zeigen, wie man eine virtuelle Maschine in der Google-Cloud mit next.js- Webservern (fast) kostenlos einrichten und dauerhaft betreiben kann. Im ersten Schritt wird in der Google-Cloud eine virtuelle Debian-Maschine erstellt, dann der notwendige Workflow und zum Schluss Domänen mit entsprechendem Zugang eingerichtet. Das Ergebnis sind kleine Web-Server, wie ich sie hier betreibe. Auch die Website, die Sie gerade lesen, wird auf der gleichen virtuellen Maschine gehostet.
Je nach Vorkenntnissen kann es ein etwas steiniger Weg bis zu einem funktionsfähigen Servern werden. Sie sollten mindestens Grundkenntnisse in JavaScript , JSX und UNIX haben. Ich werde mich bemühen, alles ausführlich zu beschreiben und zu bebildern, so dass das Vorgehen verständlich und nachvollziehbar bleiben sollte.
Folgendes Vorgehen ist geplant:
Nach spätestens 90 Tagen in der Google-Cloud müssen Sie für die Abrechnung kostenpflichtiger Leistungen eine Kreditkarte zur Verfügung stellen. Sie machen dies auf eigene Verantwortung und Rechnung. Ich übernehme keinerlei Haftung für die Richtigkeit der hier veröffentlichten Angaben und Anleitungen.
Die Google-Cloud (GC) Konsole, die sich nach der Registrierung öffnet, ist Ihr Arbeitsraum in der Google-Cloud. Google verwaltet alle Ressourcen, Benutzerrechte, Anmeldedaten, Abrechnungen auf Projektebene. Den Projekten kann eine Organisation (z.B. ein Unternehmen, das den Google Workspace benutzt) übergeordnet sein.
Ein GC Projekt hat einen Projektnamen, eine automatisch generierte Projektnummer und eine weltweit einmalige Projekt-ID. Den Projektnamen und die Projekt-ID können Sie wählen. Die Projekt-ID kann man nicht mehr ändern.
Das Projekt, an dem Sie gerade arbeiten, wird in der oberen, blauen Zeile angezeigt und ist dort auch auswählbar. Ausgewählt ist jetzt das Standardprojekt My First Project, das Google mit der Registrierung angelegt hat. Wir wollen, als erste Aktion in der Konsole dieses Standardprojekt löschen und ein neues unter der Bezeichnung Web-Node-Server anlegen. Diesen Namen werden wir auch an anderer Stelle benutzen.
Falls Sie sich nicht auf der Startseite der GC-Konsole befinden, klicken Sie auf den Hamburger (die 3 waagrechten Streifen oben in der blauen Leiste) und wählen dann die Startseite und das Dashboard aus. In der Kachel Projektinformationen klicken Sie auf Zu den Projekteinstellungen. Unterhalb der blauen Leiste erscheint jetzt der Mülleimer BEENDEN. Wenn Sie draufklicken, werden Sie im sich öffnenden Fenster zur Eingabe der Projekt-Id aufgefordert. Nachdem Sie diese eingegeben und wiederum auf BEENDEN geklickt haben, wird das Projekt beendet und zum Löschen vorgemerkt.
Zurück zum Dashboard. Dort wird jetzt in der blauen Zeile Projekt auswählen angezeigt. Wenn Sie auf den Pfeil daneben klicken wird im aufpoppenden Fenster nur die Organisation (in diesem Fall Keine Organisation ) angezeigt. Wir klicken im Dashboard auf Projekt erstellen, geben als Projektnamen Web-Node-Server, als Projekt-ID web-node-server ein und klicken auf ERSTELLEN. Jetzt wird im Dashboard das neue Projekt angezeigt.
Damit der Server auch nach Ablauf des 90-tägigen Testzeitraums (fast) kostenlos bleibt, ist das "Kleingedruckte" fürProdukte der kostenlosen Stufezu beachten. Dort wird in der Kachel Compute Engine angegeben, dass eine
kostenlos sei. Das heißt, wir können nur eine f1-micro-Instanz in diesen Regionen dauerhaft kostenlos nutzen.
f1-micro-Instanzen erhalten 20 % einer vCPU, dürfen aber vorübergehend auf eine volle vCPU zugreifen, haben 0.66 GB Arbeitsspeicher und 30 GB Speicher auf Magnetplatte. Das ist nicht viel, für einen kleinen next.js-Server aber mehr als ausreichend.
Zum Einrichten des Servers klicken wir in der GC Konsole auf den Menupunkt Compute Engine und gelangen unter dem Menupunkt Virtuelle Maschinen zu den VM-Instanzen.
In der Kachel VM-Instanzen geht es mit dem Button Erstellen weiter. Es öffnet sich ein neues Fenster, in das Sie die folgenden Parameter für die neue VM-Instanz eintragen sollten. Die verrechnungskritischen Parameter sind rot markiert. Zum Abschluss klicken Sie ganz unten auf den Button Erstellen. Nach einer Weile erscheint die neue VM-Instanz in der Übersicht aller VM-Instanzen.
Name | web-node-server |
---|---|
Region | us-central1 (Iowa) |
Zone | us-central-a |
Maschinenkonfiguration/ Reihe | N1, ab 01.08.2021: E2 |
Maschinenkonfiguration/ Maschinentyp | f1-micro (max. 1 vCPU, 614 MB Arbeitsspeicher) ab 01.08.2021: e2-micro, max. 2 vCPU, 1 GB Arbeitsspeicher |
Maschinenkonfiguration/ Bootlaufwerk | über Ändern: Größe des Bootlaufwerks auf max. 30 GB ändern |
Firewall | HTTP- und HTTPS-Traffic zulassen |
Viel können wir dieser Maschine noch nicht anfangen. Sie lässt sich aber über die Externe IP-Adresse "anpingen". Öffnen Sie dazu ein Kommandofenster (Terminal, Windows Kommandozeile) ihres Betriebssystems und geben Sie den Befehl ping , gefolgt von einem Leerzeichen und der im VM-Fenster angezeigten externen IP-Adresse ihres Servers, ein. Stoppen lässt sich die Ausführung des Pings mit Strg-C.
% ping 35.192.166.139PING 35.192.166.139 (35.192.166.139): 56 data bytes64 bytes from 35.192.166.139: icmp_seq=0 ttl=54 time=128.299 ms64 bytes from 35.192.166.139: icmp_seq=1 ttl=54 time=127.308 ms64 bytes from 35.192.166.139: icmp_seq=2 ttl=54 time=123.983 ms...
Der Server hat gerade mal 0.66 GB Arbeitsspeicher (RAM), Speicherüberläufe sind also vorprogrammiert. Deshalb soll der adressierbare Systemspeicher durch eine Auslagerungsdatei (SWAP) von 2 GiB erweitert werden. Auf die Maßeinheiten will ich nicht weiter eingehen. Falls diese unklar sind, gibt es hier Information:Elektronik Kompendium.Der dd-Befehl und die von ihm benutzten Einheiten, sind hier ausführlich erklärt:ubuntuusers dd.Lassen Sie sich hier nicht entmutigen, in dem Bereich herrscht etwas Durcheinander, die Einheiten können unterschiedlich interpretiert werden.
Zum Einrichten des SWAP klicken wir im Fenster der VM-Instanzen (siehe Bild oben) auf SSH ↓ und wählen Im Browserfenster öffnen.Nach einiger Zeit erscheint die Konsole der virtuellen Maschine.
Um Informationen über den vorhanden SWAP-Speicher zu erhalten geben Sie das Kommando free -m ein und drücken dann die Entertaste ↵. Die Antwort der Maschine zeigt: Es ist kein SWAP vorhanden.
Wir geben nun die folgende Befehlsfolge ein. Den Befehlen ist jeweils der sudo-Befehl vorangestellt. Dadurch wird der nachfolgende Befehl mit Adminstratorrechten ausgeführt.
# der Datei /swapfile Platz im Dateisystem zuweisensudo fallocate -l 2G /swapfile# /swapfile mit Nullen überschreibensudo dd if=/dev/zero of=/swapfile bs=1M count=1024*2# das System meldet:# 2048+0 records in# 2048+0 records out# 2147483648 bytes (2.1 GB, 2.0 GiB) copied, 3.38243 s, 635 MB/s# wir wechseln zur Wurzel des Dateisystems:cd /# und lassen uns alle Dateien auflisten:ls -l# u. a. wird die gerade erzeugt Datei swapfile angezeigt:# -rw-r--r-- 1 root root 2147483648 Dec 9 15:09 swapfile# wir ändern die Zugriffsrechte auf diese Datei:sudo chmod 600 /swapfile# und lassen uns wieder die Datei /swapfile anzeigenls -l swapfile# man sieht, dass die Zugriffsrechte verändert wurden:# -rw------- 1 root root 2147483648 Dec 9 15:11 swapfile# die Datei swapfile als Auslagerungsspeicher einrichtensudo mkswap /swapfile# das System meldet:# Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)# no label, UUID=xxxxx-xxx-etc.# Das "Swappen" starten:sudo swapon /swapfile# den freien und belegten Speicher abfragenfree -m# das System meldet u. a.:# total used free shared buff/cache available# Mem: 583 113 42 6 427 366# Swap: 2047 0 2047
Leider ist es so, dass bei einem Reboot des Servers der SWAP-Speicher nicht automatisch gestartet wird. Das können Sie leicht ausprobieren, indem Sie in der GC Konsole auf der Seite der VM-Instanzen die gerade erstellte VM mit einem Hacken in der Checkbox auswählen und dann unterhalb der blauen Zeile auf den Button Zurücksetzen (der Kreis mit einem senkrechten Strich) klicken. Nach dem Zurücksetzen zeigt die Speicherabfrage free -m an, dass kein SWAP mehr existiert.
Es ist notwendig die Datei /etc/fstab um die SWAP-Datei zu ergänzen. Die Funktion der /etc/fstab ist z.B. hier erklärt:ubuntuusers fstab.Die Ergänzung sollten Sie mit dem Editor ihrer Wahl machen. Falls Sie noch keinen Editor unter UNIX kennen, ist dies etwas heikel. Ich werde den Schritt für den vim-Editor beschreiben.
In der Datei /etc/fstab ist die folgende Zeile am Ende einzufügen:
/swapfile swap swap defaults 0 0
Wir starten den vim-Editor mit Administrationsrechten durch das folgende Kommando:
sudo vim /etc/fstab
Es öffnet sich das Editorfenster, das etwa so aussehen sollte:
# /etc/fstab: static file system informationUUID=59af2a10-b9ae-4d14-94db-29555eafcabc / ext4 rw,discard,errors=remount-ro,x-systemd.growfs 0 0UUID=ED6A-504D /boot/efi vfat defaults 0 0
Wenn man den Editor nicht kennt, ist es nicht leicht die obige Zeile am Ende einzufügen. Bitte lesen Sie diesen Abschnitt erst vollständig, bevor Sie mit dem Editieren starten. Sie müssen wissen, dass der Editor in unterschiedlichen Modi arbeitet, nach dem Starten im Normalmodus. In diesem Modus lässt sich z. B. durch den Befehl h (einfach das h auf der Tastatur drücken) der Cursor um eine Stelle nach links bewegen, in die Datei können Sie nichts schreiben. Mit dem Befehl a (a-Taste drücken) gelangen wir in den Eingabemodus. Würden wir jetzt das h drücken, würde es in die Datei geschrieben. Der Eingabemodus wird in der untersten Zeile des Editors durch -- INSERT -- angezeigt. Mit den Pfeiltasten bewegen wir im Eingabemodus den Cursor bis zum Ende der letzten Zeile, erzeugen durch Drücken der Entertaste ↵ eine neue und schreiben in diese den oben angegebenen Inhalt. Jetzt müssen die Änderungen noch gespeichert werden. Durch Drücken der ESC-Taste gelangen wir in den Normalmodus zurück. Im Normalmodus rufen wir den Kommandozeilenmodus durch Drücken des Doppelpunktes auf. Dieser Modus wird in der untersten Zeile durch einen ":" angezeigt. Weitere Eingaben landen hinter diesem ":". Mit w (für write) und der Entertaste ↵ wird die Datei gespeichert. Wieder mit dem Doppelpunkt, jetzt aber mit anschließendem q (für quit) und der Entertaste ↵ wird der Editor verlassen.
Falls Sie das Editieren abbrechen wollen oder müssen geben Sie einfach nacheinander ESC : q ! ↵ ein.
Zum Abschluss überprüfen wir, ob die Datei /etc/fstab einwandfrei funktioniert. Geben Sie dazu in die Konsole des Browserfensters das folgende Kommando ein. Es sollte keine Fehlermeldung erscheinen.
sudo mount -a
Im nächsen Schritt wird node.js installiert. Die Installation isthier hier erklärt. Wir geben also in die Browser-Konsole der VM folgende Kommandos ein:
# aktualisieren der installierten Pakete# liest die eingetragenen Pakete neu einsudo apt-get update# bringt die installierten Pakete auf den neusten Stand (kann dauern)sudo apt-get upgrade# Setup-Dateien übertragencurl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash -# node.js installierensudo apt-get install -y nodejs# Kontrollenode -v# die Antwort solle sein: v15.x.ynpm -v# die Antwort solle sein: v7.x.yz
Der Server soll als Web-Server betrieben werden und unter einem Domainnamen erreichbar sein. Das ist, ohne dynamisches Domain Name System (DNS), nur möglich, wenn die IP-Adresse immer gleichbleibt. Neue VMs haben standartmäßig eine sitzungsspezifische IP-Adresse. Das wollen wir jetzt auf der Seite VPC-Netzwerk / Externe IP-Adressen ändern.
Auf dieser Seite reservieren wir zunächst eine statische IP-Adresse (der Button oben). Der Name der Adresse ist frei wählbar, die Netzwerkdienststufe: Premium, die IP-Version: IPv4, der Typ: Regional und die Region: us-central1 (Iowa). Mit dem Klick auf den Button RESERVIEREN wird eine zweite IP-Adresse, die jetzt den Typ Statisch hat, angezeigt. In der Zeile der neuen IP-Adresse klicken wir ganz rechts auf ÄNDERN und weisen den web-node-server (siehe Bild) der Adresse zu. Nachdem die Änderung abgespeichert wurde wird in der Liste der IP-Adressen nur noch die Neue mit der statischen IP-Adresse angezeigt (im Beispiel: 35.192.166.139). Wir merken uns diese Adresse.
Da wir (fast) an Ort und Stelle sind, können wir einen Blick auf die Seite Firewall werfen. Dort sind die ersten beiden Zeilen default-allow-http und default-allow-https interessant. Als Ziel wird für diese beiden Zeilen http-server bzw. https-server angegeben. Diese Ziele findet man der VM-Instanz als Netzwerk-Tags wieder.
Als Belohnung für die harte Arbeit an der VM richten wir einen Hello-World-Server auf dieser ein. Hierzu starten wir in der Übersicht der VM-Instanzen eine SSH im Browserfenster und geben dann folgende Befehle ein:
# Wechsel ins User-Home-Verzeichniscd# Home-Verzeichnis anzeigen, Antwort: /home/ihr_nutzernamepwd# neues Verzeichnis helloWorld anlegenmkdir helloWorld# Dateien und Verzeichnisse auflistenls -l# total 4# drwxr-xr-x 2 anton_beton anton_beton 4096 Dec 10 14:22 helloWorld# ins Verzeichnis helloworld wechselncd helloWorld# in der Eingabezeile sollte jetzt so etwas wie~/helloWorld$# angezeigt werden
In diesem Verzeichnis legen Sie die Datei app.js mit dem Editor ihrer Wahl (z. B. vim oder nano) und folgendem Inhalt an. Dabei ist die IP-Adresse 10.108.0.3 durch die interne IP-Adresse Ihrer VM zu ersetzen.
const http = require('http');const hostname = '10.108.0.3';const port = 80;const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Hello World');});server.listen(port, hostname, () => {console.log(`Server running at http://${hostname}:${port}`);});
Danach geben Sie im Browserfenster folgendes Kommando ein (Sie befinden sich noch im Verzeichnis helloWorld):
# sudo, weil wir Port 80 verwendensudo node app.js
Sie können nun den neuen Web-Server unter der externen IP-Adresse in einem Browserfenster aufrufen. That is awesome, isn't it?
Das nächste Kapitel beginnt mit dem Erstellen eines vernünftigen Workflows. Wir werden die Dateien für den Server künftig auf einem PC erstellen und editieren und sie dann in den Server hochladen um nicht diese umständlichen Unix-Editoren verwenden zu müssen.