Hvordan utvikle på ufs.samfundet.no

Utvikling av uFS foregår over github, og man må være medlem av ITK-gruppen på Github for å kunne pushe endringer. Hvis du ikke er medlem, er #itk et godt sted å starte for å få hjelp. uFS bruker django som rammeverk.

Lage lokal kopi (på cassarossa)

Vi starter med å klone repoet til dev-mappen din og sjekke at vi fikk riktig remote url.

bruker@cassarossa:~/dev$ git clone https://github.com/itkinside/ufs.git 
bruker@cassarossa:~/dev/ufs$ git config –get remote.origin.url

Deretter må vi lage en local.py fil. Det er lettest å kopiere filen fra en annen som utvikler.

bruker@cassarossa:~/dev/ufs$ cp /home/cassarossa/itk/erlendps/dev/ufs/itkufs/settings/local.py ufs/itkufs/settings/local.py

I local.py filen skal vi peke på en database. ITK har en felles database, kalt ufs_dev_2020 (dårlig navn, men men) og en tilhørende bruker ufs_dev_2020, som kjører i PostgreSQL på cirkus. Databasen er ment slik at alle som utvikler, har samme data å forholde seg til. Det gjør det også lettere med tanke på brukere og transaksjoner.

Resten av setup foregår på cirkus.

Lag et virtual environment (venv) og installer dependencies

bruker@cirkus:~/dev/ufs$ virtualenv -p $(which python3) venv && source venv/bin/activate
bruker@cirkus:~/dev/ufs$ python3 -m pip install -r requirements-dev.txt

Så må vi kompilere translation files (.po –> .mo)

bruker@cirkus:~/dev/ufs$ python3 manage.py compilemessages

Det kan også være lurt å lage en egen superbruker:

bruker@cirkus:~/dev/ufs$ python3 manage.py createsuperuser   # grensesnitt for å lage superbruker

Vi skal nå sette opp selve utviklingsinstansen.

Kjøre på cirkus

De aller fleste web-servere ligger på cirkus. Vi ønsker gjerne at utviklingsinstansen vår skal settes opp på cirkus. Typisk ønsker man en url alá http://erlendps.ufs.samfundet.no I resten av noden skal du bytte ut BRUKERNAVN med ditt eget brukernavn. AssignUserID i configen skal settes til ufs-httpd ufs-web

Apache-config

Kopier en fungerende config fra en annen utvikler på cirkus, og bytt ut brukernavnet deres med ditt eget alle steder det står. Apache-config-filene ligger i /etc/apache2/sites-available/. Pass på at DocumentRoot er riktig. Den skal peke til dev-mappen din ~/dev/ufs/

For å legge til dette i /etc/apache2/sites-enabled/ kjør

bruker@cirkus:~$ sudo a2ensite BRUKERNAVN.ufs.samfundet.no

Før apacheconfigen skal loades, må vi legge til en DNS-oppføring i bind.

Bind

Vi ønsker at DNS skal peke riktig, og dette skal legges inn i bind sin config

bruker@cirkus:~$ vim /etc/bind/pz/samfundet.no

Finn de linjene hvor andre har ufs DNS records og legg til deg selv, skal se ca slik ut

BRUKERNAVN.ufs   IN      CNAME   cirkus.samfundet.no

Deretter signerer du sonen og reloader bind med

bruker@cirkus:~$ cd /etc/bind/pz
bruker@cirkus:~$ sudo zonesigner samfundet.no
bruker@cirkus:~$ sudo systemctl reload bind9

Reload apache-config:

bruker@cirkus:~$ sudo systemctl reload apache2

uWSGI

Nå må vi lage en uWSGI-config. Kopier en annen person sin, men endre slik at den bruker din egen dev-instans, og bytt ut brukernavnet deres med ditt eget alle steder det står.

bruker@cirkus:/etc/uwsgi/apps-available$ cp erlendps.ufs.samfundet.no.ini BRUKERNAVN.ufs.samfundet.no.ini

Av sikkerhetsgrunner er det også viktig å sette uid og gid i configen til riktig bruker avhengig av hvilken side det er snakk om, eks uka sider er uid=uka-httpd, og gid=uka-web, tilsvarende for ufs er uid=ufs-httpd, og gid=ufs-web. Dette er fordi vi ikke vil ha uwsgi instanser kjørende som din personelige bruker siden denne har sudo tilgang.

Da må du også passe på at gruppen, eks uka-web har lesetilgang til kildekoden. NB kun gruppen uka-web skal ha lesetilgang, ikke uka-httpd.

Deretter lager vi en symlink (symbolic link). Vi ønsker å legge den i apps-available.custom, slik at den peker på apps-available.

