# Docker installation

### Beschreibung:

Installation via Docker und Lets encyrpt.  
Das Image hat den certbot schon drin, so das wir keinen Certbot Conatiner brauchen.

### Installtion

```
cd /root/
```

Abbhängigkeiten installieren

```
apt install docker.io docker-compose apparmor unzip curl
```

#### Jitsi zip downloaden

```
LATEST_VERSION=$(curl --silent https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep -Po '"tag_name": "\K.*\d')
wget https://github.com/jitsi/docker-jitsi-meet/archive/refs/tags/${LATEST_VERSION}.zip
```

Nun unzippen

```
unzip ${LATEST_VERSION}.zip
```

Verzeichnis in jitsi umbenennen

```
mv docker-jitsi-meet-${LATEST_VERSION} jitsi
```

#### .env Datei erstellen und passwörter generieren  


```
cd jitsi && cp env.example .env
./gen-passwords.sh
```

Die .env für Letsencrypt etc bearbeiten

```
nano /root/jitsi/.env
```

Diese zeilen anpassen

```
HTTP_PORT=80
HTTPS_PORT=443
TZ=Europe/Berlin
PUBLIC_URL=https://jitsi.example.com # <== Your domaine name here
#lets encrypt
ENABLE_LETSENCRYPT=1
LETSENCRYPT_DOMAIN=jitsi.example.com# <== Your domaine name here
LETSENCRYPT_EMAIL=mail@example.com
#benutzerauthentifizierungs
# Enable authentication
#ENABLE_AUTH=1

# Enable guest access
ENABLE_GUESTS=1

# Select authentication type: internal, jwt, ldap or matrix
#AUTH_TYPE=internal

```

#### Container Starten   


```
docker-compose up -d
```

Um den container status zu sehen.

docker-compose logs -f &lt;containername im docker compose file&gt;

### JWT Token einrichten  


Mit JWT Token kann man seine JITSI instanz sichern, ohne Benutzer zu haben.  
An die URL wir einfach

```
?jwt=meintoken
```

angegben.  
  
die .env anpassen

Wir legen folgendes fest:

```
# Enable authentication
ENABLE_AUTH=1

# Enable guest access
ENABLE_GUESTS=1

# Select authentication type: internal, jwt, ldap or matrix
AUTH_TYPE=jwt

# JWT authentication
#

# Application identifier
JWT_APP_ID=unsere__app_id  : beispiel jitsi.company


# Application secret known only to your token generator
JWT_APP_SECRET=ghsgfbva54dsgcayAas33s
```

container neustarten

docker-compose up -d

Nun den Token erstellen, dazu nehmen wir ein python script

```
import jwt
import datetime

# Ihr AppSecret
secret = 'IHR_APP_SECRET'

# Die Claims
claims = {
    "context": {
        "user": {
            "name": "Max Mustermann",
            "email": "max@example.com",
            "avatar": "https://example.com/avatar.jpg"
        }
    },
    "aud": "jitsi",
    "iss": "your_app_id",
    "sub": "meet.example.com",
    "room": "*",
    "exp": datetime.datetime.utcnow() + datetime.timedelta(days=1)
}

# Token generieren
token = jwt.encode(claims, secret, algorithm='HS256')

print(token)

```

Unser angepassten Beispiel:

Was passen wir an:

Unter User :  
Name:  
Email : lassen wir leer  
avatar : lassen wir auch leer, können aber auch ein Logo von der Firma hinterlegen muss eine http oder https url sein  
in der Funktion Exp, geben wir das Ablaufdatum in Tagen an. Ich nehme 100 Jahre (36525 Tage) :  
 "exp": datetime.datetime.utcnow() + datetime.timedelta(days=36525)

```
import jwt
import datetime

# Ihr AppSecret
secret = 'ghsgfbva54dsgcayAas33s'

# Die Claims
claims = {
    "context": {
        "user": {
            "name": "Meeting Leader",
            "email": "test@test.de",
            "avatar": "https://example.com/avatar.jpg"
        }
    },
    "aud": "jitsi",
    "iss": "jistis.company",
    "sub": "jitsi.meinedomain.",
    "room": "*",
    "exp": datetime.datetime.utcnow() + datetime.timedelta(days=36525)
}

# Token generieren
token = jwt.encode(claims, secret, algorithm='HS256')

print(token)

```

#### Benutzer anlegen