Einführung
In diesem Leitfaden werde ich die Container aus dem TeoMeWhy-System von Twitch, das sich derzeit auf AWS befindet, bereitstellen und auf GCP platzieren.
Aktuelle Struktur bei AWS
Architektur bei GCP
Es werden keine komplexen Automatisierungstools verwendet, alles wird über die Konsole erledigt, die Integration in Github und die Bereitstellung der Bilder bei jedem Commit auf main.
Wir verwenden:
- Cloud Run – Für Webanwendungen
- Cloud SQL – Für MySQL-Datenbank
- GCE – Zum Ausführen von Teomebot
- Cloud-Speicher – Objektspeicher (S3)
- Cloud Build – Zum Erstellen von Anwendungsbereitstellungen
- Secret Manager – Anwendungsanmeldeinformationen sicher speichern.
Besorgen der Bewerbungen
- Besuchen Sie TeoMeWhys GitHub und Fork mit Anwendungen, die sich auf das Projekt beziehen.
- Klicken Sie auf der Repository-Seite auf Markiert und dann auf Fork.
- Geben Sie auf der Seite Fork dem Fork einen Namen und klicken Sie auf Fork erstellen.
- Wiederholen Sie den Vorgang für die anderen Repositorys im Projekt, wenn Sie die gesamte Umgebung replizieren möchten.
- Erstellen Sie den Klon des Forks, um die Anwendung nach Bedarf anzupassen, bevor Sie sie an GCP senden.
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Erstellen der Docker-Datei zum Erstellen des Container-Images
Navigieren Sie zum geklonten Repository-Ordner. Das Repository enthält bereits eine für Docker entwickelte Docker-Datei. Lassen Sie es uns analysieren:
```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Diese Docker-Datei ist funktionsfähig, aber wir werden sie mithilfe von mehrstufigen Builds optimieren, um die Größe des endgültigen Bildes zu reduzieren. Da Go keine externen Abhängigkeiten erfordert, können wir ein minimales Basisimage wie scratch.
verwenden
-
Tauschen Sie das Build-Image durch eine leichtere Version aus und benennen Sie es zur Referenz in anderen Phasen.
FROM golang:1.23.1-alpine3.20 AS build
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
-
Fügen Sie den Befehl „go mod download“ hinzu, um die Abhängigkeiten zwischenzuspeichern, und überprüfen Sie den go mod, um sicherzustellen, dass sie mit den Prüfsummen in der Datei „go.sum.
“ übereinstimmen
RUN go mod download && go mod verify
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
-
Um die Binärdatei für die Produktion zu optimieren, fügen Sie die folgenden Parameter hinzu:
-
CGO_ENABLED=0: Deaktiviert die CGO-Unterstützung. CGO ist die Funktionalität in Go, mit der Sie C-Code aufrufen können. Wenn Sie sie jedoch deaktivieren, erhalten Sie eine vollständig statische Binärdatei ohne Abhängigkeiten von externen Bibliotheken.
-
GOARCH=amd64: Legt die Zielarchitektur für die Kompilierung fest. amd64 ist die Architektur, die auf Maschinen mit 64-Bit-Prozessoren verwendet wird, wie z. B. den meisten modernen Servern und Desktops.
-
GOOS=linux: Definiert das Zielbetriebssystem für die Kompilierung. Hier ist es für Linux konfiguriert, was bedeutet, dass die generierte Binärdatei auf Linux-Systemen ausführbar ist.
-
go build -o /app/points: Kompiliert den Code und speichert die Binärdatei im angegebenen Pfad (/app/points).
-
-a: Erzwingt die Neukompilierung aller Pakete, einschließlich Abhängigkeiten, auch wenn sie sich nicht geändert haben. Es kann hilfreich sein, sicherzustellen, dass alles mit den neuen Flags und Einstellungen neu kompiliert wird.
-
-ldflags="-s -w": Dies sind Flags zur Größenoptimierung.
-
-s entfernt die Debug-Symboltabelle aus der Binärdatei.
-
-w entfernt Stack-Tracing-Informationen. Diese Optionen reduzieren die Größe der endgültigen Binärdatei.
-
-installsuffix cgo: Fügt dem Installationsverzeichnis ein Suffix hinzu, um Binärdateien mit deaktiviertem CGO zu unterscheiden. Dadurch können Konflikte mit Binärdateien vermieden werden, die CGO verwenden.
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
-
(optional) Um das Bild noch kleiner zu machen, können wir die Binärdatei mit upx komprimieren. upx (Ultimate Packer for eXecutables) ist ein Tool, das ausführbare Binärdateien komprimiert, um die Größe von Dateien zu reduzieren, z. B. Go-Binärdateien. Die negativen Punkte sind Dass es zu einer längeren Erstellungszeit und einer längeren Verzögerung beim Containerstart kommt, daher muss evaluiert werden, was für die Implementierung am vorteilhaftesten ist. Da das Ziel darin besteht, es in Cloud Run zu verwenden, das bereits über einen Kaltstart verfügt, wird der Container angehalten, wenn er nicht verwendet wird. Wir werden es nicht verwenden, da es die Initialisierungszeit des Containers verlängert.
```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
- Builds vergleichen
- Dockerfile-Optimierung und die Verwendung von upx führen zu einem bis zu dreimal kleineren Bild.
- Die Analyse des Originalbilds mit Trivy zeigt 904 CVEs, während das Scratch-Image frei von CVEs ist.
Imagem |
Tipo |
Tamanho |
points-to-go |
Otimizado |
14MB |
points-to-go |
Com upx |
5.77MB |
points-to-go |
original |
1.76GB |
- Wiederholen Sie diese Einstellungen für die anderen Repositorys.
Bereitstellung der Datenbank
- Greifen Sie in der Konsole im Seitenmenü auf SQL zu.
- Oder suchen Sie in der Suchleiste nach „SQL“ und wählen Sie SQL aus der Liste aus.
- Klicken Sie auf der Cloud SQL-Seite auf Instanz erstellen und wählen Sie MySQL aus.
- Wählen Sie unter Bearbeiten Unternehmen aus.
- Wählen Sie unter „Voreinstellungen bearbeiten“ die Option Sandbox.
- Belassen Sie die Datenbankversion bei MySQL 8.0.
- Geben Sie der Instanz unter Instanz-ID einen Namen und legen Sie ein Passwort fest.
- Sie können Passwortrichtlinien festlegen, indem Sie die Passwortrichtlinie erweitern
- Definieren Sie die Zone und die Region, und wir belassen sie bei einer einzigen Zone.
- Beim Anpassen können wir die Hardware an unsere Bedürfnisse anpassen. Die Optionen variieren je nach der von uns gewählten Edition.
- Passen Sie die CPU nach Bedarf auf 1 und die Festplatte auf 10 GB an.
- Deaktivieren Sie bei Verbindungen die Option „Öffentliche IP“ und aktivieren Sie „Private IP“.
- Klicken Sie in der privaten Zugangsverbindung auf Verbindung konfigurieren
- Wählen Sie Automatisch zugewiesenen Bereich verwenden
- Klicken Sie auf Weiter
- Klicken Sie auf Verbindung erstellen
- Klicken Sie auf Instanz erstellen und warten Sie, bis sie erstellt wird.
-
Um eine Verbindung zur Instanz herzustellen, aktivieren Sie Cloud Shell und führen Sie Folgendes aus:
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
- Geben Sie das im vorherigen Schritt zugewiesene Passwort ein.
- Und dann erhalten Sie einen Verbindungsfehler, da die Cloud-Shell keinen Zugriff auf Ihre private VPC hat.
- Um die Verbindung über Cloud Shell zu vereinfachen, bearbeiten wir die Instanz und markieren die öffentliche IP. Im Anhang werde ich zeigen, wie man VPC-Peering erstellt, um über Cloud Shell
Versuchen Sie erneut, eine Verbindung herzustellen.
-
- Erstellen Sie die Anwendungsdatenbank:
```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
-
Cloud Shell verfügt immer noch über einen Texteditor, der auf VSCode basiert. Sie können einige Aktivitäten direkt darüber ausführen. Es verfügt über 5 GB persistentes Volumen in Ihrem /home Hardware ist eine e2-small VM mit 1vCPU und 1,7GB RAM.
Container in Cloud Run erstellen
Greifen Sie in der Google Cloud-Konsole über das Seitenmenü oder die Suchleiste auf - Cloud Run zu.
Klicken Sie auf der Cloud Run-Seite auf - Container bereitstellen und wählen Sie die Option Dienst aus.
Auswahl der Bereitstellungsmethode-
Es gibt drei Optionen für die Bereitstellung eines Dienstes:
-
Verwenden Sie ein Container-Image aus einer Registrierung.-
Direkte Verbindung zu einem Repository herstellen.-
Erstellen Sie eine Funktion (mit - Cloud Functions, integriert in Run).
Wählen Sie für diese Anleitung - Kontinuierliche Bereitstellung mit GitHub aus, damit Google die CI/CD-Pipeline automatisch konfigurieren kann.
- Klicken Sie auf
Mit Cloud Build konfigurieren.
- Verbindung zu GitHub konfigurieren
- Klicken Sie auf
Authentifizierung, um die Google-Integration mit Ihrem GitHub zu aktivieren.
Autorisieren Sie den Zugriff und wählen Sie, ob Sie den Zugriff auf alle Repositorys oder nur auf ein bestimmtes zulassen möchten.
Nach Abschluss der Anmeldung klicken Sie auf Weiter.
Build-Typ auswählen
Wählen Sie im Build-Schritt zwischen der Verwendung einer Docker-Datei oder unterstützter Anwendungen und Buildpacks von GCP.
Entscheiden Sie sich für Dockerfile und passen Sie bei Bedarf den Pfad/Dateinamen an
Diensteinstellungen
-
Konfigurieren Sie die folgenden Parameter:
-
Authentifizierung: Wählen Sie Nicht authentifizierte Anrufe zulassen.
-
CPU-Zuweisung: Wählen Sie CPU wird nur während der Anforderungsverarbeitung zugewiesen.
-
Eingabesteuerung: Wählen Sie Intern.
Passen Sie den Containeranschluss nach Bedarf für die Anwendung an.
Klicken Sie auf der Registerkarte „Sicherheit“ unter „Dienstkonto“ auf „Erstellen“ Neues Dienstkonto
-
Rollen hinzufügen
- Speicherobjektadministrator
- Cloud Run-Administrator
- Secret Manager Geheimberater
- Cloud SQL-Client
- Cloud Build-Dienstkonto
- Artifact Registry Recorder
- Dienstkontobenutzer
-
Bei der Analyse des Anwendungscodes müssen wir die Umgebungsvariablen an die Datenbank übergeben.
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
-
Wir müssen den Anwendungscode auf den Cloud Sql-Standard ändern, der Unix-Sockets verwendet, und Cloud Run greift nicht direkt auf die Datenbank zu, sondern verwendet Cloud SQL Auth Proxy.
```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Gehen Sie im Container zur Registerkarte „Variablen und Geheimnisse“ und klicken Sie auf „Variable hinzufügen“.
Fügen Sie die erforderlichen Variablen hinzu.
Die Bankadresse folgt dem Muster PROJECT_ID:REGION:INSTANCE_NAME, Sie können den Namen auch unten in Punkt 16 erhalten.
Das Bankpasswort, das wir als GEHEIMNIS angeben werden
Wenn die Option „Neues Geheimnis erstellen“ deaktiviert ist, liegt das daran, dass Sie die API aktivieren müssen.
Klicken Sie auf NEUES GEHEIMNIS ERSTELLEN
Definieren Sie den Secret-Namen und klicken Sie auf Secret erstellen
In Cloud SQL Connections fügen wir die URL der von uns erstellten Bank hinzu
Um das Anwendungsschema zu erstellen, erfordert der Code, dass wir das Argument migrations=true übergeben.
Wir werden migrations=true zum Funktionsargument hinzufügen und es dann in der nächsten Containerrevision entfernen.
Belassen Sie die anderen Felder auf den Standardwerten und klicken Sie auf Erstellen
Testen der Anwendung mit Thunder Client.
Kunden erstellen
registrierte Kunden lesen
Erstellen eines Teomebot-Dienstes
Der Chatbot wird nicht auf Cloud Run bereitgestellt, sondern auf Google Compute Engine (GCE) installiert. Im Gegensatz zu Cloud Run ist Compute Engine ideal, da der Chatbot kontinuierlich aktiv sein muss, um mit dem Chat zu interagieren.
Darüber hinaus werden wir die Verwendung von Containern, Secret Management und Cloud Build-Konfiguration für die Bereitstellungsautomatisierung behandeln.
Erstellen einer VM auf Google Compute Engine (GCE)
- Zugriff auf Compute Engine im Seitenmenü der GCP Console.
- Klicken Sie auf Instanz erstellen.
- Geben Sie einen Namen für die Instanz ein (z. B. teomebot-instance).
- Konfigurieren Sie die Region und Zone nach Bedarf und notieren Sie diese Informationen zur späteren Verwendung.
- Wählen Sie unter Maschinen-Setup den E2-Typ und unter Voreinstellung e2-micro aus.
- Klicken Sie auf die Registerkarte Container und dann auf Container bereitstellen.
- Verwenden Sie vorübergehend das nginx:latest-Image, um die Erstkonfiguration abzuschließen.
- Fügen Sie die Umgebungsvariablen hinzu:
-
TWITCH_BOT: Bot-Name.
-
TWITCH_CHANNEL: Name des Twitch-Kanals.
-
HOST_DB: Private IP der Cloud SQL-Datenbank.
-
USER_DB: Bankbenutzer.
-
PORT_DB: Bankport.
-
URL_POINTS: Dienstendpunkt Points-to-Go.
- Klicken Sie auf „Auswählen“.
- Wählen Sie unter Identität und API-Zugriff das für dieses Projekt konfigurierte Dienstkonto aus.
- Belassen Sie die restlichen Einstellungen auf den Standardeinstellungen und klicken Sie auf Erstellen.
Geheimnisse mit Secret Manager hinzufügen
- Vielleicht ist Ihnen aufgefallen, dass wir die Geheimnisse nicht weitergegeben haben. In der Compute-Engine gibt es keine einfache Möglichkeit, sie wie in Cloud Run weiterzugeben. Meine Lösung bestand darin, dem Anwendungscode eine Funktion hinzuzufügen, um Informationen direkt vom Secret Manager zu lesen.
- Zugriff auf Secret Manager in der GCP-Konsole.
- Klicken Sie auf Geheimnis erstellen
- Geben Sie einen beschreibenden Namen ein (z. B. Twitch-Token) und fügen Sie den entsprechenden Wert hinzu.
- Kopieren Sie den Pfad des generierten Geheimnisses (z. B.: project/123456/secrets/twitch-token/versions/latest).
- Erstellen Sie eine neue Datei utils/gcp.go
-
Ändern Sie utils/db.go, um die Funktion aufzurufen, und übergeben Sie den Secret-Manager-Pfad als Parameter.
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
-
Ändern Sie main.go, um Twitch-Anmeldeinformationen zu erhalten
```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
migration := flag.Bool("migrations", false, "Datenbankmigrationen durchführen")
flag.Parse()
godotenv.Load()
Benutzer := os.Getenv("TWITCH_BOT")
// ändern
oauth := utils.AccessSecretVersion("projects/551619572964/secrets/twitch-token/versions/latest")
channel := os.Getenv("TWITCH_CHANNEL")
„
Cloud-Build
Cloud Build konfigurieren
Cloud Build wird verwendet, um die Erstellung und Bereitstellung von Container-Images in Compute Engine zu automatisieren.
- Erstellen Sie eine cloudbuild.yaml-Datei im Stammverzeichnis des Repositorys mit dem folgenden Inhalt:
-
Auswechslungen
FROM golang:1.23.1-alpine3.20 AS build
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Die Variable _VERSION wird auf einen Wert gesetzt, der v1.0 entspricht. mit dem Hash des aktuellen Commits (${COMMIT_SHA}). Dadurch wird für jeden Build eine eindeutige Version erstellt, wodurch sichergestellt wird, dass jedes Image anhand der Version und des Commits identifizierbar ist.
Schritte
Der Abschnitt „Schritte“ definiert die Schritte, die Cloud Build ausführen muss. Hier haben wir vier Schritte: Erstellen, Pushen (zweimal) und Aktualisieren.
-
Schritt 1: Erstellen Sie das Docker-Image
RUN go mod download && go mod verify
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
In diesem Schritt wird ein Build des Docker-Images ausgeführt:
-
„--no-cache“: erzwingt den Build ohne Verwendung des Caches.
-
„-t“: definiert Tags für das erstellte Bild:
-
gcr.io/$PROJECT_ID/teomebot:$_VERSION: Bild mit dem Tag, das den Commit-Hash verwendet.
-
gcr.io/$PROJECT_ID/teomebot:latest: Bild mit Tag Latest.
-
„.“: definiert das aktuelle Verzeichnis als Build-Kontext.
Das id: Build-Tag ist eine optionale Kennung für den Schritt, die als Referenz und zum Debuggen nützlich ist.
-
Schritt 2: Bild-Push mit Versions-Tag
RUN CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -o /app/points -a -ldflags="-s -w" -installsuffix cgo
Nach dem Login kopieren
Nach dem Login kopieren
In diesem Schritt wird das Image mit dem spezifischen Tag ($_VERSION) an die Google Container Registry übertragen, sodass die im Build generierte Version im Repository gespeichert werden kann.
Dieser Schritt verschiebt das Image mit dem neuesten Tag in die Google Container Registry und aktualisiert das neueste Image mit der neuesten Version.
In diesem Schritt wird der Befehl gcloud verwendet, um den Container auf einer Google Compute Engine-Instanz zu aktualisieren:
-
„teomebot-instance“: Gibt den Namen der Instanz an, die den Container ausführt.
-
--container-image: definiert das Container-Image, das die Instanz verwenden soll. Verwenden Sie hier die neueste Version des Bildes.
-
--zone=$_DEPLOY_ZONE: verwendet eine Variable, um die Bereitstellungszone anzugeben.
-
--container-restart-policy=always: Legt die Container-Neustartrichtlinie so fest, dass im Falle eines Fehlers immer neu gestartet wird.
-
Optionen
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Die Option „logging: CLOUD_LOGGING_ONLY“ gibt an, dass Cloud Build nur bei Cloud Logging protokollieren, Daten speichern und sich auf GCP-Protokolle konzentrieren soll.
-
Endgültige Datei
```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Erstellen eines Triggers für die Container-Image-Erstellung
Einrichten des Dienstkontos
- Gehen Sie in der Google Cloud Console zu Cloud Build.
- Gehen Sie zu Einstellungen.
- Klicken Sie auf Dienstkontoberechtigungen.
- Suchen Sie das für Cloud Run erstellte Dienstkonto.
- Aktivieren Sie die Option Als bevorzugtes Dienstkonto festlegen
- Aktivieren Sie die Rolle Compute-Instanzadministrator für das Dienstkonto.
Den Auslöser erstellen
- Klicken Sie im Seitenmenü auf Trigger und dann auf Trigger erstellen.
- Geben Sie einen beschreibenden Namen für den Auslöser ein.
- Klicken Sie unter Repositorys auf Repository verbinden und wählen Sie das Repository Teomebot aus.
- Wählen Sie in Konfiguration die Option Cloud Build-Konfigurationsdatei.
- Fügen Sie die Ersatzvariable _DEPLOY_ZONE mit dem Wert hinzu, der der Zone entspricht, in der die Instanz erstellt wurde.
- Überprüfen Sie im Dienstkonto, ob das ausgewählte Konto der Konfiguration in Schritt 6 entspricht.
- Klicken Sie auf Speichern.
Auslöser ausführen
- Klicken Sie im Übersichtsbildschirm in der neu erstellten Triggerzeile auf „Ausführen“, um den Prozess manuell auszuführen.
- Befolgen Sie in den Prozessdetails die Schritte zur Image-Erstellung, um nach möglichen Fehlern zu suchen.
Testen der Anwendung
- Kopieren Sie im Compute Engine-Bedienfeld den SSH-Befehl, um auf die Instanz zuzugreifen, oder verwenden Sie den SSH-Webclient und verbinden Sie die Instanz.
-
Stellen Sie eine Verbindung zur Instanz her und führen Sie die folgenden Befehle aus, um den Status des Containers zu überprüfen:
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Zertifikatprobleme lösen
-
Wenn ein zertifikatbezogener Fehler auftritt (verursacht durch das Scratch-Basis-Image), ersetzen Sie ihn durch das Distributions-Image. Ändern Sie in der Docker-Datei die Zeile, die das Basisbild definiert, von:
git clone git@github.com:cslemes/points-to-go.git
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
an:
```
FROM golang:latest
WORKDIR /app/
COPY . .
RUN go build main.go
CMD ["./main"]
```
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Docker-Datei aktualisiert:
FROM golang:1.23.1-alpine3.20 AS build
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Berechtigungen für Secret Manager anpassen
- Ändern Sie den Dienstkontobereich, um auf Secret Manager zuzugreifen.
- Gehen Sie zur Google Cloud Console.
- Gehen Sie im Seitenmenü zu Compute Engine > VM-Instanzen.
- Suchen Sie den Namen Ihrer VM-Instanz und klicken Sie darauf.
- Klicken Sie auf der VM-Detailseite auf Stopp, um die Instanz herunterzufahren (dieser Schritt ist erforderlich, da der Dienstkontobereich nur geändert werden kann, wenn die Instanz gestoppt ist).
- Nachdem die Instanz gestoppt wurde, klicken Sie oben auf der Seite auf Bearbeiten.
- Scrollen Sie nach unten zum Abschnitt Identitäts- und Zugriffs-API.
- Wählen Sie unter Dienstkonto das Dienstkonto aus, das Ihre Anwendung verwendet.
- Wählen Sie unter API-Zugriffsbereiche die Option Vollständigen Zugriff auf alle Cloud-APIs zulassen oder klicken Sie auf Spezifische API-Zugriffsbereiche festlegen und fügen Sie den Bereich https://www hinzu .googleapis.com/auth/cloud-platform.
- Nachdem Sie den Bereich angepasst haben, klicken Sie auf Speichern, um die Änderungen zu übernehmen.
- Starten Sie die Instanz neu, indem Sie auf Starten klicken.
-
Oder über die Befehlszeile, indem Sie die Instanz stoppen, den Befehl ausführen und anschließend starten.
RUN go mod download && go mod verify
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Weitere Container hinzufügen
Die anderen Dienste folgen demselben Point-to-go-Prozess. Für Dienste, die miteinander kommunizieren, erstellen Sie Umgebungsvariablen, um die Endpunktadressen zu konfigurieren, die immer https-Port 443 sein werden.
Für die Kommunikation mit anderen Diensten habe ich den Code angepasst, um eine weitere Umgebungsvariable mit der URL des Dienstes zu erhalten. In Punkten sah es beispielsweise so aus:
RUN CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -o /app/points -a -ldflags="-s -w" -installsuffix cgo
Nach dem Login kopieren
Nach dem Login kopieren
Testen des Bots
Testen der Kommunikation des Bots mit Twitch.
Anpassung der Netzwerksicherheit
Platzieren Sie nach Abschluss der Tests die Container, auf die nur intern zugegriffen werden soll, in der VPC.
Abschluss
Damit haben wir die Migration des TeoMeWhy-Systems abgeschlossen, der Leitfaden dient als Grundlage für die Migration der anderen TeoMeWhy-Dienste.
Die wichtigsten erreichten Ziele waren:
Technische Errungenschaften
- Migration von Containeranwendungen zu Cloud Run, was automatische Skalierbarkeit und Kostensenkung ermöglicht
- Docker-Image-Optimierung durch mehrstufige Builds, wodurch Image-Größe und Schwachstellen deutlich reduziert werden
- Implementierung einer verwalteten Datenbank mit Cloud SQL, um hohe Verfügbarkeit und Sicherheit zu gewährleisten
- Automatisierte CI/CD-Konfiguration mit Cloud Build, wodurch automatische Bereitstellungen von GitHub ermöglicht werden
- Sichere Verwaltung von Anmeldeinformationen mit Secret Manager
Architektonische Verbesserungen
- Klare Trennung der Verantwortlichkeiten zwischen den Diensten
- Nutzung privater Verbindungen für mehr Sicherheit
- Implementierung serverloser Standards zur Kostenoptimierung
- Automatisierung von Build- und Bereitstellungsprozessen
- Nahtlose Integration mit GitHub-Repositories
Erhaltene Vorteile
-
Kosten: Kostenreduzierung durch das serverlose Modell und Ressourcenoptimierung
-
Wartbarkeit: Einfache Wartung durch automatisierte Bereitstellungen
-
Sicherheit: Ordnungsgemäße Verwaltung von Geheimnissen und privaten Verbindungen
-
Skalierbarkeit: Möglichkeit zur automatischen Skalierung entsprechend der Nachfrage
-
Überwachung: Bessere Transparenz der Infrastruktur durch native GCP-Tools
Anhang
Aktivieren Sie die Secret Manager-API
- Suchen Sie in der Google Cloud-Konsole nach Secret Manager API.
- Klicken Sie in den Suchergebnissen auf API.
- Klicken Sie im Detailbildschirm auf Aktivieren.
Referenzen
- Github TeoMeWhy
- Twitch Teo Me Why
- Cloud Run-Dokumente
- Compute Engine-Dokumente
- Cloud Build-Dokumente
- Secret Manager-Dokumente
Das obige ist der detaillierte Inhalt vonBereitstellung serverloser Anwendungen auf Google Cloud Run. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!