Der Workflow mit Visual Studio (VS) Code

Editieren und Programmieren von Webseiten mit UNIX-Editoren ist zwar möglich, aber mühevoll und fehleranfällig. Ich benutze daher folgenden Workflow:

  1. Das Original der Website wird lokal auf dem PC mit dem EditorVisual Studio Codeentwickelt und gepflegt.
  2. Die örtlichen Dateien werden entweder direkt durch "Herüberziehen" vom örtlichen Editorfenster ins remote Editorfenster kopiert, oder
  3. über das gcloud-Befehlszeilentool mit dem Programmscpauf die virtuelle Maschine kopiert.

Visual Studio Code

Visual Studio Code (VS Code) ist ein freier Quelltext-Editor von Microsoft. Er ist plattformübergreifend für die Betriebssysteme Windows, macOS und Linux verfügbar. Ich habe schon mit einigen freien Editoren gearbeitet, VS Code ist für das Programmieren mit JavaScript und React für mich der beste und ich kann ihn guten Gewissens weiterempfehlen. Den Editor können Siehier downloaden.

Ein Thema bei diesem Editor sind die Erweiterungen. Da ich überwiegend mit JavaScript, React und React-Native arbeite, habe ich folgende 19 Erweiterungen installiert, auf die ich, bis auf die Remote-SSH-Erweiterungen, nicht weiter eingehen möchte.

  1. Atom One Dark Theme
  2. Auto Close Tag
  3. Auto Import
  4. Babel JavaScript
  5. Color Highlight
  6. Color Picker
  7. ES7 React/Redux/GraphQL/React-Native snippets
  8. ESLint
  9. Guides
  10. indent-rainbow
  11. Material Icon Theme
  12. Path Intellisense
  13. Prettier - Code formatter
  14. Quokka.js
  15. Rainbow Brackets
  16. React Native Tools
  17. Remote - SSH
  18. Remote - SSH: Editing Configuration Files
  19. Theme - Oceanic Next

SSH-Schlüssel in Metadaten verwalten

Um über VS Code Zugriff auf die VM-Instanz zu erhalten, brauchen Sie eine private und öffentliche SSH-Schlüsseldatei. Wie Sie diese Dateien zeugen können isthier unter "Neuen SSH-Schlüssel erstellen"beschrieben.

Bei der Schlüsselerstellung müssen Sie ihren Benutzernamen in der virtuellen Maschine und ein frei gewähltes Passwort angeben. Ihr Benutzernamen in der VM wird als Prompt im SSH-Browserfenster angezeigt, im untenstehenden Bild ist er "anton_betonl@web-node-server". Die Adresse, die hinter dem @ angegeben ist, scheint egal zu sein, funktioniert hat der Verbindungsaufbau auch mit dem Benutzernamen "anton_beton@gmail.com". Das Passwort wird bei jedem neuen Verbindungsaufbau zur virtuellen Maschine abgefragt.

Ihr Benutzername in der SSH-Schell
Ihr Benutzername in der SSH-Schell

Die Schlüssel, die Sie erzeugen sollten in etwa wie folgt aussehen:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDFmS/xtMBIbcuqYKJ5TXXEAe+eH4VEIaI
+AmhC0nnRetKt8djPOEJYidQ3HLREOZ8Dui7UV6zAuTPFxgVAsSe1FcRc7Lno52xJlSVhPu0h2W528YLpnDvORr1DZP
Yt1A+jNdv0meM4UMy3UwbMCYGEP/WZaXVQ9iRcS4PrRJu9KOS0aCSw8+ktA39DPKYVfIFF6CFwn8Q6kRnc0QMwR11xC2c67edqGdcNlk4w8lzPMxqMAk7MwYn+d1Xf4ykp2woV94/
YXR68SeXXk7aznhvNvx2kfTjFXrRgm2ksR3k+JRJ7iVTaUCfl
+siuJLa25PAF5qELhgeGhLoYsHGUoBfPIjA4k7iz46AXiIBV0Dz
+dCTiRFuoHUUKjF9rRwjKzfq56tD9e5irqzzISZMS+CNYoArSHIjzUCzQTBeHXTGL32lInZ3/R3w1df4mew3Dh
+N091HFjn/121vz20+gpXDM1o89TJI0pLIO1wmcA0yE49uztre9FZFrUkOib+8eDB8=abc_defg@gmail.com