bruker@cirkus:/etc/uwsgi/apps-available$ ln -s ../apps-available/BRUKERNAVN.ufs.samfundet.no.ini ../apps-available.custom/

Så skal vi fortelle uWSGI om instansen din:

bruker@cirkus:~$ sudo systemctl enable uwsgi-custom@BRUKERNAVN.ufs.samfundet.no
bruker@cirkus:~$ sudo systemctl start uwsgi-custom@BRUKERNAVN.ufs.samfundet.no

Når du ønsker å restarte instansen din, bruker du:

bruker@cirkus:~$ sudo systemctl restart uwsgi-custom@BRUKERNAVN.ufs.samfundet.no

Eventuelt kan man sette opp en touch-reload.

Du kan nå prøve å gå på BRUKERNAVN.ufs.samfundet.no/admin (web-grensesnittet for django admins, altså superbrukeren), og logge inn med superbrukeren du lagde. Her kan du se hvilke grupper som finnes, lage din egen gruppe, lage brukere og litt annet gøy. Husk at hvis du ikke lager din egen database, så bruker du ufs sin dev database, som flere utviklere også bruker, pass litt på å ikke ødelegge for andre og ikke gi ut sensitiv informasjon.

For at du skal kunne logge deg inn med din vanlige samfundet-bruker, må du lage en ny bruker på admin-siden, og setter owner til brukernavnet du har på samfundet. Deretter kan du gå på BRUKERNAVN.ufs.samfundet.no og logge inn med brukeren din!

https

Man trenger strengt tatt ikke å kryptere siden sin, men det kan i løse en "too many redirects" feilmelding. Se node om Let's Encrypt

Helt enkelt bruker vi certbot og legger til en redirect i /etc/varnish/default.vcl

bruker@cirkus:~$ sudo certbot -d BRUKERNAVN.ufs.samfundet.no -a letsencrypt-varnish-plugin:varnish -i letsencrypt-hitch-plugin:hitch

I /etc/varnish/default.vcl setter man opp en redirect, skal se ca slik ut:

            req.http.host == "BRUKERNAVN.ufs.samfundet.no" ||

Deretter reloader vi varnish

bruker@cirkus:~$ sudo systemctl reload varnish

Migreringer

Dersom du har gjort endringer i Django-modellene, må du migrere databasen for å reflektere disse endringene:

bruker@cirkus:~/dev/ufs$ python3 manage.py showmigrations                              # viser migreringer som er blitt gjort i databasen
bruker@cirkus:~/dev/ufs$ python3 manage.py makemigrations –name "beskrivende navn"     # genererer migreringsscript
bruker@cirkus:~/dev/ufs$ python3 manage.py migrate                                     # migrerer prosjektet til databasen

Husk også å commite migreringsscriptet i git. For å kjøre migreringsscript som er pullet fra git, holder det å kjøre python3 manage.py migrate.

Opprette ny database

Dersom du skulle ønske å opprette en ny database, f. eks. for å ha en egen datatabase å utvikle på, kan du gå i psql-skallet og lage din egen bruker med passord og database med passende navn. Deretter setter du databasenavnet, brukernavnet og passordet til brukeren inn i local.py filen. Pass på at brukeren har rettigheter, det kan gjøres med kommandoen

GRANT ALL PRIVILEGES ON DATABASE database_name TO username;
PostgreSQL kjører som sagt på cirkus, så du må ssh deg til cirkus.

Endre local.py til å bruke denne databasen med denne brukeren, og migrer databasen med:

bruker@cirkus:~/dev/ufs$ python3 manage.py migrate     # migrerer prosjektet til databasen

Når du har utviklet det vil

Først må du forsikre deg om at repoet ditt er oppdatert med det offisielle ufs-repoet.

bruker@cirkus:~/dev/ufs$ git commit -m "En beskrivende commit-melding"
bruker@cirkus:~/dev/ufs$ git pull –rebase
bruker@cirkus:~/dev/ufs$ git push

For å pushe til ufs-repoet på du være medlem av ITK-gruppen på GitHub, spør en pang om de kan legge deg til.

Rulle ut nyeste versjon av uFS

For å rulle ut nyeste versjon av uFS fra master-branchen til https://ufs.samfundet.no kjør

bruker@cirkus:~$ sudo -i -u ufs-httpd /home/cassarossa/itk/ufs-web/update

Scriptet tar hånd om det mestem blant annet statiske filer, migreringer og uWSGI reload.

Lenker: Start, ufs

Mail: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2020-11-19 22:44 | Revisjon: 17 (historie, blame) | Totalt: 1662 kB | Rediger