Go to file
2022-12-23 10:14:56 +01:00
etc/ssh Small fixes to setup script. 2022-12-23 10:14:56 +01:00
script Semi working myssh script. 2022-12-22 17:12:23 +01:00
templates [WIP] Configure SQL Proxy 2022-12-21 19:30:38 +01:00
.gitignore Small fixes to setup script. 2022-12-23 10:14:56 +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 README documentation to reference labels 2022-12-21 19:43:49 +01:00
setup.sh Small fixes to setup script. 2022-12-23 10:14:56 +01:00

Starten des Reverse-Proxies

Der Proxy kann über docker compose gestartet werden

docker compose up -d

Hinzufügen von Docker Containern

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.

Optional kann über das Label local.web.port der gebundene Port gesetzt werden (Default: 80)

Minimale Beispiel-Konfiguration

In diesem Beispiel sind zwei Container, nur der app Kontainer ist teil des proxy Netzwerks, der db Container ist nicht im proxy Netzwerk.

version: "3.4"
services:
  db:
    image: mariadb:10.4
    labels:
      # Required labels
      local.db.type: "mysql"
      local.db.host: "db_host"
      # Optional labels
      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

  app:
    image: some_base/image
    depends_on:
      - db
    labels:
      local.web.host: "app_host"
      local.web.port: "3000"
    restart: unless-stopped
    networks:
      - 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

SSL Zertifikat Konfiguration

Nach starten des docker containers ist das von caddy erstellte SSL Zertifikat in './caddy_data/pki/authorities/local/root.crt' gefunden werden. Relevante Dokumentation:

SQL Proxy

Initiales Setup

Öffne ein Terminal und führe die sqlproxy_setup.sh Datei aus. Das Script:

  1. Installiert den myssh befehl nach $HOME/bin und fügt diesen ggf zur PATH variable hinzu
  2. Erstellt SSH Keys für den SSH Docker Container (wenn diese nicht bereits existieren)
  3. Erstellt und Konfiguriert einen Client SSH Key, dessen public Key wird dem SSH Docker Container hinzugefügt

Starten des Reverse-Proxies

Der SQL Proxy kann über docker compose gestartet werden

docker compose -f docker-compose.yml -f docker-compose-sqlproxy.yml up -d

Hinzufügen von DB Docker Containern

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

  1. Die Umgebungsvariable local.db.type 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 psql: 5432)

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
  • SQL_PROXY_DB_PORT
    • DEFAULT: sql: "3306", psql: "5432"
    • DESCRIPTION: Setzt den DB Host Target Port
  • SQL_CLI_TEMPLATE
    • DEFAULT LINUX: 'mysql --protocol=TCP -u $MYSQL_USERNAME -p$MYSQL_PASSWORD -h localhost -P 3306'
    • DEFAULT MACOS: 'open \"mysql://$MYSQL_USERNAME:$MYSQL_PASSWORD@localhost:3306\" -a \"Sequel Ace\"'
    • DESCRIPTION: Setzt den auszuführenden Datenbank-Client Befehl

Hostman Umgebugsvariablen (für docker compose)

  • DOCKER_SOCK_PATH
    • DEFAULT: "/tmp/docker.sock"
    • DESCRIPTION: Docker Socket Pfad
  • NETWORK_NAME
    • DEFAULT: "proxy"
    • DESCRIPTION: Docker netzwerk in dem nach Containern gesucht wird
  • 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.
  • HOST_CONF_PATH
    • DEFAULT: "/tmp/hosts"
    • DESCRIPTION: hosts Datei-Pfad
  • DOCKER_HOSTNAME_VAR
    • DEFAULT: "VIRTUAL_HOST"
    • DESCRIPTION: Docker Container Umgebungsvariable die den Hostnamen bestimmt