öffentlicher Schlüssel

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBYvOxDGe
L4FlcucpmDZowVAAAAEAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQDFmS/xtMBI
bcuqYKJ5TXXEAe+eH4VEIaI+AmhC0nnRetKt8djPOEJYidQ3HLREOZ8Dui7UV6zAuTPFxg
VAsSe1FcRc7Lno52xJlSVhPu0h2W528YLpnDvORr1DZPYt1A+jNdv0meM4UMy3UwbMCYGE
... etwa 35 weitere Zeilen ...
pKFecuCOWqkuKNJCR8S0gtgDlPs=
-----END OPENSSH PRIVATE KEY-----

privater Schlüssel

Den öffentlichen Schlüssel müssen wir der VM bekanntgeben. Wir wählen dazu in der GC Konsole die Menüpunkte Compute Engine, Metadaten und dort den Reiter SSH-Schlüssel. Weiter klicken wir auf Bearbeiten, Zeile hinzufügen, kopieren in das sich öffnende Feld den öffentlichen Schlüssel und speichern das Ganze ab. Das war's.

Remote-Verbindung von VS-Code zum virtuellen GC-Server

Sie haben VS Code mit den ErweiterungenRemote - SSHundRemote - SSH: Editing Configuration Filesinstalliert.

Bevor wir die Verbindung zur virtuellen Maschine herstellen können, müssen wir diese in die Konfigurationsdatei der VS Code Erweiterung eintragen. Hierzu klicken wir auf das Symbol des Remote Window, ganz unten links im VS Code Fenster.

Das Remote Window
Das Remote Window

Es öffnet sich in der oberen Zeile ein Menü aus dem wir den Punkt "Remote-SSH: Open Configuration-File" wählwen. Dann werden einige Dateien angezeigt, in die die Konfiguration geschrieben werden kann. Die Dateinamen und -orte sind vermutlich betriebssystemabhängig, ich wähle immer den obersten.

Menu-Auswahl nach klicken des Remote Windows
Menu-Auswahl nach klicken des Remote Windows

In die Konfigurationsdatei tragen Sie folgende Daten ein:

Host 35.192.166.139 <-- die öffentliche IP-Adresse der VM
HostName 35.192.166.139 <-- die öffentliche IP-Adresse der VM
IdentityFile /Users/peter/.ssh/web-node-server <-- Datei mit privatem Schlüssel
User anton_beton <-- der Benutzer der VM-Maschine,
den Sie beim Erstellen der Schlüssel
angegeben haben

Konfiguration von SSH in VS Code

Um eine Verbindung mit der virtuellen Maschine herzustellen klicken wir in der linken Seitenleiste von VS Code auf den Remote Explorer. Es öffnet sich das Fenster der SSH Targets. Dort finden wir den gerade in der Konfigurationsdatei eingetragenen Server. Wir klicken mit der rechten Maustaste auf die Adresse und wählen "Connect to Host in New Window". Es öffnet sich ein neues Fenster und ganz oben erscheint eine Eingabezeile für das Passwort, das wir bei der Schlüsselerstellung haben.

SSH - Verbindung herstellen
SSH - Verbindung herstellen

Nach der Eingabe des Passwortes dauert es eine Weile, dann sind wir mit der virtuellen Maschine verbunden. Das kann man wieder in der untersten Zeile des Editors erkennen. Durch Klicken auf "Open Folder" im VS-Code Hauptmenu werden die Verzeichnisse vom Homeverzeichnisses der virtuellen Maschine angezeigt. Wir wählen das früher erstellte Verzeichnis helloWorld und können jetzt die Datei app.js direkt auf der virtuellen Maschine editieren. Leider ist die Verbindung nicht stabil genug. Ich editiere lieber örtlich und kopiere die Dateien zum Server.
Zum Kopieren können wir die Dateien einfach anklicken und in das Explorer Fenster des VS Code Fensters der virtuellen Maschine ziehen, sogar aus dem örtlichen VS-Code Fenster.

