Utilisation de l'API Digital Ocean pour gérer votre DNS

Ce que vous allez créer

Hébergement DNS à Digital Ocean

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:

  • Domaines
  • Enregistrements de domaine

Nous nous concentrerons d'abord sur la configuration de vos domaines, puis sur l'ajout des enregistrements DNS individuels..

Pointez votre nom sur Digital Ocean

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:

  • ns1.digitalocean.com
  • ns2.digitalocean.com
  • ns3.digitalocean.com

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..

Utilisation du site Web Digital Ocean pour gérer le DNS

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..

Synchronisez vos enregistrements DNS

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:

Ajouter des domaines depuis notre console

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..

Liens connexes

  • Venir au port 53 près de chez vous: le nouveau DNS DigitalOcean!
  • Comment pointer sur des serveurs de noms DigitalOcean à partir de serveurs d'enregistrement de domaine communs
  • L'API Digital Ocean
  • Bibliothèque API PHP Digital Ocean V2
  • Guide d'installation de l'application Digital Ocean Console