AutoDevReverseProxy/README.md

172 lines
5.9 KiB
Markdown
Raw Permalink Normal View History

2023-01-06 08:53:54 +01:00
# First Steps
## Initiales Setup
Öffne ein Terminal und führe die `setup.sh` Datei aus.
Das Script:
1. Behebt Berechtigungsprobleme und legt alle nötigen Ordner/Dateien an, die zum starten des Proxies benötigt werden.
2023-01-18 15:11:10 +01:00
2. Installiert den `myssh` Befehl nach `$HOME/bin` und fügt diesen ggf. zur `PATH` variable hinzu
2023-01-06 08:53:54 +01:00
3. Erstellt SSH Keys für den SSH Docker Container (wenn diese nicht bereits existieren)
4. Erstellt und Konfiguriert einen Client SSH Key, dessen public Key wird dem SSH Docker Container hinzugefügt
## Starten des Reverse-Proxies
2022-11-04 17:37:32 +01:00
Der Proxy kann über docker compose gestartet werden
```bash
docker compose up -d
```
2023-01-06 08:53:54 +01:00
# Proxy Konfiguration
## HTTP-Proxy
### Hinzufügen von Docker Containern (Hosts)
2022-11-04 17:37:32 +01:00
Container werden automatisch vom reverse proxy/host manager aufgegriffen wenn sie:
1. Das Label `local.web.host` gesetzt haben.
2022-11-04 17:37:32 +01:00
2. Im gleichen Docker-Netzwek (Default: `proxy`) sind.
2023-01-18 15:07:50 +01:00
Einem Container können mehrere Hostnamen vergeben werden indem die gewünschten Adressen Leerzeichen Separiert dem `local.web.host` Label hinzugefügt werden.
Optional kann über das Label `local.web.port` der gebundene Port gesetzt werden (Default: 80)
2022-11-04 17:37:32 +01:00
2023-01-06 08:53:54 +01:00
### SSL Zertifikat Konfiguration
2023-01-18 15:11:10 +01:00
Nach starten des docker containers ist das von Caddy erstellte SSL Zertifikat in `./caddy_data/pki/authorities/local/root.crt` auffindbar.
2023-01-06 08:53:54 +01:00
Relevante Dokumentation:
- [MacOS](https://support.apple.com/guide/keychain-access/add-certificates-to-a-keychain-kyca2431/mac)
- [Linux](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-shared-system-certificates)
## SQL Proxy
### Hinzufügen von DB Docker Containern
Container werden automatisch vom reverse proxy/host manager aufgegriffen wenn sie:
1. Die Umgebungsvariable `local.db.type` (`mysql` oder `postgres`) und `local.db.host` gesetzt haben.
2. Im gleichen Docker-Netzwek (Default: `proxy`) sind.
Optional kann über das Label `local.web.port` der gebundene Port gesetzt werden (Default mysql: 3306, Default postgres: 5432)
### Label Liste
#### Erforderlich
- `local.db.type`
- DEFAULT: `unset`
- DESCRIPTION: Datenbank Typ. Muss auf `mysql` oder `postgres` gesetzt werden.
- `local.db.host`
- DEFAULT: `unset`
- DESCRIPTION: Der Hostname unter dem der Container registriert wird
#### Optional
- `local.db.port`
- DEFAULT (mysql): `3306`
- DEFAULT (postgres): `5432`
- DESCRIPTION: Der Datenbank Port des Zielcontainers
- `local.db.dbname`
- DEFAULT (mysql): `unset`
- DEFAULT (postgres): `postgres`
- DESCRIPTION: Name der initialen Zieldatenbank
- `local.db.user`
- DEFAULT: `unset`
- DESCRIPTION: Nutzername für den Datenbank Login
- `local.db.password`
- DEFAULT: `unset`
- DESCRIPTION: Passwort für den Datenbank Login
2022-11-04 17:37:32 +01:00
## Minimale Beispiel-Konfiguration
2023-01-06 08:53:54 +01:00
In diesem Beispiel sind zwei Container, beide sind Teil des `proxy` Netzwerks.
Der `app` Container hat das Label `local.web.host` und wird deshalb als HTTP Proxy Target registriert.
2023-01-18 15:11:10 +01:00
Der `db` Container hat die Label `local.db.type` und `local.db.host` und wird deshalb als SQL Proxy Target registriert.
2022-11-04 17:37:32 +01:00
```yaml
version: "3.4"
services:
db:
image: mariadb:10.4
labels:
2023-01-06 08:53:54 +01:00
# SQL-Proxy Configuration
# Required labels
local.db.type: "mysql"
2023-01-06 08:53:54 +01:00
local.db.host: "db.myapp.localhost"
# Optional labels
local.db.dbname: "db_name"
local.db.port: "3306"
local.db.user: "db_user"
local.db.password: "db_user_pass"
2022-11-04 17:37:32 +01:00
environment:
MYSQL_DATABASE: db_name
MYSQL_USER: db_user
MYSQL_PASSWORD: db_user_pass
MYSQL_ROOT_PASSWORD: db_root_pass
restart: unless-stopped
volumes:
- db-data:/var/lib/mysql
2023-01-06 08:53:54 +01:00
networks:
- default
- proxy
2022-11-04 17:37:32 +01:00
app:
image: some_base/image
depends_on:
- db
labels:
2023-01-06 08:53:54 +01:00
# HTTP-Proxy Configuration
# Required Label
local.web.host: "myapp.localhost"
# "Optional" Label to set the correct port
local.web.port: "3000"
2022-11-04 17:37:32 +01:00
restart: unless-stopped
networks:
2023-01-06 08:53:54 +01:00
- default
2022-11-04 17:37:32 +01:00
- proxy
networks:
proxy:
name: proxy
external: true
```
2023-01-18 15:11:10 +01:00
Alternativ kann auch das default Netzwerk Überschrieben werden. Dadurch sind alle Container Teil des Netzwerks.
2022-11-04 17:37:32 +01:00
```yaml
networks:
default:
name: proxy
external: true
```
2022-11-17 15:33:17 +01:00
2023-01-06 08:53:54 +01:00
## Fortgeschrittene Optionen (für docker compose)
### Hostman Script Umgebugsvariablen
- `DOCKER_SOCK_PATH`
- DEFAULT: `"/tmp/docker.sock"`
- DESCRIPTION: Docker Socket Pfad
- `NETWORK_NAME`
- DEFAULT: `"proxy"`
- DESCRIPTION: Docker netzwerk in dem nach Containern gesucht wird
2023-01-06 08:53:54 +01:00
### Template Spezifische Umgebungsvariablen
#### Caddy
- `DOCKER_CADDY_NAME`
- DEFAULT: `proxy`
- DESCRIPTION: Der Caddy Container-/Host-Name unter dem das Caddy Admin Interface erreichbar ist.
- `DOCKER_CADDY_PORT`
- DEFAULT: `2020`
- DESCRIPTION: Der Port des Caddy Admin Interfaces.
2023-01-06 08:53:54 +01:00
#### Hosts
- `HOST_CONF_PATH`
- DEFAULT: `"/config/hosts"`
- DESCRIPTION: hosts Datei-Pfad
- `RESOLVE_DOCKERHOST`
- DEFAULT: `false`
- DESCRIPTION: Setzt ob IP Addressen in der hosts Datei auf die der Docker Container (true) oder 127.0.0.1 (false) aufgelöst werden.
- `DOCKER_HOSTNAME_VAR`
- DEFAULT: `"LOCAL_WEB_HOST"` (entspricht: `local.web.host`)
- DESCRIPTION: Docker Container Umgebungsvariable die den Hostnamen bestimmt (das auto generierte Öabel ist lower case und verwendet Punkte statt Unterstriche)
2023-01-06 08:53:54 +01:00
#### SQLProxy
- `EXCLUDE_USERPASS`
- DEFAULT: `false`
- DESCRIPTION: Ob Nutzername und Passwort für die Authentifizierung ausgelassen werden soll.
2022-11-17 15:33:17 +01:00
2023-01-06 08:53:54 +01:00
# myssh cli
2022-11-17 15:33:17 +01:00
Der SQL Proxy Client hat folgende Optionen:
```bash
ls: Gibt eine Liste an verfügbaren DB Hosts zurück
connect $DB_HOST [-u $USERNAME ] [-p $PASSWORD]: Erstellt einen Tunnel zum DB Host, wenn Nutzername und Passwort angegeben werden wird eine DB Anwendung geöffnet
disconnect: schließt die SSH Multiplex Session und damit auch alle aktuellen Verbindungen
```
2023-01-06 08:53:54 +01:00
## myssh Umgebungsvariablen
- `SQL_PROXY_HOST`
- DEFAULT: `"localhost"`
- DESCRIPTION: Setzt den Target Proxy Host