SSH - Verzeichnis auswählen
SSH - Verzeichnis auswählen

Zusätzliche Hinweise für die für die Einrichtung und Benutzung gibt eshier.

Installation des gcloud-Befehlszeilentools

Google bietet für seine Cloud ein Software Development Kit (SDK) an, mit dem Ressourcen und Anwendungen in der Cloud verwaltet werden können. Wir wollen von diesen Tools lediglich das Befehlszeilen Tool gcloud benutzen, um Dateien vom PC zum Server zu kopieren. Die Installation des SDK und die weiteren Schritte sindhierfür verschiedene Plattformen beschrieben. Nach der Installation müssen wir "gcloud init" in einem Kommandofenster (Terminal etc.) auf dem PC ausführen.

gcloud init
......
Which Google Compute Engine zone would you like to use as project
default?
If you do not specify a zone via a command line flag while working
with Compute Engine resources, the default is assumed.
[1] us-east1-b
[2] us-east1-c
[3] us-east1-d
[4] us-east4-c
[5] us-east4-b
[6] us-east4-a
[7] us-central1-c
[8] us-central1-a
[9] us-central1-f
[10] us-central1-b
....
8
Your project default Compute Engine zone has been set to [us-central1-a].
You can change it by running [gcloud config set compute/zone NAME].
Your project default Compute Engine region has been set to [us-central1].
You can change it by running [gcloud config set compute/region NAME].

SDK initialisieren

Je nachdem, wie der Zugriff auf die Google Cloud bereits autorisiert ist, werden Sie entweder aufgefordert, sich über einen Webbrowser anzumelden und den Zugriff für ihr Konto zu gewähren oder ein vorhandenes Konto auszuwählen. Wählen Sie anschließend das Google Cloud-Projekt aus (in unserem Fall: web-node-server), wenn Sie dazu aufgefordert werden. Wenn nur ein einziges Projekt existiert, wählt gcloud init dieses aus. Das Kommando:

gcloud config configurations list

SDK initialisierenn

listet die bestehenden Konfigurationen auf. Die Antwort sollte wie folgt aussehen.

NAME IS_ACTIVE ACCOUNT PROJECT COMPUTE_DEFAULT_ZONE COMPUTE_DEFAULT_REGION
default True xxxx.yyyy@gmail.com web-node-server us-central1-a us-central1

SDK initialisieren

Zum Testen legen wir in einem Verzeichnis 2 Dateien an und geben in einem Kommandofenster (Terminal etc.) folgende Kommandofolge ein:

% gcloud compute scp --recurse Pfad-zu-den-Testdateien/* xxxx.yyyy@web-node-server:~/helloWorld/
Google antwortet:
Enter passphrase for key '/Users/peter/.ssh/google_compute_engine':
nur Return, Google antwortet:
Enter passphrase for key '/Users/peter/.ssh/web-node-server':
wir geben das Passwort ein, Google antwortet:
cpToVM.sh 100% 1888 14.2KB/s 00:00
testfile.js 100% 0 0.0KB/s 00:00
testfile2.js 100% 0 0.0KB/s 00:00

"gcloud compute scp" testen

Hinweise:

  • Das Verzeichnis, in das kopiert wird, muss vorhanden sein, vorhandene Dateien werden überschreiben.
  • Das Kommando für rekursives (also mit Unterverzeichnissen) Kopieren ist:
    gcloud compute scp --recurse Pfad-zu-den-Dateien/* xxxx.yyyy@web-node-server:~/helloWorld/
  • Wenn nur der Verzeichnisinhalt (ohne Unterverzeichnisse) kopiert werden soll:
    gcloud compute scp Pfad-zu-den-Dateien/* xxxx.yyyy@web-node-server:~/helloWorld/