# Server - Installation mit Docker / Podman

Neben der Installation durch [Selbstkompilieren](https://docs.fab-access.org/books/fabaccess-installation/page/server-anleitung-zum-selber-kompilieren "Server - Anleitung zum selber kompilieren") oder [Installieren mit vorpaketierten Setups](https://docs.fab-access.org/books/fabaccess-installation/page/server-installation-mit-distributionspaketen-deb-rpm "Server - Installation mit Distributionspaketen (*:deb, *.rpm)") kann BFFH relativ simpel als Container appliziert werden. Wir beschreiben hier exemplarisch die Installation mit Docker. Es gibt außerdem alternative Container-Dienste wie z.B. Podman. Wir freuen uns hier über Zuarbeit in der Dokumentation.

## Intro

Es gibt prinzipiell die Wege mit Docker Compose (hierzu erstellen wir eine `docker-compose.yml` Datei) oder nutzen den simplen `docker run` Befehl.

Das in beiden Fällen dafür nötige Docker-Image können wir dabei entweder aus dem Repository per `Dockerfile` selbst erzeugen oder aus der [BFFH Container Registry](https://gitlab.com/fabinfra/fabaccess/bffh/container_registry/1395655) laden (pull).

Außerdem gibt es verschiedene Testumgebungen zum Ausprobieren, welche mehr oder weniger gepflegt sind. Diese enthalten `docker-compose.yml` Dateien.

Container bieten eine relativ generische und simple Methode, um mehrere Instanzen parallel zu betreiben, schnell zu modifizieren und wieder zu zerstören. Wir können damit relativ sauber mehrere Instanzen voneinander isolieren - zum Beispiel mehrere Produktivinstanzen oder ein Testsystem von einem Stagingsystem. Container bieten durch aus viele Möglichkeiten und Vorteile. Klare Nachteile sind der erhöhte Administrations- und Ressourcenaufwand, sowie zusätzliche Konfiguration von Firewalls, Upgrades, Deploy-Scripts oder das kompliziertere Einbinden von externen Tools - wieim Falle von BFFH beispielsweise das Einbinden von Monitoring oder Aktoren.

## Anforderungen und Kompabilität

Mindestanforderungen und kompatible Hardware finden sich [hier](https://docs.fab-access.org/books/fabaccess-installation/page/server-anforderungen-und-kompabilitat).

## Installation mit Docker

Diese Beschreibung ist für ein Ubuntu-System erstellt und ist analog anzuwenden/anzupassen für andere Systeme wie Fedora, CentOS, Arch Linux, etc.

### Docker installieren

<p class="callout info">Siehe auch [https://phoenixnap.com/kb/docker-on-raspberry-pi](https://phoenixnap.com/kb/docker-on-raspberry-pi)  
</p>

```bash
sudo apt update && sudo apt upgrade
sudo apt install ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
```

### bffh Benutzer anlegen

Ein gesonderter Nutzer wird den Container als Non-Root ausführen. Es ist ein Systembenutzer ohne eigenes Homeverzeichnis (`-s` Parameter).

```bash
sudo useradd -m -s /bin/bash bffh
```


### Docker Image erstellen mit Dockerfile

<p class="callout info">TODO</p>

### Docker Compose installieren

<p class="callout info">Siehe auch [https://dev.to/elalemanyo/how-to-install-docker-and-docker-compose-on-raspberry-pi-1mo](https://dev.to/elalemanyo/how-to-install-docker-and-docker-compose-on-raspberry-pi-1mo)</p>

```bash
sudo useradd -m -s /bin/bash bffh
```

### BFFH Git Projekt klonen

Get Docker-Compose Files `<span class="pre">git</span> <span class="pre">clone</span> <span class="pre">https://gitlab.com/fabinfra/fabaccess/dockercompose.git</span> <span class="pre">fabaccess-server</span>`

The Dockerfile is in the root directory of the main repo docker-compose.yml is available in a seperate [git repo](https://gitlab.com/fabinfra/fabaccess/dockercompose)

Edit config files in `<span class="pre">config</span>` folder to taste

Start Server with `<span class="pre">docker-compose</span> <span class="pre">up</span> <span class="pre">-d</span>`

To make it eaysier to apply youre changes in your config and keep the dockercompose uptodate, you should “fork” this respository.

### Server Logs

Wir können auch die Logs einsehen, um zu prüfen, ob alles funktioniert:

```bash
docker-compose logs
```

### Docker mit [Certbot](https://certbot.eff.org/) oder [DNSRoboCert](https://github.com/adferrand/dnsrobocert)

Mit Hilfe von Certbort oder DNSRoboCert können wir automatisch und einfach SSL-Zertifikate für BFFH und für Mosquitto erstellen.

<p class="callout info">ToDo</p>

<div class="document" id="bkmrk--1" itemscope="itemscope" itemtype="http://schema.org/Article" role="main"><div itemprop="articleBody"><div class="section" id="bkmrk--2"></div></div></div>