Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# This configures commits to ignore when running blame.
#
# Configure this locally with
# git config blame.ignoreRevsFile .git-blame-ignore-revs


# remove version from docker-compose, fix whitespaces
3dcc6a9383cd155de6b0de7aefcf31cbdbcd68fb
14 changes: 3 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,10 @@
You can find this repository here: [https://adminguide.pages.dev](https://adminguide.pages.dev).

## Contribute
Feel free to open issues / pull requests.
Please validate that your changes work as intented!
You can start the mkdocs development server by running:
```bash
sudo ./serve.sh
# or
sudo sh ./serve.sh
```
The http server is then listening on port 8000.
**Please review every script from the Internet before executing it!**
Feel free to open issues / pull requests. Please validate that your changes work as intented!
You can start the mkdocs development server by running `mkdocs serve`.

### Contribution Guidelines
Contribution Guidelines:
* Web Services are exposed to `[::1]:8000`
* Secret Environment Variables are in an env_file (and not in the `docker-compose.yml` itself, to prevent leaks) with the following format:
```shell
Expand Down
18 changes: 6 additions & 12 deletions docs/22_internal_networks.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,19 @@ sudo docker network create --subnet 172.20.255.0/24 database

## Beispielkonfiguration
In diesem Beispiel wird eine zentrale MariaDB Datenbank verwendet.
Die beiden Diensten (Nextcloud, HedgeDoc) nutzen ein docker-internes
Netzwerk zur Kommunikation mit der Datenbank.
Die beiden Dienste (Nextcloud, HedgeDoc) nutzen ein docker-internes
Netzwerk zur Kommunikation mit der Datenbank.

### MariaDB
```yaml
# /home/admin/mariadb/docker-compose.yml
version: '3.9'

services:
mariadb:
image: mariadb
image: mariadb
restart: always
env_file: .mariadb.env
volumes:
- "/srv/mariadb:/var/lib/mysql"
- "/srv/mariadb:/var/lib/mysql"
networks:
- "database"

Expand All @@ -42,8 +40,6 @@ networks:
### HedgeDoc
```yaml
# /home/admin/hedgedoc/docker-compose.yml
version: '3.9'

services:
hedgedoc:
image: quay.io/hedgedoc/hedgedoc
Expand All @@ -62,7 +58,7 @@ networks:
```

### Nextcloud
Im Falle von Nextcloud wird der `nextcloud` Container neben dem
Im Falle von Nextcloud wird der `nextcloud` Container neben dem
`database` Netzwerk auch noch in das `default` Netzwerk aufgenommen.
Dieses Netzwerk ermöglicht die Kommunikation mit der in der gleichen
Containerdefinition existierenden Redis Instanz. Wird in einem Service
Expand All @@ -71,12 +67,10 @@ wird dieser in das `default` Netzwerk aufgenommen.

```yaml
# /home/admin/nextcloud/docker-compose.yml
version: '3.9'

services:
redis:
image: redis
restart: always
restart: always

nextcloud:
image: nextcloud
Expand Down
2 changes: 1 addition & 1 deletion docs/30_backup.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Während meiner Zeit als Administrator für Linux Systeme habe ich einige Skript
[DBM](https://github.com/felbinger/dbm)). Mittlerweile verwende ich für dateibasierte Sicherungen
hauptsächlich [borg backup](https://borgbackup.readthedocs.io/en/stable/).

Im Backup des Servers sollten zumindest die Containerdefinitionen `/home/admin`
Im Backup des Servers sollten zumindest die Containerdefinitionen `/home/admin`
sowie Daten der Container (`/srv`) enthalten sein. Sofern nginx als Reverse
Proxy genutzt wird, ist auch eine Sicherung von `/etc/nginx/sites-availabe/` sinnvoll.

Expand Down
20 changes: 9 additions & 11 deletions docs/31_monitoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,21 @@

Als Monitoring verwenden wir den Prometheus Stack (
[Prometheus](https://github.com/prometheus/prometheus)
+ [Alertmanager](https://github.com/prometheus/alertmanager)
+ [Pushgateway](https://github.com/prometheus/pushgateway)) mit
+ [Alertmanager](https://github.com/prometheus/alertmanager)
+ [Pushgateway](https://github.com/prometheus/pushgateway)) mit
[Grafana](https://grafana.com/) zur Visualisierung.

Zum Erfassen der Sensordaten verwenden wir neben
[node_exporter](https://github.com/prometheus/node_exporter) (generelle Hoststatistiken),
Zum Erfassen der Sensordaten verwenden wir neben
[node_exporter](https://github.com/prometheus/node_exporter) (generelle Hoststatistiken),
[blackbox_exporter](https://github.com/prometheus/blackbox_exporter) (ICMP & HTTP Tests) und
[cAdvisor](https://github.com/google/cadvisor) (für Docker) auch Anwendungsspezifische Prometheus
Exporter (nginx, mysql, postgresql, ssh, gitlab, grafana, ...). Viele von diesen sind in
[cAdvisor](https://github.com/google/cadvisor) (für Docker) auch Anwendungsspezifische Prometheus
Exporter (nginx, mysql, postgresql, ssh, gitlab, grafana, ...). Viele von diesen sind in
[dieser Liste](https://prometheus.io/docs/instrumenting/exporters/#third-party-exporters) zu finden.

Möchte man bereitgestellte Sensordaten einer Anwendung (die sich nicht im Prometheus-Format befinden)
verarbeiten, so kann man auch einen [eigenen Exporter schreiben](https://prometheus.io/docs/instrumenting/writing_exporters/).

```yaml
version: '3.9'

services:
grafana:
image: grafana/grafana
Expand Down Expand Up @@ -98,7 +96,7 @@ alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- targets:
- 'alertmanager:9093'

scrape_configs:
Expand All @@ -108,7 +106,7 @@ scrape_configs:

- job_name: 'blackbox_exporter_http'
metrics_path: '/probe'
params:
params:
module: [http_2xx]
static_configs:
- targets:
Expand All @@ -123,7 +121,7 @@ scrape_configs:

- job_name: 'blackbox_exporter_icmp'
metrics_path: '/probe'
params:
params:
module: [icmp]
static_configs:
- targets:
Expand Down
22 changes: 11 additions & 11 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
# Startseite

Diese Informationssammlung beschreibt das von mir eingesetzten Verfahren zum
Aufsetzen eines Linux Servers mit Anwendungen in Docker Containern. Hauptsächlich
handelt es sich in meinem Fall um webbasierte Anwendungen. Diese werden mit einem
Reverse Proxy ([Traefik](https://traefik.io/) als Docker Container, oder
Diese Informationssammlung beschreibt das von mir eingesetzten Verfahren zum
Aufsetzen eines Linux Servers mit Anwendungen in Docker Containern. Hauptsächlich
handelt es sich in meinem Fall um webbasierte Anwendungen. Diese werden mit einem
Reverse Proxy ([Traefik](https://traefik.io/) als Docker Container, oder
[nginx](https://www.nginx.com/) auf dem Host) erreichbar gemacht.

## Lokales HTTP Routing
Nachdem die Anfragen den Reverse Proxy auf unserem eigenen Host erreicht haben, werden
Nachdem die Anfragen den Reverse Proxy auf unserem eigenen Host erreicht haben, werden
diese je nach verwendetem Reverse Proxy über lokal gebundene Ports oder Docker Labels
an den Container weitergeleitet, der den Dienst bereitstellt.

## Verzeichnisstruktur
Jeder bereitgestellte Dienst erhält zwei Verzeichnisse:
1. Im Verzeichnis `/home/admin/<service>` liegt die Containerdefinition (`docker-compose.yml`),
Jeder bereitgestellte Dienst erhält zwei Verzeichnisse:
1. Im Verzeichnis `/home/admin/<service>` liegt die Containerdefinition (`docker-compose.yml`),
2. die Daten des Dienstes werden im Verzeichnis `/srv/<service>` gespeichert.

### Umgebungsvariablen
Schützenswerte Umgebungsvariablen (Passwörter, API Tokens, ...) werden nicht in der
Containerdefinition abgelegt, sondern in einer separaten `env`-Datei, um die Gefahr einer
Offenlegung dieser (z. B. beim Teilen des Bildschirms) zu reduzieren. Diese werden entsprechend
Schützenswerte Umgebungsvariablen (Passwörter, API Tokens, ...) werden nicht in der
Containerdefinition abgelegt, sondern in einer separaten `env`-Datei, um die Gefahr einer
Offenlegung dieser (z. B. beim Teilen des Bildschirms) zu reduzieren. Diese werden entsprechend
des Container-Namen im docker-compose Kontext benannt.

Im folgenden Beispiel-Dienst (`service: example`, `service_name: example_srv`) würde die
Im folgenden Beispiel-Dienst (`service: example`, `service_name: example_srv`) würde die
`env`-Datei unter dem Pfad `/home/admin/example/.example_srv.env` angelegt werden.
```yaml
# /home/admin/example/docker-compose.yml
Expand Down
7 changes: 3 additions & 4 deletions docs/installation/05_base.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,9 @@ usermod -aG sudo,admin nicof2000

## Docker

Die Installation von Docker - wie in der [Docker Dokumentation](https://docs.docker.com/engine/install/debian/)
bereits sehr gut beschrieben, - verwenden wie zusätzlich einen Alias der uns den
Tippaufwand für `sudo docker compose` erspart:

Die Installation von Docker ist in der offiziellen [Dokumentation](https://docs.docker.com/engine/install/debian/)
bereits sehr gut beschrieben. Zusätzlich richten wir einen Alias ein,
um uns die wiederholte Eingabe von sudo docker compose zu ersparen.
```shell
curl -fsSL https://get.docker.com | sudo bash
echo 'alias dc="sudo docker compose "' >> ~/.bashrc
Expand Down
6 changes: 1 addition & 5 deletions docs/installation/20_traefik.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

Zunächst wird die Containerdefinition im Verzeichnis `/home/admin/traefik/docker-compose.yml` angelegt:
```yaml
version: "3.9"

service:
services:
traefik:
image: traefik:v2.9
restart: always
Expand Down Expand Up @@ -94,5 +92,3 @@ networks:
{% include-markdown "../../includes/installation/traefik/docker-network.md" %}

{% include-markdown "../../includes/installation/traefik/new.md" %}


20 changes: 9 additions & 11 deletions docs/services/arma3.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
# Arma 3 Server

Ein Arma 3 Gameserver ermöglicht es Arma 3 Spielern eine
gemeinsame Mission zu spielen. Das hier beschriebene Vorgehen
erweitert die Grundfunktionalität von LGSM (Linux Game Server
Ein Arma 3 Gameserver ermöglicht es Arma 3 Spielern eine
gemeinsame Mission zu spielen. Das hier beschriebene Vorgehen
erweitert die Grundfunktionalität von LGSM (Linux Game Server
Manager) um die benötigten Paketen für extdb3.

In diesem Beispiel wird ein Arma 3 Exile Mod Server aufgesetzt:

```yaml
version: '3.9'

services:
arma3:
image: ghcr.io/felbinger/arma3server
Expand All @@ -27,7 +25,7 @@ services:
- '2306:2306/udp' # BattleEye
volumes:
- '/srv/arma3:/home/linuxgsm'

mariadb:
image: mariadb
restart: always
Expand All @@ -46,7 +44,7 @@ mkdir /srv/arma3
chown 1000:1000 /srv/arma3
```

Anschließend können die Container gestartet werden (`docker compose up -d arma3`),
Anschließend können die Container gestartet werden (`docker compose up -d arma3`),
wodurch die Installation angestoßen wird.

Für Exile müssen nun einige Mods im Verzeichnis `/srv/arma3/serverfiles/` hinzugefügt werden:
Expand All @@ -56,8 +54,8 @@ cd /srv/arma3/serverfiles/
# download and extract mods
wget http://bravofoxtrotcompany.com/exile/@Exile-1.0.4.zip
wget http://exilemod.com/ExileServer-1.0.4a.zip
unzip @Exile-1.0.4.zip
unzip ExileServer-1.0.4a.zip
unzip @Exile-1.0.4.zip
unzip ExileServer-1.0.4a.zip
rm *.zip

# move the extracted files into the correct locations
Expand All @@ -74,7 +72,7 @@ sed -i 's/^Password = /Password = S3cr3T/' /srv/arma3/serverfiles/@ExileServer/e

# arma 3 server configs
mv /srv/arma3/serverfiles/@ExileServer/basic.cfg /srv/arma3/serverfiles/cfg/arma3server.network.cfg
mv /srv/arma3/serverfiles/@ExileServer/config.cfg /srv/arma3/serverfiles/cfg/arma3server.server.cfg
mv /srv/arma3/serverfiles/@ExileServer/config.cfg /srv/arma3/serverfiles/cfg/arma3server.server.cfg

# add mods to server startup configuration
cat <<_EOF > /srv/arma3/lgsm/config-lgsm/arma3server/arma3server.cfg
Expand All @@ -87,7 +85,7 @@ rm -r /srv/arma3/serverfiles/Arma\ 3\ Server/
rm -r /srv/arma3/serverfiles/MySQL
```

Nach einem Neustart der Container (`docker compose down && docker compose up -d`)
Nach einem Neustart der Container (`docker compose down && docker compose up -d`)
sollten diese geladen werden, falls Probleme auftreten können diese dem Serverlog
entnommen werden (`docker compose exec arma3 arma3server console`).

Expand Down
2 changes: 0 additions & 2 deletions docs/services/bookstack.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
Bookstack ist eine einfache Wiki- / KnowledgeBase Software.

```yaml
version: '3.9'

services:
mariadb:
image: mariadb
Expand Down
2 changes: 0 additions & 2 deletions docs/services/calibre.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
Calibre ist ein Programm zur Verarbeitung, Konvertierung und Verwaltung von E-Books.

```yaml
version: '3.9'

services:
calibre:
image: linuxserver/calibre-web
Expand Down
4 changes: 1 addition & 3 deletions docs/services/docky-onion.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

Um einen [tor hidden services](https://2019.www.torproject.org/docs/onion-services) mit docker zu verwenden, kann man
[docky-onion](https://github.com/use-to/docky-onion) verwenden, um jeden Dienst in [tor](https://www.torproject.org/)
erreichbar zu machen. Hier ein Beispiel: `docker-compose.yml` um [nginx](https://www.nginx.com/)
erreichbar zu machen. Hier ein Beispiel: `docker-compose.yml` um [nginx](https://www.nginx.com/)
als hidden service auf port `80` und `8080` zur verfügung zustellen:

```yaml
version: "3.9"

services:
docky-onion:
image: useto/docky-onion
Expand Down
6 changes: 2 additions & 4 deletions docs/services/gitea.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
# Gitea

Gitea ist eine webbasierte Git-Plattform, die es Benutzern ermöglicht, Code-Repositories zu hosten, zu verwalten und zu
Gitea ist eine webbasierte Git-Plattform, die es Benutzern ermöglicht, Code-Repositories zu hosten, zu verwalten und zu
teilen.

```yaml
version: '3.9'

services:
gitea:
image: gitea/gitea
image: gitea/gitea
restart: always
ports:
- "[::1]:8000:3000"
Expand Down
2 changes: 0 additions & 2 deletions docs/services/gitlab.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ GitLab ist eine Software für Code-Management und Versionierung. Außerdem biete
Zusammenarbeit in Teams wie Issue-Tracking, CI/CD-Pipelines und Wikis.

```yaml
version: '3.9'

services:
gitlab:
image: 'gitlab/gitlab-ce'
Expand Down
16 changes: 7 additions & 9 deletions docs/services/grafana.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# Grafana

Grafana ist ein Dienst, welcher zur Datenvisualisierung und Überwachung verwendet wird.
Grafana ist ein Dienst, welcher zur Datenvisualisierung und Überwachung verwendet wird.

```yaml
version: '3.9'

services:
grafana:
image: grafana/grafana
Expand Down Expand Up @@ -89,17 +87,17 @@ Entfernen Sie anschließend die Kommentarzeichen vor den Volumes in der Containe
```


Anschließend können wir den Container starten und uns unter der
Anschließend können wir den Container starten und uns unter der
angegebene Domain mit den Zugangsdaten `admin`:`admin` anmelden.

Die nächsten Schritte sind die Einrichtung von Data Sources (z. B.
[InfluxDB](https://adminguide.pages.dev/services/influxdb/),
[Prometheus](https://adminguide.pages.dev/services/prometheus/),
[Loki](https://grafana.com/oss/loki/)) und das Hinzufügen/Erstellen von
Die nächsten Schritte sind die Einrichtung von Data Sources (z. B.
[InfluxDB](https://adminguide.pages.dev/services/influxdb/),
[Prometheus](https://adminguide.pages.dev/services/prometheus/),
[Loki](https://grafana.com/oss/loki/)) und das Hinzufügen/Erstellen von
Dashboards (z. B. [Node Exporter Full](https://grafana.com/grafana/dashboards/1860-node-exporter-full/))
([siehe: officially supported datasources](https://grafana.com/docs/grafana/latest/datasources/#supported-data-sources)).

Über die Umgebungsvariable `GF_INSTALL_PLUGINS` kann eine Liste von
Über die Umgebungsvariable `GF_INSTALL_PLUGINS` kann eine Liste von
Plugins angegeben werden, welche für die Grafana Instanz aktiviert werden.

### LDAP Auth
Expand Down
2 changes: 0 additions & 2 deletions docs/services/guacamole.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ Guacamole ist ein Webanwendungsdienst, welcher es ermöglicht, über einen Webbr
zuzugreifen, ohne dass spezielle Client-Software installiert werden muss.

```yaml
version: '3.9'

services:
postgres:
image: postgres
Expand Down
Loading
Loading