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)