En novembre 2014, Digital Ocean a annoncé son service d'hébergement DNS récemment mis à niveau. En plus d'être rapides et fiables, les utilisateurs ont bénéficié de mises à jour quasi instantanées des enregistrements DNS. Tout développeur ou administrateur système peut en apprécier les avantages: plus besoin d'attendre les mises à jour d'adresses IP lors des migrations du système. Dans ce didacticiel, nous allons étendre les fonctionnalités de l'application console que nous avons créée la dernière fois afin d'inclure la gestion du service DNS de Digital Ocean..
Là encore, vous pouvez télécharger l’application console gratuite à partir du référentiel Tuts + Github. J'ai posté un guide d'installation détaillé pour l'application console sur mon site Web. Vous pouvez également explorer mon guide d'installation générique pour les applications Digital Ocean.
Bien que vous puissiez utiliser la console Web Digital Ocean pour gérer vos enregistrements DNS, vous pouvez trouver avantageux de les gérer par programme via l'API..
La documentation relative aux services API DNS de Digital Ocean s’articule autour de deux domaines principaux:
Nous nous concentrerons d'abord sur la configuration de vos domaines, puis sur l'ajout des enregistrements DNS individuels..
Avant de pouvoir activer les propres services DNS de Digital Ocean, vous devez transférer vos serveurs de noms de domaine vers les serveurs de noms Digital Ocean:
Je vais ajouter mon domaine StarWars.io pour cette démonstration de tutoriel. Voici mon changement de serveur de noms chez mon registraire de domaine:
Vous pouvez également trouver utile de pointer vers les serveurs de noms DigitalOcean à partir des registres de domaine commun..
Premièrement, ajoutons un domaine au DNS de Digital Ocean via son interface utilisateur Web. Dans le menu de navigation de gauche, cliquez sur DNS:
Cliquez sur Ajouter un domaine:
Voici comment Digital Ocean affiche votre enregistrement DNS. C'est bien que cela vous montre le fichier de zone généré ci-dessous:
Ensuite, nous allons ajouter un enregistrement de domaine A pour www.starwars.io:
Maintenant, explorons l'API en commençant par télécharger certains des domaines et des enregistrements de domaines que nous venons de créer..
Commençons par télécharger la liste de nos domaines à l’aide de l’API. Dans notre application console, cliquez sur Domaines dans la barre de navigation et cliquez sur Sync dans le menu de droite.
le DomainController
le code ressemble à ceci:
fonction publique actionSync () $ domain = new Domain (); $ domaine-> sync (); $ this-> redirect ('/ domain / admin');
Le modèle de domaine appelle ensuite nos fonctions de composant Ocean et ajoute chaque domaine trouvé à notre base de données locale:
fonction publique sync () $ ocean = new Ocean (); $ domain = $ ocean-> getDomains (); foreach ($ domain as $ d) $ domain_id = $ this-> add ($ d);
Voici le code de l'API du composant Ocean pour récupérer la liste de domaines:
fonction publique getDomains () // retourne l'action api $ action = $ this-> digitalOcean-> domain (); // retourne une collection d'entités Action $ actions = $ action-> getAll (); retourne $ actions;
Voici la méthode Add du modèle de domaine:
fonction publique add ($ domain) $ d = Domain :: model () -> findByAttributes (array ('name' => $ domain-> name)); if (vide ($ d)) $ d = nouveau domaine; $ d-> nom = $ domaine-> nom; $ d-> ttl = $ domain-> ttl; $ d-> zone = $ domaine-> zoneFile; $ d-> actif = 1; $ d-> created_at = $ d-> created_at; $ d-> modified_at = new CDbExpression ('NOW ()'); $ d-> save (); retourne $ d-> id;
Vous devriez voir quelque chose comme ceci après avoir terminé:
Clique sur le gérer l'icône dans la rangée de starwars et vous verrez quelque chose comme ceci:
Ensuite, synchronisons les enregistrements de domaine pour starwars.io. Cliquez sur Synchroniser les enregistrements de domaine-cela appellera le SyncRecords
action dans DomainController
:
fonction publique actionSyncrecords ($ id) $ dr = new DomainRecord (); $ dr-> sync ($ id); $ this-> redirect ('/ domain / view /'.$ id);
le DomainRecord
La méthode de synchronisation de modèle ressemble à ceci. Il demande les enregistrements du nom de domaine et les ajoute à la liste. DomainRecord
table dans notre base de données locale:
fonction publique sync ($ id) // domaine de recherche $ d = domaine :: model () -> findByPk ($ id); $ océan = nouvel océan (); $ records = $ ocean-> getDomainRecords ($ d-> nom); foreach ($ enregistre en tant que $ r) $ record_id = $ this-> add ($ id, $ r);
Voici la composante océan getDomainRecords
méthode:
fonction publique getDomainRecords ($ name) $ action = $ this-> digitalOcean-> domainRecord (); $ actions = $ action-> getAll ($ name); retourne $ actions;
le DomainRecord
La méthode add est un peu plus détaillée:
fonction publique add ($ domain_id, $ record) $ dr = DomainRecord :: model () -> findByAttributes (array ('record_id' => $ record-> id)); if (vide ($ dr)) $ dr = new DomainRecord; $ dr-> id_domaine = $ id_domaine; $ dr-> record_id = $ record-> id; $ dr-> nom_enregistrement = $ enregistrement-> nom; $ dr-> record_type = $ record-> type; $ dr-> record_data = $ record-> data; if (isset ($ record-> priorité)) $ dr-> priorité = $ record-> priorité; else $ dr-> priorité = null; if (isset ($ record-> port)) $ dr-> port = $ record-> port; else $ dr-> port = null; if (isset ($ record-> weight)) $ dr-> weight = $ record-> weight; sinon $ dr-> weight = null; $ dr-> actif = 1; $ dr-> created_at = new CDbExpression ('NOW ()'); $ dr-> modified_at = new CDbExpression ('NOW ()'); $ dr-> save (); return $ dr-> id;
Voici à quoi cela ressemblera après la synchronisation des enregistrements de domaine:
Vous pouvez également ajouter manuellement des domaines et des enregistrements de domaine à partir de notre console..
Voici le code dans le modèle de domaine qui appelle la demande d'API pour ajouter le domaine:
fonction publique remote_add () $ ocean = new Ocean (); $ domain = $ ocean-> createDomain ($ this-> name, $ this-> ip_address); $ this-> save (); retourne vrai;
Voici la composante océan addDomain
méthode:
fonction publique createDomain ($ name, $ ip_address) $ action = $ this-> digitalOcean-> domain (); $ create = $ action-> create ($ name, $ ip_address); return $ create;
Ensuite, synchronisez les enregistrements de domaine et ajoutez les vôtres:
Ici se trouve le DomainRecord
modèle méthode remote_add
:
fonction publique remote_add ($ id) $ d = Domain :: model () -> findByPk ($ id); $ océan = nouvel océan (); $ record = $ ocean-> createDomainRecord ($ d-> nom, $ this-> type_enregistrement, $ this-> nom_enregistrement, $ this-> record_data, $ this-> priorité, $ this-> port, $ this-> poids ) $ 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 (); retourne vrai;
Voici la composante océan createDomainRecord
méthode:
fonction publique createDomainRecord ($ nom_domaine, $ type, $ nom, $ data, priorité $, port $, poids) $ domainRecord = $ this-> digitalOcean-> domainRecord (); if ($ priority == ") $ priority = null; if ($ port ==") $ port = null; if ($ weight == ") $ weight = null; // retourne l'entité DomainRecord créée du domaine 'bar.dk' $ created = $ domainRecord-> create ($ domain_name, $ type, $ name, $ data, $ priorité, $ port, $ poids); retour $ créé;
Vous devriez voir quelque chose comme ça dans notre console:
Voici ce que la console Web de Digital Ocean montrera - notez à quel point notre vue locale et notre vue distante sont désormais identiques:
Comme vous l'avez peut-être remarqué, ce code manque de vérification d'erreur, de synchronisation, de mise à jour, de suppression et d'autres fonctionnalités avancées. Je vous laisse le soin d'étendre à votre guise.
J'espère que cette exploration de l'API Digital Ocean DNS vous a été utile..
N'hésitez pas à poster vos questions et commentaires ci-dessous. Vous pouvez également me joindre sur Twitter @reifman ou m'envoyer un courriel directement. Suivez la page de mon instructeur Tuts + pour voir de futurs articles sur des sujets connexes..