În noiembrie 2014, Digital Ocean a anunțat serviciul de gazduire DNS recent modernizat. Pe lângă faptul că au fost rapidi și fiabili, utilizatorii au experimentat actualizări instantanee imediate ale înregistrărilor DNS. Orice dezvoltator sau administrator de sistem poate aprecia avantajele acestui lucru: nu mai așteptați actualizări ale adreselor IP în timpul migrărilor sistemului. În acest tutorial, vom extinde funcționalitatea aplicației de consolă pe care am construit-o ultima dată pentru a include gestionarea serviciului DNS al Digital Ocean.
Din nou, puteți descărca aplicația de consolă gratuită din depozitul Tuts + Github. Am postat un ghid detaliat de instalare pentru aplicația de consolă de pe site-ul meu. De asemenea, puteți să explorați ghidul meu de instalare generică pentru aplicațiile Digital Ocean.
În timp ce puteți utiliza consola web digitală Digital Ocean pentru a vă gestiona înregistrările DNS, puteți considera că este avantajos să le gestionați programatic prin API.
Documentația pentru serviciile Digital Ocean DNS API este situată în două domenii principale:
Vom concentra mai întâi pe configurarea domeniilor dvs. și apoi pe adăugarea înregistrărilor DNS individuale.
Înainte de a putea activa propriile servicii DNS ale Digital Ocean, trebuie să vă transferați numele de nume de domenii la serverele de nume Digital Ocean:
Voi adăuga domeniul StarWars.io pentru această demonstrație tutorial. Iată modificarea serverului meu de nume la registratorul domeniului meu:
S-ar putea să găsiți cum să punctați la serverele de numere DigitalOcean din registrele obișnuite de domeniu, de asemenea, utile.
Mai întâi, să adăugăm un domeniu DNS Digital Ocean prin interfața sa de utilizator web. În meniul de navigare din stânga, faceți clic pe DNS:
Clic Adăugați un domeniu:
Iată cum afișează Digital Ocean înregistrarea dvs. DNS. Este frumos faptul că vă arată fișierul zonei de generație de mai jos:
Apoi, vom adăuga un domeniu Un record pentru www.starwars.io:
Acum, să explorăm API, începând prin descărcarea câtorva dintre domeniile și înregistrările de domenii pe care tocmai le-am creat.
Mai întâi, să descărcăm lista domeniilor noastre utilizând API-ul. În aplicația noastră de consolă, faceți clic pe domenii în bara de navigare și faceți clic pe Sincronizare în meniul din dreapta.
Controlor de domeniu
codul arată astfel:
funcția publică funcțiaSync () $ domain = new Domain (); $ Domain-> sincronizare (); $ This-> redirecționare ( '/ domeniu / admin');
Modelul Domeniu sună apoi funcțiile componente ale Oceanului și adaugă fiecare domeniu găsit în baza noastră de date locală:
funcția publică funcțională () $ ocean = new Ocean (); $ domains = $ ocean-> getDomains (); foreach (domenii $ ca $ d) $ domain_id = $ this-> add ($ d);
Iată codul API din componenta Ocean pentru a prelua lista de domenii:
funcția publică getDomains () // returnează acțiunea api $ action = $ this-> digitalOcean-> domain (); // returnați o colecție de entitate de acțiune $ actions = $ action-> getAll (); returneaza actiunile $;
Iată modul de adăugare a modelului de domeniu:
funcția publică adăugă ($ domain) $ d = Domeniu :: model () -> findByAttributes (array ('name' => $ domain-> name)); dacă (gol ($ d)) $ d = nou domeniu; $ d-> nume = $ domeniu-> nume; $ d-> ttl = $ domeniu-> ttl; $ d-> zona = $ domeniu-> zonaFile; $ d-> active = 1; $ d-> created_at = $ d-> created_at; $ d-> modified_at = nou CDbExpression ("ACUM () '); $ D-> Salvare (); returnează $ d-> id;
Ar trebui să vezi ceva de genul ăsta după ce termină:
Faceți clic pe gestionați pictograma în rândul starwars și veți vedea ceva de genul:
Apoi, să sincronizăm înregistrările domeniului pentru starwars.io. Clic Sincronizați înregistrările de domeniu-aceasta va apela SyncRecords
acțiune în Controlor de domeniu
:
funcția publică funcțiaSyncrecords ($ id) $ dr = nou DomainRecord (); $ Dr-> sincronizare ($ id); $ This-> redirecționare ( '/ domeniu / vizualizare /'.$ id);
DomainRecord
metoda de sincronizare a modelului arată astfel. Ea face o cerere pentru înregistrările de nume de domeniu și adaugă fiecare la DomainRecord
tabel în baza noastră de date locală:
sincronizarea funcției publice ($ id) // domeniul de căutare $ d = Domain :: model () -> findByPk ($ id); $ ocean = Ocean nou (); $ înregistrări = $ ocean-> getDomainRecords ($ d-> nume); foreach ($ înregistrează ca $ r) $ record_id = $ this-> add ($ id, $ r);
Iată componenta Ocean getDomainRecords
metodă:
funcția publică getDomainRecords ($ name) $ action = $ this-> digitalOcean-> domainRecord (); $ actiuni = $ action-> getAll ($ name); returneaza actiunile $;
DomainRecord
add metoda este un pic mai detaliat:
funcția publică adăugă ($ domain_id, $ record) $ dr = DomainRecord :: model () -> findByAttributes (array ('record_id' => $ record-> id)); dacă (gol ($ dr)) $ dr = nou DomainRecord; $ dr-> domain_id = $ domain_id; $ dr-> record_id = $ record-> id; $ dr-> record_name = $ record-> nume; $ dr-> record_type = $ record-> type; $ dr-> record_data = $ record-> date; dacă (isset ($ record-> prioritate)) $ dr-> priority = $ record-> priority; altfel $ dr-> priority = null; dacă (isset ($ record-> port)) $ dr-> port = $ record-> port; altfel $ dr-> port = null; dacă (isset ($ record-> weight)) $ dr-> weight = $ record-> weight; altfel $ dr-> weight = null; $ dr-> active = 1; $ dr-> create_at = nou CDbExpression ("ACUM () '); $ dr-> modified_at = nou CDbExpression ("ACUM () '); $ Dr-> Salvare (); returnează $ dr-> id;
Iată cum va arăta după sincronizarea înregistrărilor domeniului:
De asemenea, puteți să adăugați manual din domeniul consolei noastre și Domenii și înregistrări de domeniu.
Iată codul din modelul de domeniu care invocă cererea API pentru adăugarea domeniului:
funcția publică remote_add () $ ocean = new Ocean (); $ domain = $ ocean-> createDomain ($ acest-> nume, $ this-> ip_address); $ This-> save (); return true;
Iată componenta Ocean addDomain
metodă:
funcția publică createDomain ($ nume, $ ip_address) $ action = $ this-> digitalOcean-> domain (); $ create = $ action-> create ($ nume, $ ip_address); return $ create;
Apoi, sincronizați înregistrările domeniului și adăugați-vă propriile:
Iată-l DomainRecord
model metoda remote_add
:
funcția publică remote_add ($ id) $ d = Domeniu :: model () -> findByPk ($ id); $ ocean = Ocean nou (); $ record = $ ocean-> createDomainRecord ($ d-> nume, $ this-> record_type, $ this-> record_name, $ this-> record_data, $ this-> priority, $ this-> port, $ this-> weight ); $ this-> domain_id = $ id; $ this-> record_id = $ record-> id; $ this-> active = 1; $ this-> created_at = nou CDbExpression ('ACUM ()'); $ this-> modified_at = nou CDbExpression ("ACUM () '); $ This-> save (); return true;
Iată componenta Ocean createDomainRecord
metodă:
funcția publică createDomainRecord ($ nume_domeniu, $ tip, $ nume, $ date, $ prioritate, $ port, $ greutate) $ domainRecord = $ this-> digitalOcean-> domainRecord (); dacă ($ priority == ") $ prioritate = null; dacă ($ port ==") $ port = null; dacă $ ($ weight == ") $ weight = null; // returnează entitatea DomainRecord creată din domeniul 'bar.dk' $ create = $ domainRecord-> create ($ domain_name, $ type, $ name, $ data, $ prioritate, $ port, $ greutate); return $ creat;
Ar trebui să vedeți ceva de genul acesta în consola noastră:
Iată ce va arăta consola web a Digital Ocean - observați modul în care vizualizarea noastră locală și vizualizarea de la distanță sunt acum identice:
După cum probabil ați observat, acest cod nu are o eroare robustă de verificare, sincronizare, actualizare, ștergere și alte clopote și fluiere. Vă las să vă prelungiți așa cum doriți.
Sper că ați găsit această explorare a aplicației Digital Ocean DNS API pentru a vă ajuta.
Vă rugăm să nu ezitați să postați întrebările și comentariile dvs. de mai jos. Puteți să mă contactați și pe Twitter @reifman sau să mă trimiteți direct prin e-mail. Urmați pagina mea Tuts + instructor pentru a vedea articole viitoare despre subiecte conexe.