Websovelluksen käyttöönotossa on paljon muutakin kuin varsinainen sovellus. Tässä muutamia tärkeimpiä seikkoja muistilistaksi.
1. Versionhallinta
Tämä voi kuulostaa itsestään selvältä tänä päivänä. Näen kuitenkin edelleen silloin tällöin, kun versioimaton koodi siirretään palvelimelle suoraan kehittäjän työasemalta tai että koodia muokataan suoraan palvelimella. Ei näin.
Sovelluksen lähdekoodi kannattaa ylläpitää versionhallinnassa ja ottaa sieltä käyttöön palvelimelle. Suosituin versionhallintasovellus on git, ja GitHub-pilvipalvelu on helpoin tapa hankkia yksityinen repository, eli säilytyspaikka koodille. Jos sellaisen haluaa asentaa omalle palvelimelle, tähän hyvä vaihtoehto on avoimen lähdekoodin GitLab.
2. Testiympäristöt
Versionhallinnasta päästään luontevasti testaukseen. Sitä ei luonnollisesti kannata tehdä tuotannossa, vaan omissa ympäristöissään.
Kehitysympäristö (development) on tyypillisesti kehittäjän omalla työasemalla, suosituimpina työkaluina Vagrant (virtuaalikoneet) ja Docker (containerit). Jatkuvasti päivittyvä testiympäristö (testing) on yleensä projektin kehittäjätiimin yhteisessä käytössä jossakin pilvipalvelussa tai virtuaalipalvelimella. Tuotantoympäristöä (production) täysin vastaava staging-ympäristö toimii vielä tuotantoon otettavan sovellusversion kenraaliharjoituksena.
3. Automaatio
Automatisoimalla testaukseen ja palvelinympäristöjen konfigurointiin liittyvät seikat säästetään aikaa, varmistetaan laatu ja mahdollistetaan ketterät DevOps-prosessit kuten jatkuva toimitus (continuous delivery).
Palvelinpuolen konfiguraatioautomaatiossa eniten nosteessa oleva avoimen lähdekoodin työkalu on Red Hatin hiljattain ostama Ansible. Suosittelen tutustumaan. Me täällä Planeettalla käytämme sitä paljon. Vaihtoehtoinen tapa on käyttää Docker-sovelluskontteja, jossa Docker-imagejen mukana tulee kaikki sovelluksen tarvitsemat alusta ja riippuvuudet.
4. Dokumentointi
Itse websovelluksen dokumentoinnin lisäksi olisi tärkeää dokumentoida myös sen infrastruktuuri ja kaikki muut aspektit, jotka liittyvät sovelluksen elinkaareen. Paras runko tähän on edellä mainitut automaatiojärjestelmät, joiden konfiguraatio toimii itsessään jo mainiona dokumentaationa.
Konfiguraatio ja sen liitteenä oleva muu dokumentaatio kannattaa ylläpitää myös versioituna omana projektinaan, samaan tapaan kuin itse sovelluskoodikin. Kirjoitetun dokumentaation ei tarvitse olla ylitseampuvaa. Monesti riittää jo tekstimuotoinen README-tiedosto Markdown-syntaksilla projektin juuressa.
5. Tietoturva
Tietoturva koostuu useista seikoista, mutta palvelinympäristön puolella kannattaa huomioida ainakin seuraavat asiat.
Palomuurisäännöillä tulisi sulkea kaikki portit ja palvelut, joihin ei tule päästä vapaasti internetistä. Palvelinten hallintaa varten (tyypillisesti SSH-pääteyhteys) varten palomuuriin voi avata aukon kehittäjien kiinteille IP-osoitteille tai käyttää erillistä VPN- tai hallintapalvelinta, jos kehittäjä käyttää dynaamista IP-osoitetta.
Palvelimella ajettavia palveluja, kuten web- tai tietokantapalvelin, tulisi ajaa jollain muulla käyttäjätunnuksella kuin pääkäyttäjän (root) oikeuksilla aina kun mahdollista. Myös kirjautumiset palvelimelle kannattaa tehdä erillisellä tunnuksella, jolla on tarvittaessa sudo-oikeudet pääkäyttäjän toimia varten.
Salaisuuksien turvallinen hallinta unohtuu helposti: Salasanat, SSL-sertifikaattien avaimet (private key), lisenssiavaimet, tunnukset pilvipalveluihin, jne. Näitä ei tule säilyttää versionhallinnassa selväkielisinä, vaan esimerkiksi salakirjoittaa käyttämällä Ansible Vault -työkalua.
6. Alusta
Käytetty sovellusalusta, kuten PHP tai Node.js, on todennäköisesti valittu jo varhaisessa vaiheessa tai kuuluu kehittäjän vakiotyökalupakkiin. Websovelluksissa palvelinpuolella Linux on muuttunut vallitsevaksi käyttöjärjestelmäksi, ja Microsoftkin tuntuu tämän jo hyväksyneen.
Linux-jakeluista palvelinpuolella suosituimmat ovat Ubuntu LTS (Long Term Support) sekä CentOS, joka on avoin versio Red Hat Enterprise Linux -jakelusta. Ubuntu LTS on tuettu 5 vuotta julkaisusta ja CentOS jopa 10 vuotta. Me täällä Planeetalla pidämme molemmista, mutta oletusarvoisesti käytämme CentOS:ia.
7. Vastuut
Tätä käsittelinkin jo aiemmassa artikkelissani, mutta muistutetaan vielä lyhyesti. Ennen käyttöönottoa on hyvä tiedostaa ja sopia vastuunjako eri tahojen välillä viimeistään, kun sovellus siirtyy ylläpitovaiheeseen.
Websovelluksen ylläpidossa muistettavia asioita käyn läpi seuraavassa blogiartikkelissani.