Zum Inhalt springen
Containly

Containly installieren

Containly mit Docker Compose oder docker run installieren, den ersten Admin mit dem Setup-Token anlegen und hinter einen Reverse Proxy stellen.

Containly läuft als ein Container auf einem Linux-Host mit Docker Engine und Docker Compose v2. Das Image heisst amslertec/containly und ist für linux/amd64 und linux/arm64 veröffentlicht. Ein Mini-PC, eine virtuelle Maschine, ein VPS oder ein Raspberry Pi 4 oder 5 mit 64-Bit-System funktionieren also gleichermassen. Containly hört auf Port 8420.

Containly spricht mit dem Docker-Socket, und das entspricht Root-Rechten auf dem Host. Behandle den Zugang wie einen SSH-Zugang und lies die Sicherheitshinweise, bevor du Containly übers Internet erreichbar machst.

Beispieldateien herunterladen

Leg einen Ordner an und lade die Beispiel-Compose-Datei und die Beispiel-Umgebungsdatei direkt unter ihren endgültigen Namen herunter:

mkdir containly && cd containly
curl -fsSL https://raw.githubusercontent.com/amslertec/containly/main/docker-compose.example.yml -o docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/amslertec/containly/main/.env.example -o .env

Alle Einstellungen der App stehen in der .env; die Compose-Datei lädt sie mit env_file.

Zwei Einstellungen prüfen

  • In der .env bleibt CONTAINLY_SECURE_COOKIES=false, solange du Containly über reines HTTP öffnest, zum Beispiel http://<server-ip>:8420. Auf true setzt du es nur hinter HTTPS. Mit true über reines HTTP bleibt die Seite leer oder schwarz.
  • In der docker-compose.yml ersetzt du /path/to/your/compose-projects auf beiden Seiten der Volume-Zeile durch den Ordner mit deinen Compose-Projekten. Der Pfad im Container muss derselbe sein wie auf dem Host, damit die Stack-Pfade stimmen.

Die übrigen Werte in der .env können bleiben: PORT=8420, CONTAINLY_TRUST_PROXY=true, LOG_LEVEL=info. Das Session-Secret wird beim ersten Start erzeugt und im Daten-Volume gespeichert.

Mit Docker Compose starten

docker compose pull
docker compose up -d
docker compose logs -f containly

Die Daten liegen in zwei benannten Volumes: containly-data (Datenbank, Session-Secret, Master-Schlüssel) und containly-stacks (in Containly angelegte Stacks). Sie überstehen Updates und das Neuerstellen des Containers.

Oder mit docker run starten

Wer lieber einen einzelnen Befehl nutzt: Das hier ist dasselbe Setup wie die Beispiel-Compose-Datei (im Ordner mit deiner .env ausführen):

docker run -d --name containly --restart unless-stopped \
  --security-opt no-new-privileges:true --cap-drop ALL \
  --env-file .env \
  -v containly-data:/data \
  -v containly-stacks:/stacks \
  -v /path/to/your/compose-projects:/path/to/your/compose-projects \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -p 8420:8420 \
  amslertec/containly:latest
docker logs -f containly

Der dokumentierte Weg ist die Compose-Datei; der optionale Socket-Proxy weiter unten braucht sie.

Ersten Admin anlegen

Beim ersten Start gibt es noch kein Admin-Konto. Containly läuft im Setup-Modus und schreibt ein einmaliges Setup-Token ins Log, in einem umrahmten Banner. Das Token liegt ausserdem im Volume containly-data unter /data/setup.token.

  1. Öffne http://<server-ip>:8420 im Browser. Solange es keinen Admin gibt, erscheint das Setup-Formular.
  2. Gib einen Benutzernamen und ein Passwort ein (du kannst es anzeigen und musst es bestätigen) und füge das Setup-Token ein.
  3. Absenden. Der erste Admin wird angelegt, der Setup-Modus schliesst sich endgültig und das Token wird gelöscht.

Schalte danach die Zwei-Faktor-Anmeldung für dein Konto ein.

Hinter einen Reverse Proxy stellen

Für den Zugriff von ausserhalb deines Netzwerks gehört ein Reverse Proxy mit TLS vor Containly, zum Beispiel Traefik, Caddy oder nginx. Dazu änderst du diese Einstellungen:

  • Den Port nur an den Host binden: "127.0.0.1:8420:8420" unter ports: in der docker-compose.yml (bei docker run: -p 127.0.0.1:8420:8420).
  • CONTAINLY_SECURE_COOKIES=true in der .env setzen.
  • CONTAINLY_TRUST_PROXY=true lassen, damit Containly die weitergeleiteten Header liest.
  • Optional: CONTAINLY_PUBLIC_URL=https://containly.example.com. Benachrichtigungs-E-Mails verlinken dann auf diese Adresse.
CONTAINLY_SECURE_COOKIES=true
CONTAINLY_TRUST_PROXY=true
CONTAINLY_PUBLIC_URL=https://containly.example.com

Nach einer Änderung an der .env mit docker compose up -d neu starten.

Optional: gefilterter Socket-Proxy

Für Docker-Zugriff mit minimalen Rechten enthält die Beispiel-Compose-Datei einen gefilterten Socket-Proxy (Profil hardened):

docker compose --profile hardened up -d

Leg danach in Containly einen TCP-Endpunkt auf socket-proxy:2375 an und entferne den direkten Socket-Mount beim Dienst containly. Dieser Port ist nur im internen Compose-Netzwerk erreichbar; veröffentliche den reinen Port 2375 nie.

Wie weiter