Containly installieren
Containly läuft als ein Container auf deinem eigenen Server. Mit Docker Compose ist es in rund einer Minute installiert; danach legst du den ersten Admin an und fügst deine Hosts hinzu.
Zuerst einmal umsehen?Die Demo läuft in deinem Browser mit Beispiel-Hosts. Nichts zu installieren, gelöscht, wenn du gehst.
Demo ausprobierenDie Installation im Video
Das Übersichtsvideo zeigt die Installation ab 0:21. Die Schritte unten sind dieselben, mit jedem Befehl zum Kopieren.
Das Video lädt erst nach dem Klick von YouTube (youtube-nocookie.com), auf Englisch mit Untertiteln. Auf YouTube ansehen
Voraussetzungen
- Ein Linux-Host mit Docker Engine und Docker Compose v2 (der Befehl
docker compose). - Ein 64-Bit-System: Das Image gibt es für linux/amd64 und linux/arm64.
- Ein freier Port, standardmässig 8420.
Containly spricht mit dem Docker-Socket, und das entspricht Root-Rechten auf dem Host. Lies die Sicherheitshinweise im README auf GitHub, bevor du es übers Internet erreichbar machst.
Mit Docker Compose installieren
Leg einen Ordner an und lade die Beispiel-Compose-Datei und die .env-Vorlage direkt unter ihren endgültigen Namen herunter:
# Compose-Datei und .env-Vorlage holen$ mkdir containly && cd containly$ REPO=https://raw.githubusercontent.com/amslertec/containly/main$ curl -fsSL $REPO/docker-compose.example.yml -o docker-compose.yml$ curl -fsSL $REPO/.env.example -o .env
Prüf vor dem ersten Start zwei Einstellungen:
- In der
.envbleibtCONTAINLY_SECURE_COOKIES=false, solange du Containly über reines HTTP öffnest. Auftruesetzt du es nur hinter HTTPS. - 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.
Dann Image ziehen, starten und das Log verfolgen:
# Image ziehen, starten, Setup-Token aus dem Log kopieren$ docker compose pull$ docker compose up -d$ docker compose logs -f containly
Erste Anmeldung
Beim ersten Start gibt es noch kein Admin-Konto. Containly 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 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. Bleibt die Seite leer oder schwarz, bist du über reines HTTP mit CONTAINLY_SECURE_COOKIES=true unterwegs: Setz den Wert auf false, starte neu und lade die Seite mit Ctrl+Shift+R neu.
Hinter einem Reverse Proxy
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. CONTAINLY_SECURE_COOKIES=truein der.envsetzen.CONTAINLY_TRUST_PROXY=truelassen, das ist der Standard, damit Containly die weitergeleiteten Header liest. Setzt duCONTAINLY_PUBLIC_URLauf deine Adresse, verlinken Benachrichtigungs-E-Mails darauf.
CONTAINLY_SECURE_COOKIES=trueCONTAINLY_TRUST_PROXY=trueCONTAINLY_PUBLIC_URL=https://containly.example.com
Für Docker-Zugriff mit minimalen Rechten enthält die Beispiel-Compose-Datei ausserdem einen gefilterten Socket-Proxy. Starte ihn mit docker compose --profile hardened up -d, leg 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.
Weitere Hosts hinzufügen
Der lokale Docker-Host ist von Anfang an verbunden. Weitere Hosts fügst du in Containly auf einem dieser Wege hinzu:
- TCP mit TLS-Client-Zertifikaten, für einen Docker-Daemon, der auf einem TLS-Port lauscht.
- SSH, für Hosts, die du per SSH erreichst.
- Der Agent, für Hosts hinter NAT oder ohne offene Ports. Containly zeigt ein Einmal-Token und ein
docker run- oder Compose-Snippet; du führst es auf dem entfernten Host aus, und der Agent verbindet sich von dort per WSS zu Containly.
Auf TCP- und SSH-Hosts verwaltet Containly Compose-Dateien über einen kleinen Helfer-Container über die normale Docker-API, dort muss also nichts von Hand installiert werden. Die Gratisversion deckt 2 Hosts ab, Pro hebt das Limit auf.
Containly aktualisieren
Containly kann sich selbst aktualisieren: Ein Klick in der App erstellt den Container mit der neuen Version neu und rollt zurück, wenn die neue Version nicht sauber startet. Auf der Kommandozeile funktioniert es wie bei jedem Compose-Dienst, aber ohne automatischen Rollback:
$ cd containly$ docker compose pull$ docker compose up -d
Das Image trägt das Tag latest und zu jeder Version eine Versionsnummer. Um auf einer Version zu bleiben, ersetzt du latest in der docker-compose.yml durch eine genaue Version.
Hinweise zu Plattformen
Containly braucht nichts Besonderes von der Plattform: Jeder Host mit Docker Engine und Docker Compose v2 funktioniert, ob Mini-PC, virtuelle Maschine, NAS oder VPS.
Auf einem Raspberry Pi nimmst du ein 64-Bit-System auf einem Pi 4 oder Pi 5; Docker zieht dann von selbst das Image für linux/arm64. Ein 32-Bit-Image gibt es nicht.