# sregistry: Allgemeine Einstellungen und Grundvoraussetzungen Kevin: https://92cb3aaf-cb4f-4ca9-8e7a-78a3475f2353.fr.bw-cloud-instance.org/ Cedric: https://a318763d-9fc3-42c4-a439-971ea1176367.fr.bw-cloud-instance.oriig K8s: https://cf86c07b-f7b2-4f88-a6ec-c389c7ca7bcf.fr.bw-cloud-instance.org:30443/ Charliecloud: https://7455b25e-91b2-4dd1-b780-152a41ff905d.fr.bw-cloud-instance.org ###### tags: `sregistry` > [time=Tue, Jan 18, 2021 15:18 CEST] [name=Cedric Casper] [name=Kevin Kaftan] Dokumentation basierend auf: https://singularityhub.github.io/sregistry/ [TOC] ## sregistry aufsetzen ## TODO: - [ ] i) Integration von Security Scanning in sRegistry (SYFT / Clair / ...) Ist in Bearbeitung: https://github.com/singularityhub/sregistry/issues/128 - [ ] Github OAuth Screenshots erneuern mit https URLs - [ ] Verweise auf die einzelnen Dokus ## Probleme waehrend der Durchfuerung Push eines Singularity-Images via Weboberflaeche und CLI landet an verschiedenen Stellen. Ist nicht interoperabel: https://github.com/singularityhub/sregistry/issues/379 ## Portfreigaben Portfreigaben: * **8080** HTTP Zugriff auf die Weboberflaeche. * **443** HTTPS Zugriff auf die Weboberflaeche. * **9000** Minio: Zugriff auf den Image-Speicher. Zu Minio werden Singularity-Images gepusht und gepullt. * **2049** NFS/RPC (Fuer Kubernetes): Nicht zwingend notwendig. Oeffnen des Ports auf Control und Worker hat gefixt, dass NFS share nicht gemountet werden konnte. Die Portfreigaben koennen bei den verschiedenen Deploymentmoeglichkeiten variieren. Kubernetes erlaubt beispielsweise keine Nodeportfreigabe kleiner als Port 30000. Podman erhaelt nur ueber Umwege Zugriff auf privilegierte Ports kleiner als Port 1024. ***SOCIAL CALLBACK AUTH DINGENS NOCH ERGAENZEN*** ## Konfigurationsdateien ```shell git clone https://github.com/singularityhub/sregistry.git ``` ### sregistry/shub/settings/secrets.py Die Datei `sregistry/shub/settings/secret.py` enthaelt Zugangsdaten und allgemein Daten, die geheim gehalten werden sollten um beispielsweise fuer sichere Kommunikation sorgen. Die secret.py kann aus einer Vorlage erstellt werden: ```bash cp dummy_secrets.py secrets.py ``` Mithilfe eines [Key-Generators](https://miniwebtool.com/django-secret-key-generator/) kann ein allgemeiner Schluessel fuer die sregistry generiert werden. Dieser kann man in Zeile 9 folgendermassen eingefuegen: ```bash=9 SECRET_KEY = '1w3uo87p6abuj#txhda6y8i-q5s99#6-el46k_wl3qfsu*2o3g' ``` #### OAuth Applikationen Sollte als Loginmechanismus OAuth gewaehlt werden, muessen in der secrets.py entsprechende Zugangsdaten angegeben werden. Mehr Informationen zu Authentifizierungsmoeglichkeiten: https://hackmd.io/UAXWzfu5S6GWO3SF_gyPWA ### sregistry/shub/settings/config.py Innerhalb der Datei muss nur der Domain Name abgeändert werden. ```bash=34 DOMAIN_NAME = "http://92cb3aaf-cb4f-4ca9-8e7a-78a3475f2353.fr.bw-cloud-instance.org" DOMAIN_NAME_HTTP = "http://92cb3aaf-cb4f-4ca9-8e7a-78a3475f2353.fr.bw-cloud-instance.org" ``` ### sregistry/shub/settings/auth.py ```bash=43 SOCIAL_AUTH_LOGIN_REDIRECT_URL = "https://05495ddb-6495-4520-b03f-6aa3f6cf0b1c.fr.bw-cloud-instance.org" #"http://127.0.0.1 ``` ### Web-Service ![](https://i.imgur.com/8mmgFN5.png) ## HTTPS 1. Via certbot SSL Zertifikate anfordern: https://certbot.eff.org/instructions?ws=webproduct&os=ubuntufocal 2. Die SSL-Zertifikate in einen eigenen Ordner kopieren. * `privkey*.pem` bzw. `domain.key` gehoert in den Ordner `ssl/private` * `fullchain*.pem` bzw. `chained.pem` gehoert in den Ordner `ssl/certs` > **Wichtig:** `docker-compose` mag keine symlinks, deshalb müssen die Zertifikate aus dem Ordner `/etc/letsencrypt/archive` anstatt `/etc/letsencrypt/live` kopiert werden. <br> Bei den Dateien handelt es sich um `privkey*.pem` und `fullchain*.pem`, welche man beim Kopieren am besten in `domain.key` und `chained.pem` umbenennen. 3. Zusätzlich muss in diesem Ordner `ssl/certs` der Befehl `openssl dhparam -out dhparam.pem 4096` ausgeführt werden, um die Datei `dhparam.pem` zu generieren. 5. Die alten Dateien `docker-compose.yml` und `nginx.conf` durch neue Versionen aus dem Ordner `sregistry/https` ersetzen. 6. In der `nginx.conf` ändern wir der Einfachheit wegen die Zeilen 75, 76 und 81: ```conf=65 server { listen 443; server_name localhost; root html; client_max_body_size 10024M; client_body_buffer_size 10024M; ssl on; ssl_certificate /etc/ssl/certs/chained.pem; # Änderung ssl_certificate_key /etc/ssl/private/domain.key; # Änderung ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; ssl_session_cache shared:SSL:50m; ssl_dhparam /etc/ssl/certs/dhparam.pem; # Änderung ssl_prefer_server_ciphers on; ``` 5. Der Ordner `sregistry/ssl` muss nun mit dem nginx-Container verbunden werden. Dazu muss die `docker-compose.yml` editiert werden in Zeile 34 und 35: ```yaml=25 nginx: restart: always image: quay.io/vanessa/sregistry_nginx ports: - "8080:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro - ./uwsgi_params.par:/etc/nginx/uwsgi_params.par:ro - ./ssl/certs:/etc/ssl/certs:ro # Aenderung - ./ssl/private:/etc/ssl/private:ro # Aenderung volumes_from: - uwsgi links: - uwsgi - db ``` 6. Die Datei `sregistry/shub/settings/config.py` muss ebenfalls angepasst werden - Zeile 34 muss in https geändert werden: ```python=30 # DOMAIN NAMES ## IMPORTANT: if/when you switch to https, you need to change "DOMAIN_NAME" # to have https, otherwise some functionality will not work (e.g., GitHub webhooks) DOMAIN_NAME = "https://domain.com" DOMAIN_NAME_HTTP = "http://domain.com" DOMAIN_NAKED = DOMAIN_NAME_HTTP.replace("http://", "") ``` 7. **Nicht vergessen, auch auf Github (oder einer anderen OAuth-Plattform) die URL und Callback-URL in https zu ändern.** 8. ??? 9. Profit ![](https://i.imgur.com/b9GuYxB.jpg) --- ## Start der Sregistry nach Reboot Um das Starten von Sregistry automatisch zu erlangen, kann ein service erstellt werden. ### Beispielsweise für das Starten mit podman-compose: ` vim /etc/systemd/system/sregistry.service ` ```bash= [Unit] Description=Podman-Compose for sregistry After=network.target [Service] Restart=always Type=simple KillMode=none # User ubuntu starts sregistry pods User=ubuntu Group=ubuntu # Compose down and up ExecStart=/home/ubuntu/.local/bin/podman-compose -f /home/ubuntu/sregistry-podman-compose/docker-compose.yml up ExecStopPost=/home/ubuntu/.local/bin/podman-compose -f /home/ubuntu/sregistry-podman-compose/docker-compose.yml down [Install] WantedBy=multi-user.target ``` Nachdem der Service erstellt wurde, muss noch der Daemon neugeladen werden. Danach kann man den Service starten. ```bash systemctl daemon-reload systemctl enable sregistry.service ``` ### Beispielsweise für das Starten mit docker-compose ```bash= [Unit] Description=Docker-Compose for sregistry Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes # User ubuntu startet sregistry pods User=ubuntu Group=ubuntu # Docker-compose down and up WorkingDirectory=/home/ubuntu/sregistry-docker-compose ExecStart=/usr/bin/sudo /usr/bin/docker-compose up -d ExecStopPost=/usr/bin/sudo /usr/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target ``` <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br> --- ![](https://i.imgur.com/loPT2mf.gif)