Bruke Digital Ocean API til å administrere DNS

Hva du skal skape

DNS Hosting på Digital Ocean

I november 2014 annonserte Digital Ocean sin nylig oppgraderte DNS-hosting-tjeneste. I tillegg til å være rask og pålitelig, har brukere opplevd nær øyeblikkelige oppdateringer av DNS-poster. Enhver utvikler eller systemadministrator kan sette pris på fordelene ved dette: Ikke lenger venter på oppdateringer av IP-adresse under systemmigreringer. I denne opplæringen skal vi utvide funksjonaliteten til konsollprogrammet vi bygde sist gang for å inkludere styring av Digital Oceans DNS-tjeneste.

Igjen kan du laste ned gratis konsollprogrammet fra Tuts + Github-depotet. Jeg har lagt ut en detaljert installasjonsveiledning for konsollprogrammet på nettstedet mitt. Du kan også utforske min generiske installasjonsveiledning for Digital Ocean-apper.

Mens du kan bruke Digital Ocean webkonsollen til å administrere DNS-postene, kan det hende du finner det fordelaktig å programmere administrere dem via API.

Dokumentasjon for Digital Oceans DNS API-tjenester ligger på tvers av to hovedområder:

  • domener
  • Domain Records

Vi vil først fokusere på å konfigurere domenene dine og deretter legge til de enkelte DNS-postene.

Pek Ditt Navn Tjenester til Digital Ocean

Før du kan aktivere Digital Oceans egne DNS-tjenester, må du overføre domenenavnervennene dine til Digital Ocean navneservere:

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

Jeg skal legge til StarWars.io-domenet mitt for denne opplæringsdemonstrasjonen. Her er navnet på serverendringen min på domeneregistratoren min:

Du finner kanskje også hvordan du peker på DigitalOcean Nameservers fra Common Domain Registrars.

Bruke Digital Ocean Website til å administrere DNS

Først la vi legge til et domene til Digital Ocean's DNS gjennom sitt webgrensesnitt. Langs den venstre navigasjonsmenyen klikker du på DNS:

Klikk Legg til domenenavn

Slik viser Digital Ocean DNS-posten din. Det er fint at det viser deg den genererte sonen filen nedenfor:

Deretter legger vi til et domene En rekord for www.starwars.io:

Nå, la oss utforske API-en, ved å laste ned noen av domenene og domenepostene vi nettopp har opprettet.

Synkroniser dine DNS-poster

La oss først laste ned listen over domenene våre ved hjelp av API. I konsollprogrammet klikker du domener i navigeringsfeltet og klikk Sync i høyre meny.

De DomainController koden ser slik ut:

offentlig funksjon actionSync () $ domain = new Domain (); $ Domene-> sync (); $ Dette-> omdirigere ( '/ domene / admin'); 

Domenemodellen kaller deretter våre Ocean-komponentfunksjoner og legger til hvert domene som er funnet i vår lokale database:

 offentlig funksjon synkronisering () $ ocean = new Ocean (); $ domener = $ ocean-> getDomains (); foreach ($ domener som $ d) $ domain_id = $ this-> add ($ d);  

Her er API-koden fra Ocean-komponenten for å hente domenelisten:

 offentlig funksjon getDomains () // returnere handlingen api $ action = $ this-> digitalOcean-> domain (); // returnere en samling av Handlingsenhet $ actions = $ action-> getAll (); returnere $ handlinger;  

Her er Domain-modellen Legg til metode:

 offentlig funksjon legg til ($ domain) $ d = Domain :: model () -> findByAttributes (array ('name' => $ domain-> navn)); hvis (tomt ($ d)) $ d = nytt domene;  $ d-> name = $ domain-> navn; $ d-> ttl = $ domain-> ttl; $ d-> zone = $ domain-> zoneFile; $ d-> aktiv = 1; $ d-> created_at = $ d-> created_at; $ d-> modified_at = ny CDbExpression ('NU ()'); $ D-> Lagre (); returner $ d-> id;  

Du bør se noe slikt etter at det er fullført:

Klikk på administrer ikon i Starwars-raden, og du ser noe slikt:

La oss da synkronisere domenepostene for starwars.io. Klikk Synkroniser Domain Records-dette vil ringe til SyncRecords handling i DomainController:

 offentlig funksjon actionSyncrecords ($ id) $ dr = nytt DomainRecord (); $ Dr-> sync ($ id); $ Dette-> omdirigere ( '/ domene / vis /'.$ id);  

De DomainRecord Modellsynkroniseringsmetode ser slik ut. Det gjør en forespørsel om domenenavnets poster og legger hver til DomainRecord bord i vår lokale database:

 synkronisering av offentlig funksjon ($ id) // oppslagsdomen $ d = Domene :: modell () -> findByPk ($ id); $ ocean = nytt hav (); $ records = $ ocean-> getDomainRecords ($ d-> navn); foreach ($ poster som $ r) $ record_id = $ this-> add ($ id, $ r);  

