Useista WordPress-toimistoista poiketen, olemme päätyneet hoitamaan WordPress-ylläpidon lisäksi myös palvelinylläpidon itse. Päädyimme tähän ratkaisuun noin viisi vuotta sitten kokeiltuamme ensin useita kansainvälisiä ja kotimaisia Managed WP -palveluntarjoajia.
Päätös ei ollut helppo, koska palvelinylläpito vaatii erityisosaamista, mutta päädyimme siihen, koska haluamme tarjota asiakkaillemme mahdollisimman saumattoman asiakaskokemuksen, jossa asiakas ei joudu pompoteltavaksi eri luukuille. Lisäksi huomasimme, että ulkoinen palvelinkumppani voi harvoin tuntea yksittäisen asiakkaan sivuston niin hyvin, että pystyisi esimerkiksi korjaamaan palvelimen suorituskykyyn vaikuttavan sovellustason ongelman yhtä tehokkaasti kuin sivuston toteuttaja. Ratkaisu tuo asiakkaillemme myös vakautta: useimmat Managed WP -tarjoajat ovat kasvuhakuisia yhtiöitä, joissa yrityskaupan todennäköisyys on todella korkea.
Päädyimme siihen, koska haluamme tarjota asiakkaillemme mahdollisimman saumattoman asiakaskokemuksen.
Vaikka ylläpidämme asiakkaidemme sivustoja omassa ympäristössämme, rakennamme ne siten, että ne toimivat myös muiden palveluntarjoajien palvelinympäristöissä. Tarkoitus ei ole siis rakentaa toimittajalukkoa vaan tuottaa lisäarvoa laadukkaan sivustototeutuksen päälle. Koska asiakkaan koko ympäristö on hallinnassamme, pystymme esimerkiksi rajaamaan palvelinten hallintayhteydet ainoastaan omaan sisäverkkoomme, mikä nostaa asiakkaidemme tietoturvatasoa merkittävästi.
Ison palvelinmäärän kohdalla automaation hyödyntäminen on käytännössä ainoa vaihtoehto. Eri vaihtoehtoja punnittuamme päädyimme hallitsemaan kaikkia palvelimia Ansible -konfiguraationhallinnan avulla.
Mikä on Ansible?
Ansiblen perusidea on, että kohdepalvelimella suoritetaan ennalta määriteltyjä ja dokumentoituja tehtäviä, esimerkiksi asennetaan jokin tietty ohjelmisto tai määritellään sääntö palomuuriin. Samaan aihepiiriin tai ohjelmistoon liittyviä tehtäviä voidaan ryhmitellä rooleihin, kuten esimerkiksi firewall tai php. Pelikirja (playbook) puolestaan muodostuu kohdepalvelinten ja niillä ajettavien roolien yhdistelmästä. Me olemme päätyneet käyttämään kiinteiden pelikirjojen sijaan itse toteuttamaamme dynaamista pelikirjaa, joka mahdollistaa kohdepalvelimen/palvelinryhmän ja haluttujen roolien määrittelemisen lennosta.
Esimerkki tehtävän määrittelystä:
Ansiblea voi käyttää monella eri tavoin ja muun muassa automatisoinnin asteissa on eroja. Toiset käyttävät sitä ainoastaan palvelimen perustamiseen, jonka jälkeen palvelimeen saatetaan tehdä paikallisia muutoksia.
Me valitsimme lähestymistavaksi pyrkiä 100% automaatioon, koska vain sillä tavalla saadaan oikeasti kaikki hyödyt irti automaatiosta. Asiakkaalle voidaan esimerkiksi perustaa vastaava palvelin esimerkiksi toiseen maantieteelliseen lokaatioon ja palauttaa lähdekoodi Githubista ja uploads-kansio varmuuskopiosta miettimättä, että ”mitäköhän muutoksia se Rami olikaan tänne tehnyt”.
Sekä kehitysympäristöt että tuotantoympäristöt perustetaan Ansiblella
Käytämme keskitettyä konfiguraationhallintaa sekä paikallisten kehitysympäristöjen että tuotantopalvelinten perustamiseen. Kun ympäristöt ovat samanlaisia, asiakkaan raportoima ongelma saadaan poikkeuksetta toistettua myös paikallisessa kehitysympäristössä. Works on my machine -tyyppisiä tilanteita tulee vastaan erittäin harvoin.
Yhdenmukaisten ympäristöjen lisäksi keskitetyn konfiguraation etuna on se, kaikki palvelimet on varmasti konfiguroitu samalla tavalla ja palvelinohjelmistot sekä niiden asetukset on dokumentoitu.
Parannukset saadaan helposti kaikkien asiakkaiden käyttöön
Automaatio vähentää myös käyttäjävirheitä ja mahdollistaa sen, että esimerkiksi yhdelle asiakkaalle tehty tietoturvakehitys tai muu parannus siirretään kaikkien asiakkaiden käyttöön. Eri asiakasprojekteista saatu tieto kumuloituu siis jatkuvasti kaikkien asiakkaiden hyödyksi.
Kääntöpuolena tässä on se, että palvelumme on kaikille asiakkaille yhtä tasokasta. Emme esimerkiksi halua tarjota tietoturvaltaan kevennettyä ratkaisua pienasiakkaille, mikä valitettavasti hieman rajaa toimijoita, joille voimme palveluamme tarjota.
Apua myös jatkuviin ylläpitotehtäviin ja pääsynhallintaan
Perustamisen lisäksi automaatiosta on apua myös jatkuvissa ylläpitotehtävissä. Pystymme ajamaan palvelinohjelmistojen päivitykset testauksen jälkeen kerralla kaikille asiakkaillemme, oli sitten kyse suunnitellusta kuukausittaisesta huollosta tai ennakoimattomasta tietoturvapäivityksestä. Ansiblen avulla voimme viedä myös kaikille sivustoille kerralla sovellustason parannuksia, jotka ovat irrallisia itse sivustoprojektista.
Ansiblen avulla voimme hallita myös SSH-avaimia keskitetysti, mikä tekee palvelinten pääsynhallinnasta vaivatonta. Saamme uuden työsuhteen alkaessa lisättyä tarvittavat käyttöoikeudet ja työsuhteen päättyessä poistettua ne kerralla kaikkialta. Keskitetty SSH-avainten hallinta yhdistettynä keskitetysti hallittuun sovellustason palomuuriin mahdollistaa myös kumppaneiden SSH-kirjautumisen tarvittaessa.
Ad-hoc -komennoilla voidaan kerätä tietoa eri palvelimilta
Pelikirjojen lisäksi Ansible mahdollistaa ns. ad-hoc -komentojen suorittamisen kohdepalvelimilla. Ad-hoc -komennoilla voidaan esimerkiksi kerätä tietoa keskitetysti eri palvelimilta tai sivustoilta. Niiden avulla voidaan esimerkiksi selvittää, millä palvelimilla jokin tietty lisäosa on käytössä tai lukea lokitiedostoja useammalta palvelimelta kerrallaan.
Ad hoc -komentojen avulla voidaan myös huolehtia katastrofivarautumisesta, kuten kaikkien salasanojen nollaamisesta epäiltyjen tietosuojaluokkausten yhteydessä. Näitä komentoja ei onneksi ole vielä kertaakaan tarvittu.
Suosittelemme keskitettyä konfiguraationhallintaa muillekin
Kokemuksemme keskitetystä konfiguraationhallinnasta on pelkästään positiivisia ja paluuta edes osittaiseen manuaaliseen ylläpitoon on vaikea kuvitella. Vaikka käyttöönotto on iso projekti, maksaa se itsensä takaisin todella nopeasti.