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
.envbleibtCONTAINLY_SECURE_COOKIES=false, solange du Containly über reines HTTP öffnest, zum Beispielhttp://<server-ip>:8420. Auftruesetzt du es nur hinter HTTPS. Mittrueüber reines HTTP bleibt die Seite leer oder schwarz. - In der
docker-compose.ymlersetzt du/path/to/your/compose-projectsauf 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.
- Öffne
http://<server-ip>:8420im Browser. Solange es keinen Admin gibt, erscheint das Setup-Formular. - Gib einen Benutzernamen und ein Passwort ein (du kannst es anzeigen und musst es bestätigen) und füge das Setup-Token ein.
- 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"unterports:in derdocker-compose.yml(bei docker run:-p 127.0.0.1:8420:8420). CONTAINLY_SECURE_COOKIES=truein der.envsetzen.CONTAINLY_TRUST_PROXY=truelassen, 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
- Weitere Docker-Hosts hinzufügen
- Pro-Lizenz aktivieren, wenn du mehr als 2 Hosts brauchst
- Backups einrichten