No description
Find a file
2023-04-26 13:40:04 +02:00
etc/ssh Small fixes to setup script. 2022-12-23 10:14:56 +01:00
script Fix missconfigured pipe detection and getopts. 2023-04-26 13:40:04 +02:00
templates Add support for optional database names. 2023-01-18 16:54:30 +01:00
.gitignore Ignore caddy_data folder. 2022-12-24 19:47:01 +01:00
docker-compose.yml Merge compose configurations. 2022-12-23 09:43:17 +01:00
Dockerfile Initial working sql proxy setup 2022-11-11 15:43:18 +01:00
README.md Update documentation for database related options. 2023-01-18 17:26:35 +01:00
setup.sh Require y/n in setup. 2023-01-18 11:01:50 +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.
  2. Installiert den myssh Befehl nach $HOME/bin und fügt diesen ggf. zur PATH variable hinzu
  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

Der Proxy kann über docker compose gestartet werden

docker compose up -d

Proxy Konfiguration

HTTP-Proxy

Hinzufügen von Docker Containern (Hosts)

Container werden automatisch vom reverse proxy/host manager aufgegriffen wenn sie:

  1. Das Label local.web.host gesetzt haben.
  2. Im gleichen Docker-Netzwek (Default: proxy) sind.

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)

SSL Zertifikat Konfiguration

Nach starten des docker containers ist das von Caddy erstellte SSL Zertifikat in ./caddy_data/pki/authorities/local/root.crt auffindbar. Relevante Dokumentation:

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

Minimale Beispiel-Konfiguration

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. Der db Container hat die Label local.db.type und local.db.host und wird deshalb als SQL Proxy Target registriert.

version: "3.4"
services:
  db:
    image: mariadb:10.4
    labels:
      # SQL-Proxy Configuration
      # Required labels
      local.db.type: "mysql"
      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"
    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
    networks:
      - default
      - proxy

  app:
    image: some_base/image
    depends_on:
      - db
    labels:
      # HTTP-Proxy Configuration
      # Required Label
      local.web.host: "myapp.localhost"
      # "Optional" Label to set the correct port
      local.web.port: "3000"
    restart: unless-stopped
    networks:
      - default
      - proxy

networks:
  proxy:
    name: proxy
    external: true

Alternativ kann auch das default Netzwerk Überschrieben werden. Dadurch sind alle Container Teil des Netzwerks.

networks:
  default:
    name: proxy
    external: true

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

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.

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)

SQLProxy

  • EXCLUDE_USERPASS
    • DEFAULT: false
    • DESCRIPTION: Ob Nutzername und Passwort für die Authentifizierung ausgelassen werden soll.

myssh cli

Der SQL Proxy Client hat folgende Optionen:

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

myssh Umgebungsvariablen

  • SQL_PROXY_HOST
    • DEFAULT: "localhost"
    • DESCRIPTION: Setzt den Target Proxy Host