Willkommen zu Tag 4 von 12 Tagen von DigitalOcean! Gestern haben wir Twilio SMS-Benachrichtigungen zu unserem Geburtstags-Erinnerungsdienst hinzugefügt, sodass er in der Lage ist, Textnachrichten für die Geburtstage von heute zu senden. 🎂
Heute werden wir die Dinge auf die nächste Stufe heben, indem wir unser Skript auf DigitalOcean Functions bereitstellen. Damit kann unser Dienst in der Cloud laufen, ohne dass ein dedizierter Server benötigt wird, wodurch unsere App leichtgewichtig, skalierbar und bereit für Automatisierung wird.
Mit diesem Setup erhalten Sie Geburtstags-Erinnerungen, selbst wenn Ihr Computer ausgeschaltet oder nicht mit dem Internet verbunden ist—keine Notwendigkeit mehr, das Skript manuell auf Ihrem Gerät auszuführen. 🎉
✨ Warum DigitalOcean Functions?
Manchmal benötigt man nur ein einfaches Skript, das gelegentlich ausgeführt wird. Die Verwaltung der Infrastruktur für so etwas kann übertrieben sein. Hier kommt Functions ins Spiel. Es ist eine serverlose Plattform, was bedeutet, dass Sie Code bereitstellen können, der nur bei Bedarf ausgeführt wird, und Sie zahlen nur für das, was Sie nutzen. Perfekt für unseren Anwendungsfall—das Überprüfen von Geburtstagen und das tägliche Versenden von Erinnerungen.
🚀 Was Sie Lernen Werden
Am Ende des Tages werden Sie wissen, wie Sie:
- Das
doctl
CLI-Tool von DigitalOcean einrichten. - Eine serverlose Namespace (DigitalOceans Art, Funktionen organisiert zu halten) erstellen und verbinden.
- Ihren Geburtstags-Erinnerungsdienst in DigitalOcean Functions paketieren und bereitstellen.
- Ihre bereitgestellte Funktion in der Cloud testen.
🛠 Was Sie Benötigen
Bevor Sie beginnen, stellen Sie sicher, dass Sie:
- Ein DigitalOcean-Konto haben.
- Eine
.env
Datei mit Ihren PostgreSQL-Datenbankanmeldeinformationen und Twilio-Anmeldeinformationen
🧑🍳 Rezept für Tag 4: Bereitstellung auf DigitalOcean Functions
Schritt 1: Richten Sie die doctl
CLI ein
Wenn du doctl bereits auf deinem Computer eingerichtet hast, kannst du diesen Schritt überspringen. Für diejenigen, die es einrichten müssen, befolge diese Anweisungen:
Bevor wir beginnen, lass uns kurz über doctl
sprechen. Es ist das offizielle Befehlszeilenwerkzeug von DigitalOcean, mit dem du deine Cloud-Ressourcen direkt von deinem Terminal aus verwalten kannst. Wir werden es verwenden, um einen Namespace (einen Ordner für unsere serverlosen Funktionen) zu erstellen, unser Python-Skript bereitzustellen und die Funktion zu testen.
Die Einrichtung ist einfach:
-
Installiere
doctl
: Befolge die Installationsanleitung für dein Betriebssystem. -
Authentifiziere
doctl
: Verbinde es mit deinem DigitalOcean-Konto, indem du Folgendes ausführst: -
Überprüfe die Installation: Stelle sicher, dass alles funktioniert, indem du Folgendes ausführst:
Wenn erfolgreich, gibt dieser Befehl Details zu Ihrem DigitalOcean-Konto zurück, wie Ihre E-Mail-Adresse und Ihre Kontonummer.
Schritt 2: Installieren Sie die Serverless-Software
DigitalOcean Functions benötigt serverless unterstützende Software, die Sie installieren müssen. Dies ist eine einmalige Einrichtung, sodass Sie es nach der Installation für zukünftige Projekte nicht erneut tun müssen.
Führen Sie den folgenden Befehl aus:
Sie können den Installationsstatus mit folgendem Befehl überprüfen:
Wenn Sie einen Fehler wie diesen sehen:
Keine Sorge – das bedeutet nur, dass wir noch keinen Namespace erstellt oder verbunden haben. Das werden wir im nächsten Schritt erledigen.
Schritt 3: Erstellen und Verbinden Sie sich mit einem Namespace
Namespaces sind wie Ordner zum Organisieren von serverlosen Funktionen. Lassen Sie uns einen für unseren Geburtstags-Erinnerungsdienst erstellen:
-
Erstellen Sie einen neuen Namespace:
-
Verbinden Sie sich mit dem Namespace:
-
Überprüfen Sie die Verbindung:
Sie sollten jetzt eine Bestätigung sehen, dass Sie mit dem Namespace verbunden sind.
Pro Tipp: Um eine Liste aller verfügbaren Namensräume zu sehen, verwenden Sie den folgenden Befehl:
Das kann nützlich sein, wenn Sie mehrere Projekte verwalten oder den Namensraum überprüfen möchten, den Sie gerade erstellt haben.
Schritt 4: Projektstruktur initialisieren und einrichten
DigitalOcean Functions erwartet eine spezifische Projektstruktur für serverlose Bereitstellungen. Sie können diese Struktur mit doctl serverless init
starten, sie manuell erstellen oder sogar ein Starter-Repo klonen. Um es einfach zu halten, richten wir es mit doctl serverless init
ein:
-
Führen Sie den folgenden Befehl aus, um das Projekt zu initialisieren:
Dies erstellt ein lokales Projektverzeichnis mit dem Namen
my-birthday-reminder-service
und der folgenden Standardstruktur: -
Navigiere in das Projektverzeichnis:
-
Benenne die Ordner um, um unserem Anwendungsfall zu entsprechen:
-
Erstellen Sie die erforderlichen Dateien:
- Erstellen Sie eine leere .env-Datei im Stammverzeichnis des Projekts:
Diese Datei enthält Ihre Datenbank- und Twilio-Anmeldeinformationen. Die Datei befindet sich im Stammverzeichnis des
my-birthday-reminder-service
-Ordners.- Erstellen Sie eine
requirements.txt
-Datei imbirthdays
-Ordner:
Diese Datei listet die benötigten Python-Abhängigkeiten für Ihre Funktion auf. Sie befindet sich unter
packages/reminders/birthdays
.- Erstellen Sie eine build.sh-Datei im birthdays-Ordner:
Das
build.sh
-Skript ist notwendig für die Bereitstellung von Funktionen mit externen Abhängigkeiten. Derchmod
-Befehl stellt sicher, dass das Skript auf Mac-/Linux-Systemen ausführbar ist.
Aktualisierte Struktur: Nach Abschluss dieser Schritte sollte Ihre Projektstruktur folgendermaßen aussehen:
Pro-Tipp: Wenn Sie versehentlich einen Ordner falsch benennen, können Sie den Befehl erneut ausführen oder ihn manuell in Ihrem Datei-Explorer umbenennen.
Schritt 5: Dateien aktualisieren
Jetzt, da die Struktur vorhanden ist, lassen Sie uns diese mit den erforderlichen Dateien füllen. Öffnen Sie das Verzeichnis my-birthday-reminder-service in Ihrem bevorzugten Code-Editor.
1. Aktualisieren Sie project.yml
Die Datei project.yml
ist eine Konfigurationsdatei, die die Struktur Ihres serverlosen Projekts, Umgebungsvariablen und Funktionen definiert. Ersetzen Sie den Inhalt durch:
Diese Datei richtet das Erinnerungs-Paket ein und ordnet Umgebungsvariablen den DigitalOcean-Funktionen zu. Jede Variable entspricht den Anmeldeinformationen, die für Ihre Datenbank und die Twilio-Integration benötigt werden.
2. Aktualisieren Sie Ihre .env-Datei
Referenzieren Sie Tag 1: Einrichtung einer PostgreSQL-Datenbank für Geburtstags-Erinnerungen für die Datenbank-Anmeldeinformationen und Tag 3: Überprüfen von Geburtstagen und Senden von SMS-Benachrichtigungen für die Twilio-Anmeldeinformationen, um die folgenden Werte auszufüllen:
Hinweis: Die .env
Datei wird verwendet, um sensible Zugangsdaten sicher zu speichern. Diese Werte werden von Ihrer project.yml
Datei gelesen und während der Bereitstellung der serverlosen Umgebung zugeordnet, wodurch sie für Ihre Funktion in der Cloud zugänglich sind.
3. Abhängigkeiten hinzufügen
Aktualisieren Sie die requirements.txt
Datei mit den folgenden Abhängigkeiten:
pg8000
: Eine reine Python PostgreSQL-Clientbibliothek.
python-dotenv
: Wird verwendet, um Umgebungsvariablen aus der .env
Datei zu laden.
twilio
: Die Twilio Python-Bibliothek zum Senden von SMS-Nachrichten.
4. Aktualisieren Sie build.sh
Fügen Sie das folgende Skript zur build.sh
Datei hinzu:
Dieses Skript stellt sicher, dass alle Abhängigkeiten korrekt mit Ihrer Funktion verpackt sind. Der Befehl chmod +x
aus Schritt 4 stellt sicher, dass es ausführbar ist.
5. Update __main__.py
Dies ist das Hauptskript für Ihren Geburtstagsbenachrichtigungsdienst. Wir verwenden im Wesentlichen das Skript, das wir am Tag 3 zum Versenden von Geburtstagsbenachrichtigungen erstellt haben. Um es jedoch mit DigitalOcean Functions kompatibel zu machen, müssen wir einige kleine Anpassungen vornehmen.
Aktualisieren Sie die Datei __main__.py
mit folgendem Inhalt:
Hier ist, was wir geändert haben:
-
Eine
main(params)
Funktion hinzugefügt: DigitalOcean Functions erwartet eine Einstiegspunktfunktion namensmain
, die einparams
Argument entgegennimmt. Hier beginnt die Ausführung der Funktion. -
Die Skriplogik in die
main
Funktion verschoben:
Der Code vom Tag 3 wurde in diemain
Funktion eingekapselt, um dieser Anforderung gerecht zu werden. -
Alles andere bleibt gleich:
Die Logik der Datenbankverbindung, die Überprüfungen der Geburtstage und die Logik der SMS-Benachrichtigungen sind unverändert.
Schritt 5: Verpacken und Bereitstellen
Mit allem an seinem Platz, stellen Sie Ihr Projekt auf DigitalOcean Functions bereit:
- Projekt bereitstellen:
Um zu überprüfen, dass Ihre Funktion erfolgreich im Namespace bereitgestellt wurde:
- Besuchen Sie das DigitalOcean Control Panel und navigieren Sie zu Functions in der linken Seitenleiste.
- Finden Sie Ihren Namespace (z. B. my-birthday-reminder-namespace).
- Überprüfen Sie, ob Ihre Funktion unter dem Namespace angezeigt wird, typischerweise aufgeführt als
reminders/birthdays
. - Klicken Sie auf den Funktionsnamen, um Details anzuzeigen, einschließlich Protokollen, Konfiguration und Aufrufhistorie.
Schritt 6: Testen Sie Ihre bereitgestellte Funktion
Sobald Ihre Funktion bereitgestellt ist, ist es Zeit, sie zu testen. Sie können die Funktion manuell aufrufen, um sicherzustellen, dass sie wie erwartet funktioniert. Es gibt zwei Möglichkeiten, dies zu tun:
Option 1: Verwendung der DigitalOcean CLI
Wenn alles korrekt eingerichtet ist, wird Ihre Funktion in der Cloud ausgeführt, überprüft die heute Geburtstagskinder und sendet SMS-Benachrichtigungen.
Option 2: Verwendung des DigitalOcean Dashboards
- Gehen Sie zum DigitalOcean Control Panel.
- Navigieren Sie zu Funktionen und suchen Sie Ihre Erinnerungs-/Geburtstagsfunktion.
- Klicken Sie auf Ausführen, um sie manuell auszuführen.
- Sehen Sie sich die Ausgaben und Protokolle direkt in der Konsole an.
Diese Methode ist besonders hilfreich, wenn Sie eine visuelle Schnittstelle bevorzugen oder die Protokolle in einem sauberen, leicht lesbaren Format überprüfen möchten.
Testtipps
Wenn Sie die Funktion aufrufen, wird sie nach Geburtstagen suchen, die dem heutigen Datum entsprechen. Wenn es einen Treffer gibt, erhalten Sie eine SMS mit den Details. Um die Funktion effektiv zu testen:
- Fügen Sie ein oder mehrere Geburtstage in Ihre Datenbank ein, die dem aktuellen Datum entsprechen.
- Überprüfen Sie die Konsole oder die CLI-Protokolle, um zu bestätigen, dass die Funktion erfolgreich ausgeführt wurde.
🎁 Zusammenfassung
Hier ist, was wir heute erreicht haben:
✅ doctl
eingerichtet und einen Namensraum für unser Projekt erstellt.
✅ Das Python-Skript für die Bereitstellung umgestaltet.
✅ Den Geburtstagserinnerungsdienst bei DigitalOcean Functions verpackt und bereitgestellt.
✅ Die Funktion in der Cloud sowohl über die CLI als auch über das DigitalOcean-Dashboard getestet.
Als Nächstes: Obwohl dies ein großer Schritt nach vorne ist, führen wir die Funktion immer noch manuell aus. Im nächsten Beitrag werden wir diesen Prozess automatisieren, damit der Geburtstagserinnerungsdienst jeden Tag zu einer bestimmten Zeit automatisch ausgeführt wird. Stellen Sie sich vor, Sie wachen mit einer Textbenachrichtigung auf, ohne einen Finger zu rühren – lassen Sie uns das morgen Wirklichkeit werden lassen! 🚀