Her er Ocean-komponenten getDomainRecords metode:

offentlig funksjon getDomainRecords ($ navn) $ action = $ this-> digitalOcean-> domainRecord (); $ actions = $ action-> getAll ($ navn); returnere $ handlinger; 

De DomainRecord legg til metode er litt mer detaljert:

offentlig funksjon legg til ($ domain_id, $ record) $ dr = DomainRecord :: model () -> findByAttributes (array ('record_id' => $ record-> id)); hvis (tomt ($ dr)) $ dr = nytt DomainRecord;  $ dr-> domain_id = $ domain_id; $ dr-> record_id = $ record-> id; $ dr-> record_name = $ record-> navn; $ dr-> record_type = $ record-> type; $ dr-> record_data = $ record-> data; hvis (isset ($ record-> prioritet)) $ dr-> priority = $ record-> prioritet; ellers $ dr-> priority = null; hvis (isset ($ record-> port)) $ dr-> port = $ record-> port; ellers $ dr-> port = null; hvis (isset ($ record-> weight)) $ dr-> vekt = $ record-> vekt; ellers $ dr-> vekt = null; $ dr-> aktiv = 1; $ dr-> created_at = ny CDbExpression ('NU ()'); $ dr-> modified_at = ny CDbExpression ('NU ()'); $ Dr-> Lagre (); returner $ dr-> id;  

Slik ser det ut etter at domenepostene synkroniseres:

Legge til domener fra konsollen vår

Du kan også legge til domener og domeneregistre fra konsollen manuelt.

Her er koden i Domenemodellen som påkaller API-forespørselen om å legge til domenet:

 offentlig funksjon remote_add () $ ocean = new Ocean (); $ domain = $ ocean-> createDomain ($ this-> navn, $ this-> ip_address); $ Dette-> Lagre (); returnere sant;  

Her er Ocean-komponenten addDomain metode:

 offentlig funksjon createDomain ($ navn, $ ip_address) $ action = $ this-> digitalOcean-> domain (); $ create = $ action-> create ($ navn, $ ip_address); returner $ create;  

Synkroniser deretter domenepostene og legg til din egen:

Her er DomainRecord modell remote_add-metoden:

 offentlig funksjon remote_add ($ id) $ d = Domain :: model () -> findByPk ($ id); $ ocean = nytt hav (); $ record = $ ocean-> createDomainRecord ($ d-> navn, $ this-> record_type, $ this-> record_name, $ this-> record_data, $ this-> prioritet, $ this-> port, $ this-> vekt ); $ this-> domain_id = $ id; $ this-> record_id = $ record-> id; $ this-> active = 1; $ this-> created_at = ny CDbExpression ('NU ()'); $ this-> modified_at = ny CDbExpression ('NU ()'); $ Dette-> Lagre (); returnere sant;  

Her er Ocean-komponenten createDomainRecord metode:

 offentlig funksjon createDomainRecord ($ domain_name, $ type, $ navn, $ data, $ prioritet, $ port, $ vekt) $ domainRecord = $ this-> digitalOcean-> domainRecord (); hvis ($ prioritet == ") $ prioritet = null; hvis ($ port ==") $ port = null; hvis ($ weight == ") $ weight = null; // returner den opprettede DomainRecord-enheten til domenet 'bar.dk' $ created = $ domainRecord-> opprett ($ domain_name, $ type, $ navn, $ data, $ prioritet, $ port, $ vekt), returner $ opprettet; 

Du bør se noe slikt i konsollen vår:

Her er hva Digital Oceans webkonsoll vil vise - legg merke til hvordan vår lokale visning og fjernsynet nå er identiske:

Som du kanskje har lagt merke til, mangler denne koden robust feilkontroll, synkronisering, oppdatering, sletting og andre klokkene og fløyter. Jeg forlater det for deg å utvide som du ønsker.

Jeg håper du har funnet denne utforskningen av Digital Ocean DNS API for å være nyttig.

Ta gjerne inn dine spørsmål og kommentarer nedenfor. Du kan også nå meg på Twitter @ reifman eller email meg direkte. Følg min Tuts + instruktørside for å se fremtidige artikler om relaterte emner.

Relaterte linker

  • Kommer til port 53 i nærheten av deg: Den nye DigitalOcean DNS!
  • Slik peker du på DigitalOcean Nameservers fra Common Domain Registrars
  • Digital Ocean API
  • Digital Ocean V2 PHP API-bibliotek
  • Installasjonshåndbok for Digital Ocean Console