Demo applikasjon som gjenskaper TFK sin ansatte app: http://apps.t-fk.no/ansatte
Den består av en backend og en frontend. Backend er skrevet i Python
med Django
som rammeverk
og bruker Django Rest Framework
for api oppsett.
Frontend er skrevet i Ember
og snakker med backend via AJAX kall.
Alle tjenester håndteres av docker
og docker-compose
, docker-compose
tar seg å starte opp
alle tjenesten man trenger og binder dem sammen med bruk av nginx
som reverse proxy.
Skripting gjøres via Fabric, feks. for første gangs oppsett og deployment.
- Git clone dette repoet
- Gå inn in working copy
- kopier dist filene til lokale filer og modifiser
- start docker containere med docker-compose
- Importer data til databasen med Django kommandoen
import_data
Første gangs oppsett krever at noen lokale filer lages, dette kan gjøres med:
fab setup
Eller manuelt med:
cp .env-dist .env
cp backend/settings/.env-dist backend/settings/.env
cp backend/settings/local-dist.py backend/settings/local.py
Bygg docker images med:
docker-compose build
For å starte alle tjenestene kjør:
docker-compose up
Applikasjonen er nå tilgjengelig via WEB_PORT
som konfigurert
Importer data om ansatte ved å kjøre:
docker-compose run --rm backend python manage.py import_data ansatte.json
Litt informasjon om docker imagene som er brukt.
Docker image som er basert på Python men som starter Django applikasjonen via
start-dev.sh
skriptet, dette skriptet sørger for å migrere databasen og vil håndtere feil
og prøver å restarte applikasjonen hvis dette skjer.
entrypoint.sh
sørger for å vente på at databasen er klar før den fortsetter.
Det er også et oppsett for produksjon hvor gunicorn
er brukt.
Docker image basert på offisiell nginx men som integrerer envplate
, dette
gjør det mulig å bruke environment variabler i konfigen.
Docker image basert på nodejs, som integrer yarn, watchman, bower, livereload og nodemon.
yarn erstatter npm for installasjon av pakker, og nodemon brukes for å starte og restarte ember serveren når hovedkonfigurasjon er endret. Dette gjør utviklingsjobben en del enklere.
Offisielt image brukes men er konfigurert for lokalt utvikling.
Fila docker-compose.yml brukes til lokal utvikling
Docker oppsettet eksponerer to porter (settes i .env
), WEB_PORT
er porten
for reverse proxy som er den man bruker til vanlig. APP_PORT
er porten
direkte mot Django backend, trengs normalt ikke men kan brukes for
Livereload er konfigurert slik at alt går igjennom WEB_PORT
, dette gjør
det også enkelt å ta bruk tjenester som ngrok slik at man kan få hele
oppsettet gjennom et domene og SSL.
API'et ligger i backend og leveres via pathen /backend/api
, koden
for dette ligger i backend/backend/api.py
og er laget i Django Rest Framework.
All søk i APIet er case insensitive og bruker et enkelt SQL like
søk.
Følgende API punkter er tilgjenglig:
/backend/api/people?q=<search>
– Søk etter personer på fornavn/etternavn./backend/api/people?department_id=<department>
– Hent alle personer i en bestemt avdeling./backend/api/people?department_id=<department>&q=<search>
– Søk etter personer i en bestemt avdeling./backend/api/people/id
– Hent en spesifikk person etter id/backend/api/departments
– Hent ut alle avdelinger/backend/api/departments?q=<search>
– Søk etter avdeling på avdelingsnavn/backend/api/departments/id
- Hent en spesifikk avdeling etter id og alle relaterte personer./backend/api/departments/id?q=<search>
– Søk etter personer på fornavn/etternavn i en spesifikk avdeling.
Django Rest Framework sin interaktive api browser er tilgjenglig på
/backend/api
.