Im November 2014 gab Digital Ocean seinen kürzlich aktualisierten DNS-Hosting-Service bekannt. Benutzer sind nicht nur schnell und zuverlässig, sie haben auch fast sofortige Aktualisierungen von DNS-Einträgen erfahren. Jeder Entwickler oder Systemadministrator kann die Vorteile davon schätzen: Kein Warten auf IP-Adressaktualisierungen während Systemmigrationen mehr. In diesem Lernprogramm werden wir die Funktionalität der beim letzten Mal erstellten Konsolenanwendung um die Verwaltung des DNS-Dienstes von Digital Ocean erweitern.
Sie können die kostenlose Konsolenanwendung erneut aus dem Tuts + Github-Repository herunterladen. Ich habe eine ausführliche Installationsanleitung für die Konsolenanwendung auf meiner Website veröffentlicht. Sie können auch meine generische Installationsanleitung für Digital Ocean-Apps erkunden.
Während Sie die Digital Ocean-Webkonsole zum Verwalten Ihrer DNS-Einträge verwenden können, ist es möglicherweise von Vorteil, diese programmgesteuert über die API zu verwalten.
Die Dokumentation für die DNS-API-Dienste von Digital Ocean umfasst zwei Hauptbereiche:
Wir konzentrieren uns zuerst auf die Konfiguration Ihrer Domains und dann auf das Hinzufügen der einzelnen DNS-Einträge.
Bevor Sie die eigenen DNS-Dienste von Digital Ocean aktivieren können, müssen Sie Ihre Domain-Nameserver auf die Digital Ocean-Nameserver übertragen:
Ich werde meine StarWars.io-Domäne für diese Tutorial-Demonstration hinzufügen. Hier ist meine Namenserveränderung bei meinem Domain-Registrar:
Es kann auch hilfreich sein, wie Sie auf DigitalOcean-Nameserver von häufig registrierten Domänenregistern verweisen.
Fügen wir zunächst eine Domäne über die Webbenutzeroberfläche von Digital Ocean hinzu. Klicken Sie im linken Navigationsmenü auf DNS:
Klicken Domäne hinzufügen:
So zeigt Digital Ocean Ihren DNS-Eintrag an. Es ist schön, dass Sie die generierte Zonendatei unten sehen:
Als Nächstes fügen wir einen Domain-A-Eintrag für www.starwars.io hinzu:
Lassen Sie uns nun die API erkunden, indem Sie zunächst einige der gerade erstellten Domänen und Domäneneinträge herunterladen.
Lassen Sie uns zunächst die Liste unserer Domains mithilfe der API herunterladen. Klicken Sie in unserer Konsolenanwendung auf Domains in der Navigationsleiste und klicken Sie auf Sync im rechten Menü.
Das DomainController
Code sieht so aus:
öffentliche Funktion actionSync () $ domain = new Domain (); $ domain-> sync (); $ this-> redirect ('/ domain / admin');
Das Domänenmodell ruft dann unsere Ozeankomponentenfunktionen auf und fügt jede gefundene Domäne in unsere lokale Datenbank ein:
öffentliche Funktion sync () $ ocean = new Ocean (); $ domains = $ ocean-> getDomains (); foreach ($ domains als $ d) $ domain_id = $ this-> add ($ d);
Hier ist der API-Code der Ocean-Komponente, um die Domänenliste abzurufen:
public function getDomains () // Liefert die Aktion api $ action = $ this-> digitalOcean-> domain (); // eine Sammlung von Action-Entity zurückgeben $ actions = $ action-> getAll (); $ -Aktionen zurückgeben;
Hier ist die Domain-Modell-Add-Methode:
öffentliche Funktion add ($ domain) $ d = Domain :: model () -> findByAttributes (array ('name' => $ domain-> name)); if (leer ($ d)) $ d = neue Domäne; $ d-> name = $ domain-> name; $ d-> ttl = $ domain-> ttl; $ d-> zone = $ domain-> zoneFile; $ d-> aktiv = 1; $ d-> created_at = $ d-> created_at; $ d-> modified_at = new CDbExpression ('NOW ()'); $ d-> save (); $ d-> id zurückgeben;
Sie sollten so etwas sehen, nachdem es abgeschlossen ist:
Klicke auf das Symbol verwalten In der Starwars-Reihe sehen Sie so etwas:
Dann lassen Sie uns die Domain-Datensätze für starwars.io synchronisieren. Klicken Domäneneinträge synchronisieren-das wird das anrufen SyncRecords
Aktion in DomainController
:
öffentliche Funktion actionSyncrecords ($ id) $ dr = new DomainRecord (); $ dr-> sync ($ id); $ this-> redirect ('/ domain / view /'.$ id);
Das DomainRecord
Die Modellsynchronisationsmethode sieht folgendermaßen aus. Es fordert eine Anfrage nach den Datensätzen des Domainnamens an und fügt sie jeweils dem hinzu DomainRecord
Tabelle in unserer lokalen Datenbank:
öffentliche Funktionssynchronisation ($ id) // Suchdomäne $ d = Domain :: model () -> findByPk ($ id); $ ocean = new Ocean (); $ records = $ ocean-> getDomainRecords ($ d-> name); foreach ($ Records as $ r) $ record_id = $ this-> add ($ id, $ r);
Hier ist die Ozeankomponente getDomainRecords
Methode:
öffentliche Funktion getDomainRecords ($ name) $ action = $ this-> digitalOcean-> domainRecord (); $ actions = $ action-> getAll ($ name); $ -Aktionen zurückgeben;
Das DomainRecord
Add-Methode ist etwas detaillierter:
öffentliche Funktion add ($ domain_id, $ record) $ dr = DomainRecord :: model () -> findByAttributes (array ('record_id' => $ record-> id)); if (leer ($ dr)) $ dr = new DomainRecord; $ dr-> domain_id = $ domain_id; $ dr-> record_id = $ record-> id; $ dr-> record_name = $ record-> name; $ dr-> record_type = $ record-> type; $ dr-> record_data = $ record-> data; if (isset ($ record-> priority)) $ dr-> Priorität = $ Datensatz-> Priorität; else $ dr-> priority = null; if (isset ($ record-> port)) $ dr-> port = $ record-> port; else $ dr-> port = null; if (isset ($ record-> weight)) $ dr-> weight = $ record-> weight; else $ dr-> weight = null; $ dr-> active = 1; $ dr-> created_at = new CDbExpression ('NOW ()'); $ dr-> modified_at = new CDbExpression ('NOW ()'); $ dr-> save (); return $ dr-> id;
So wird es nach der Synchronisierung der Domain-Datensätze aussehen:
Sie können Domänen und Domäneneinträge auch manuell von unserer Konsole aus hinzufügen.
Hier ist der Code im Domänenmodell, der die API-Anforderung zum Hinzufügen der Domäne aufruft:
öffentliche Funktion remote_add () $ ocean = new Ocean (); $ domain = $ ocean-> createDomain ($ this-> name, $ this-> ip_address); $ this-> save (); wahr zurückgeben;
Hier ist die Ozeankomponente addDomain
Methode:
öffentliche Funktion createDomain ($ name, $ ip_address) $ action = $ this-> digitalOcean-> domain (); $ create = $ action-> create ($ name, $ ip_address); return $ create;
Synchronisieren Sie dann die Domain-Einträge und fügen Sie Ihre eigenen hinzu:
Hier ist die DomainRecord
Modell- remote_add-Methode
:
öffentliche Funktion remote_add ($ id) $ d = Domain :: model () -> findByPk ($ id); $ ocean = new Ocean (); $ record = $ ocean-> createDomainRecord ($ d-> name, $ this-> record_type, $ this-> record_name, $ this-> record_data, $ this-> Priorität, $ this-> Port, $ this-> weight) ); $ this-> domain_id = $ id; $ this-> record_id = $ record-> id; $ this-> active = 1; $ this-> created_at = new CDbExpression ('NOW ()'); $ this-> modified_at = new CDbExpression ('NOW ()'); $ this-> save (); wahr zurückgeben;
Hier ist die Ozeankomponente createDomainRecord
Methode:
öffentliche Funktion createDomainRecord ($ Domänenname, $ Typ, $ Name, $ Daten, $ Priorität, $ Port, $ Gewichtung) $ domainRecord = $ this-> digitalOcean-> domainRecord (); if ($ priority == ") $ priority = null; if ($ port ==") $ port = null; if ($ weight == ") $ weight = null; // gibt die erstellte DomainRecord-Entität der Domäne 'bar.dk' zurück. $ created = $ domainRecord-> create ($ Domänenname, $ Typ, $ Name, $ Daten, $) Priorität, $ port, $ weight); zurückgegebenes $ erstellt;
Sie sollten so etwas in unserer Konsole sehen:
Die Web-Konsole von Digital Ocean zeigt Ihnen, wie unsere lokale Ansicht und die Remote-Ansicht jetzt identisch sind:
Wie Sie vielleicht bemerkt haben, fehlen diesem Code robuste Fehlerüberprüfungen, Synchronisierungen, Aktualisierungen, Löschvorgänge und andere Klingeln. Das überlasse ich Ihnen, um es nach Belieben auszudehnen.
Ich hoffe, Sie fanden diese Erkundung der Digital Ocean DNS API hilfreich.
Bitte zögern Sie nicht, unten Ihre Fragen und Kommentare zu posten. Sie können mich auch auf Twitter @reifman erreichen oder mich direkt per E-Mail kontaktieren. Folgen Sie meiner Tuts + Instructor-Seite, um zukünftige Artikel zu verwandten Themen zu sehen.