Nel novembre 2014, Digital Ocean ha annunciato il suo servizio di hosting DNS recentemente aggiornato. Oltre ad essere veloci e affidabili, gli utenti hanno sperimentato quasi aggiornamenti istantanei ai record DNS. Qualsiasi sviluppatore o amministratore di sistema può apprezzare i vantaggi di questo: non è più necessario attendere gli aggiornamenti degli indirizzi IP durante le migrazioni di sistema. In questo tutorial, espanderemo la funzionalità dell'applicazione console che abbiamo compilato l'ultima volta per includere la gestione del servizio DNS di Digital Ocean.
Di nuovo, puoi scaricare l'applicazione console gratuita dal repository Tuts + Github. Ho pubblicato una guida di installazione dettagliata per l'applicazione console sul mio sito web. Puoi anche esplorare la mia guida all'installazione generica per le app Digital Ocean.
Mentre puoi utilizzare la console Web Digital Ocean per gestire i tuoi record DNS, potresti trovare vantaggioso gestirli a livello di programmazione tramite l'API.
La documentazione per i servizi API DNS di Digital Ocean si trova in due aree principali:
Ci concentreremo innanzitutto sulla configurazione dei domini e quindi sull'aggiunta dei singoli record DNS.
Prima di poter attivare i servizi DNS di Digital Ocean, è necessario trasferire i server dei nomi di dominio ai server dei nomi di Digital Ocean:
Aggiungerò il mio dominio StarWars.io per questa demo dimostrativa. Ecco il mio cambio di nome sul server presso il mio registrar di domini:
È anche possibile trovare How to Point to DigitalOcean Nameserver From Common Domain Registrars.
Innanzitutto, aggiungiamo un dominio al DNS di Digital Ocean attraverso la sua interfaccia utente web. Lungo il menu di navigazione a sinistra, fai clic su DNS:
Clic Aggiungi dominio:
Ecco come Digital Ocean mostra il tuo record DNS. È bello che ti mostri il file di zona generato di seguito:
Successivamente, aggiungeremo un record di dominio A per www.starwars.io:
Ora esploriamo l'API, iniziando con il download di alcuni domini e record di dominio appena creati.
Per prima cosa, scarica l'elenco dei nostri domini utilizzando l'API. Nella nostra applicazione console, fare clic su domini nella barra di navigazione e fare clic Sync nel menu di destra.
Il Controller di dominio
il codice è simile a questo:
funzione pubblica actionSync () $ domain = new Domain (); $ Dominio> sync (); $ This-> redirect ( '/ dominio / admin');
Il modello di dominio chiama quindi le funzioni del componente Ocean e aggiunge ciascun dominio trovato nel nostro database locale:
funzione pubblica sync () $ ocean = new Ocean (); $ domains = $ ocean-> getDomains (); foreach ($ domini come $ d) $ domain_id = $ this-> add ($ d);
Ecco il codice API del componente Ocean per recuperare l'elenco dei domini:
funzione pubblica getDomains () // restituisce l'azione api $ action = $ this-> digitalOcean-> domain (); // restituisce una raccolta di entità Action $ actions = $ action-> getAll (); restituire $ azioni;
Ecco il metodo Aggiungi modello di dominio:
funzione pubblica add ($ dominio) $ d = Dominio :: modello () -> findByAttributes (array ('nome' => $ dominio-> nome)); if (vuoto ($ d)) $ d = nuovo Dominio; $ d-> nome = $ dominio-> nome; $ d-> ttl = $ dominio-> ttl; $ d-> zone = $ dominio-> zoneFile; $ d-> attivo = 1; $ d-> created_at = $ d-> created_at; $ d-> modified_at = new CDbExpression ('NOW ()'); $ D-> save (); restituire $ d-> id;
Dovresti vedere qualcosa di simile dopo aver completato:
Clicca sul gestire l'icona nella riga Starwars e vedrai qualcosa di simile a questo:
Quindi, sincronizziamo i record del dominio per starwars.io. Clic Sincronizza record di dominio-questo chiamerà il SyncRecords
azione in Controller di dominio
:
funzione pubblica actionSyncrecords ($ id) $ dr = new DomainRecord (); $ DR> sync ($ id); $ This-> redirect ( '/ dominio / vista /'.$ id);
Il DomainRecord
il metodo di sincronizzazione del modello è simile a questo. Effettua una richiesta per i record del nome del dominio e aggiunge ciascuno al DomainRecord
tabella nel nostro database locale:
funzione pubblica sync ($ id) // dominio di ricerca $ d = Dominio :: modello () -> findByPk ($ id); $ ocean = new Ocean (); $ records = $ ocean-> getDomainRecords ($ d-> nome); foreach ($ registra come $ r) $ record_id = $ this-> add ($ id, $ r);
Ecco la componente Ocean getDomainRecords
metodo:
funzione pubblica getDomainRecords ($ name) $ action = $ this-> digitalOcean-> domainRecord (); $ actions = $ action-> getAll ($ name); restituire $ azioni;
Il DomainRecord
aggiungi metodo è un po 'più dettagliato:
funzione pubblica add ($ domain_id, $ record) $ dr = DomainRecord :: model () -> findByAttributes (array ('record_id' => $ record-> id)); if (vuoto ($ dr)) $ dr = nuovo DomainRecord; $ dr-> domain_id = $ domain_id; $ dr-> record_id = $ record-> id; $ dr-> record_name = $ record-> nome; $ dr-> record_type = $ record-> type; $ dr-> record_data = $ record-> dati; if (isset ($ record-> priority)) $ dr-> priority = $ record-> priority; altrimenti $ dr-> priority = null; if (isset ($ record-> port)) $ dr-> port = $ record-> port; altrimenti $ dr-> port = null; se (isset ($ record-> peso)) $ dr-> weight = $ record-> weight; altrimenti $ dr-> weight = null; $ dr-> active = 1; $ dr-> created_at = new CDbExpression ('NOW ()'); $ dr-> modified_at = new CDbExpression ('NOW ()'); $ DR> save (); restituisce $ dr-> id;
Ecco come sarà dopo la sincronizzazione dei record del dominio:
Puoi anche aggiungere domini e record di dominio manualmente dalla nostra console.
Ecco il codice nel modello Dominio che richiama la richiesta API per aggiungere il dominio:
funzione pubblica remote_add () $ ocean = new Ocean (); $ domain = $ ocean-> createDomain ($ this-> name, $ this-> ip_address); $ This-> save (); ritorna vero;
Ecco la componente Ocean addDomain
metodo:
funzione pubblica createDomain ($ name, $ ip_address) $ action = $ this-> digitalOcean-> domain (); $ create = $ action-> create ($ name, $ ip_address); return $ create;
Quindi, sincronizza i record del dominio e aggiungi il tuo:
Ecco il DomainRecord
modello metodo remote_add
:
funzione pubblica remote_add ($ id) $ d = Dominio :: modello () -> findByPk ($ id); $ ocean = new Ocean (); $ record = $ oceano-> createDomainRecord ($ d-> nome, $ 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 = new CDbExpression ('NOW ()'); $ this-> modified_at = new CDbExpression ('NOW ()'); $ This-> save (); ritorna vero;
Ecco la componente Ocean createDomainRecord
metodo:
funzione pubblica createDomainRecord ($ domain_name, $ type, $ name, $ data, $ priority, $ port, $ weight) $ domainRecord = $ this-> digitalOcean-> domainRecord (); if ($ priority == ") $ priority = null; if ($ port ==") $ port = null; if ($ weight == ") $ weight = null; // restituisce l'entità DomainRecord creata del dominio 'bar.dk' $ created = $ domainRecord-> create ($ domain_name, $ type, $ name, $ data, $ priorità, $ port, $ weight); return $ created;
Dovresti vedere qualcosa di simile nella nostra console:
Ecco cosa mostrerà la console Web di Digital Ocean: noterai come ora la nostra vista locale e la vista remota sono identiche:
Come forse avrai notato, questo codice manca di robusto controllo degli errori, sincronizzazione, aggiornamento, eliminazione e altri suoni e campanelli. Lascio che a te di estendere come desideri.
Spero che tu abbia trovato utile questa esplorazione dell'API Digital Ocean DNS.
Non esitate a postare le vostre domande e commenti qui sotto. Puoi anche raggiungermi su Twitter @reifman o mandarmi un'email direttamente. Segui la pagina dei miei Tuts + istruttore per vedere articoli futuri su argomenti correlati.