Innhold
1 Installasjon
1.1 Cerebrum
REST-API-et og gunicorn installeres som en del av prosedyren i Cerebrum sin setup.py, som pakken Cerebrum.rest.
1.2 nginx
nginx må installeres og settes opp til å starte ved boot:
yum install nginx systemctl enable nginx systemctl start nginx
2 Konfigurasjon
2.1 Sertifikat
SSL-sertifikater bestilles på vanlig måte. nginx forventer å få serversertifikatet + intermediates i én fil, se Configuring HTTPS servers:
cat api.cerebrum.example.com.crt bundle.crt > api.cerebrum.example.com.chained.crt
2.2 SELinux
Sertifikatene må få riktig SELinux-context:
chcon -Rv -t httpd_config_t api.cerebrum.example.com.chained.crt api.cerebrum.example.com.key
nginx må få lov av SELinux før den kan fungere som en proxy:
setsebool -P httpd_can_network_connect on
2.3 nginx
Det må plasseres en konfigurasjonsfil i f.eks. /etc/nginx/conf.d/api.cerebrum.example.com.conf. Her var ikke SELinux samarbeidsvillig nok til å la oss symlinke til en konfigurasjonfil i et git-repo.
server { listen 443 ssl; server_name api.cerebrum.example.com; ssl_certificate /path/to/api.cerebrum.example.com.chained.crt; ssl_certificate_key /path/to/api.cerebrum.example.com.key; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; proxy_pass http://127.0.0.1:8800; } }
2.4 Firewall
Opprettet en sone for nginx og åpnet for tilgang fra API gateway:
firewall-cmd --new-zone=nginx --permanent firewall-cmd --zone=nginx --add-source=129.240.118.136/32 --permanent firewall-cmd --zone=nginx --add-port=443/tcp --permanent firewall-cmd --reload
2.5 Cerebrum
Cerebrum sin REST-server forventer å finne en modul kalt restconfig.
Der konfigurerer man:
- Autorisasjonsmetoder
- Logging
scheduled_jobs settes opp med en jobb som starter gunicorn via keep-running:
class REST(Jobs): restapi = Action( call=AssertRunning(KEEP_RUNNING, params=["-m", "cerebrum-uio-drift@usit.uio.no", "gunicorn", "Cerebrum.rest.server:app", "--workers", "2", "--bind", "127.0.0.1:8800"]), when=When(freq=15*60), max_duration=None)