Oppsett av REST-API

Hvordan setter man opp Cerebrum sitt REST-API?

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)
Av jbr
Publisert 6. juni 2016 15:58 - Sist endret 1. des. 2022 11:09