Newer
Older
# Organa — UiBs DevOps-plattform for applikasjoner
_Organa_ er tenkt som en plattform for å kunne produksjonsette, drifte, teste og
utvikle applikasjoner på en god og moderne måte.
Plattformen skal bestå av tjenester, rutiner, konvensjoner, dokumentasjon og
praksiser som støtter arbeidet til team som forvalter en
applikasjonsportefølje.
Plattformen er etablert ut fra behovene vi opplevde i Seksjon for
Applikasjoner ved UiBs IT-avdeling, og er delvis preget av praksiser og
verktøy som er blitt innarbeidet hos oss. Plattformen vil ikke være begrenset
til seksjonens portefølje når den blir operativ.
Plattformen skal støtte applikasjonsdeployment både i skyen og på maskiner i
vårt eget datasenter.
Dette er et begrep som dekker mange ting; eksempler kan være web-applikasjoner,
mikrotjenester og integrasjonskomponenter. For web-tjenester så er det ofte
domenenavnet som definerer applikasjonen. I andre tilfeller er det tjenesten
som er enheten som omfattes.
En applikasjon er gitt et navn og realiseres av kode som implementerer et
avgrenset system. Koden til en applikasjon ligger i sitt eget git-repo. En
applikasjon tilbyr en tjeneste og kan bygge på andre underliggende tjenester
(f.eks. databaser eller spesialiserte mikrotjenester av ulike slag). Den
enkleste applikasjon man kan tenke seg er et statisk nettsted.
Applikasjoner kan instansieres. Vi bruker det blandt annet til å kjøre
separate test- og staging-instanser av applikasjonen.
Git er versjonskontrollsystemet som vi har valgt å bruke. Vi bruker allerede
git til applikasjonskoden vår og delvis til konfigurasjon. Vi har bygd opp
noen arbeidsflyter basert på [UiBs GitLab
installasjon](https://git.app.uib.no). Den tjenesten er også tilgjengelig for
brukere utenfor UiB. Vi regner med at dette blir en sentral komponent i Organa.
Organa bør prøve å komme så nær opp til filosofien til
[git-ops](https://www.gitops.tech) som mulig. Kilden til alt vi gjør skal være
å finne i git, og endringer og deployment skjer ved push til git.
"Alt i git" gjelder selvsagt også kode, oppsett og dokumentasjon som implementer
selve plattformen Organa.
Det er ofte klargjørende å jobbe mot et første minste brukbare produkt
([MVP](https://no.wikipedia.org/wiki/Minste_brukbare_produkt)). Hva er det
miste funksjonaliteten som må på plass før vi kan slippe brukerene løs og
begynne å motta feedback?
Brukere her er utviklere og applikasjonsforvaltere.
Dette bør være en tidlig milepæl i prosjektet å få
produksjonsatt MVPen av plattformen. Etter det jobber vi videre med å utvide
funksjonaliteten og brukbarheten i produktet/plattformen.
* Organa må kunne deploye en enkel PHP-applikasjon som bruker Postgres direkte
fra GitLab
* Organa må kunne beskrive deployment både i AWS og i eget datasenter
* Organa må kunne skille på staging og produksjon
* Organa må kunne kjøre unit-tester definert i applikasjonen
* Organa må sette opp DNS-navn og SSL-sertifikat
* Organa må inneholde dokumentasjon for hva som forventes av en utvikler for at
koden skal være "deployable".
* Organa må inneholde dokumentasjon på hvordan man enkelt deployer i AWS.
* Organa må kunne vises status på instansene som kjører.
* Organa må samle opp loggene og gi tall på bruk av applikasjonen og hvordan
den oppfører seg.
Dette ble jo allerde en hel del funksjonalitet. Det er kanskje noe i kan strykes
fra listen?
## Krav til plattformen
Her er noen generelle (men enda nokså vage) kvalitetskrav som vi mener at
Organa må oppfylle allerede fra MVP:
* Nye utviklere skal lett komme i gang
* Et team må kunne få god oversikt over sine egne kjørende applikasjoner
## Kubernetes og kontainere
Kontainere og Kubernetes er mye brukt i denne type plattformer (se f.eks.
[nais.io](https://nais.io)). Det finnes mange ferdigbygde applikasjoner som er
tilgjengelige som kontainer-images. Det vil være praktisk om Organa etterhvert
før støtte til å kjøre disse.
Det er ingenting i MVPen beskrevet over som krever at man pakker applikasjonen
i kontainere og f.eks. bruker Kubernetes som run-time miljø. Siden et mål er
å kunne kjøre applikasjoner både on-prem og i skyen så kan Kubernetes være en
høvelig abstraksjon å jobbe ut fra. Dette må prosjektet ta stilling til.
[Serverless](https://martinfowler.com/articles/serverless.html) er også
moderene og populært. Vi bør vurdere hvordan det kan integreres i plattformen.