# 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
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

---
## 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>
---
