Skip to content

OpenCloud - Docker Compose Hetzner VM

Verschoben OpenCloud
2 1 161
  • Gestern Abend habe ich mal damit angefangen, eine OpenCloud auf einer Hetzner VM zu deployen. Die Anleitung dazu findet man -> https://docs.opencloud.eu/docs/admin/getting-started/container/docker-compose

    1. Versuch

    Mein erster Versuch ging ganz ordentlich in die Hose. Ich hatte also alle vier Domains ordentlich konfiguriert, also mit A und AAAA Eintrag. Nur die Docker Container mochten das irgendwie überhaupt nicht, weil sie kein DNS mehr hatten. Ich habe dann nach langem Suchen raus gefunden, das Hetzner in der /etc/network/interfaces.d/50-cloud-init alles auf IPv6 getrimmt hat. Auch alle DNS-Server usw. Da ich auf diesem Gebiet nicht unbedingt der Experte bin und ich eigentlich schnelle Ergebnisse sehen wollte 😉 , habe ich den Server einfach nochmal neu aufgesetzt, diesmal IPv4 only.

    2. Versuch

    So, das ganze nochmal als IPv4 only und die ganze Geschichte ging schon wesentlich besser voran. Ich habe mich weitestgehend an die Anleitung gehalten, außer das ich einen User angelegt habe, der die Docker Container deployed. Nachdem ich dann auch eine vernünftige DNS Auflösung hatte, ging das mit den LetsEncrypt Zertifikaten wie von Geisterhand 🙂

    Die Anleitung ist sehr gut, auch für Einsteiger zu verstehen. Grundkenntnisse einer Serveradministration, sollte man aber schon drauf haben.

    Die Pfade der Datenspeicherung angepasst und das Ganze deployt. Lief ohne Probleme auf Anhieb. Danach habe ich dann nftables eingerichtet, die offenen Ports sind 22, 80 und 443.

    e2c6b3de-3ca4-4b04-b23d-1bda7328e04f-grafik.png

    Danach, nachdem alles lief wie gewünscht, habe ich noch den Radicale Server aktiviert, auch dieser hat ein lokales Datengrab bekommen.

    docker compose down
    docker compose up -d
    

    Und auch das war erledigt. Kurzer Test mit Handy und Thunderbird - funktioniert alles wie erwartet.

    Was mich dann noch verwundert hat, war dass das TLS Zertifikat nur einen 128-Bit-Schlüssel benutzt.

    2215953d-938c-4be5-9dc8-29f52989d98d-grafik.png

    Die künstliche Intelligenz befragt, vieles ausprobiert, bis sie dann meinte das das in Traefik hardcodiert ist, das erst 128 benutzt wird (weil schneller). Sie meinte dann, da sollte ich einen HAProxy vorbauen usw. Das Thema durchblicke ich noch nicht 100%, so lass ich das erst mal wie es ist.

    Ein normaler NGINX davor, wäre mir sowieso lieber, weil "das kennt man".

    Ich war geizig, zum Testen habe ich einen CX22 benutzt, der aber hier für meine gedachte Anwendung (NC Ersatz für mich alleine) durchaus reichen könnte.

    So, was bleibt auf der ToDo-Liste?

    • IPv6 Integration
    • NGINX vorschalten
    • s3 Integration

    Der NGINX würde auch das Problem mit AES_256 lösen 😉

    Fazit

    Für den erfahrenen Admin ist das ruck zuck zu installieren. Läuft auch auf meiner 2vCPU (1 Benutzer) ausreichend schnell. Das werde ich aber die nächsten Tage sicherlich noch intensiv testen, wenn ich mal ein paar GB an Bildern verschiebe.

    Das was ich als nächstes Testen möchte, das ich die Daten auf meiner Minio Instanz ablegen kann.

    Feedback und Tipps immer gerne gesehen.

    Der Post kann Werbelinks enthalten 😉

  • Ich habe mich nochmal mit verschiedenen Aspekten der produktiven Installation beschäftigt. Auch ein wenig die KI befragt und dann ein paar Änderungen vorgenommen. Was hatte mich gestört? Traefik lief als root.

    Um das zu ändern, habe ich das docker-compose.yml angepasst. Ich habe auch gleich mal auf die aktuelle Version angepasst.

    services:
      traefik:
        image: traefik:v3.4.1 #3.3.1
        container_name: traefik
        user: "1000:1001"                     # 1000 = dockeruser, 1001=docker group
        cap_add:
          - NET_BIND_SERVICE                 # erlaubt Ports <1024
        restart: always
        networks:
          - opencloud-net
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./certs:/certs                   # bind-mount acme.json
          - /var/run/docker.sock:/var/run/docker.sock:ro
        command:
          - "--log.level=${TRAEFIK_LOG_LEVEL:-ERROR}"
    
          # Let's Encrypt HTTP-01 Challenge
          - "--certificatesResolvers.http.acme.email=${TRAEFIK_ACME_MAIL:-example@example.org}"
          - "--certificatesResolvers.http.acme.storage=/certs/acme.json"
          - "--certificatesResolvers.http.acme.httpChallenge.entryPoint=http"
          - "--certificatesResolvers.http.acme.caserver=${TRAEFIK_ACME_CASERVER:-https://acme-v02.api.letsencrypt.org/directory}"
    
          # Dashboard
          - "--api.dashboard=true"
    
          # Entrypoints
          - "--entryPoints.http.address=:80"
          - "--entryPoints.http.http.redirections.entryPoint.to=https"
          - "--entryPoints.http.http.redirections.entryPoint.scheme=https"
          - "--entryPoints.https.address=:443"
          - "--entryPoints.https.transport.respondingTimeouts.readTimeout=12h"
          - "--entryPoints.https.transport.respondingTimeouts.writeTimeout=12h"
          - "--entryPoints.https.transport.respondingTimeouts.idleTimeout=3m"
    
          # Docker Provider
          - "--providers.docker.endpoint=unix:///var/run/docker.sock"
          - "--providers.docker.exposedByDefault=false"
    
          # Access Log
          - "--accessLog=true"
          - "--accessLog.format=json"
          - "--accessLog.fields.headers.names.X-Request-Id=keep"
    
        labels:
          - "traefik.enable=${TRAEFIK_DASHBOARD:-false}"
          - "traefik.http.middlewares.traefik-auth.basicauth.users=${TRAEFIK_BASIC_AUTH_USERS:-admin:$$apr1$$4vqie50r$$YQAmQdtmz5n9rEALhxJ4l.}"
          - "traefik.http.routers.traefik.entrypoints=https"
          - "traefik.http.routers.traefik.rule=Host(`${TRAEFIK_DOMAIN:-traefik.opencloud.test}`)"
          - "traefik.http.routers.traefik.middlewares=traefik-auth"
          - "traefik.http.routers.traefik.tls.certresolver=http"
          - "traefik.http.routers.traefik.service=api@internal"
    
    networks:
      opencloud-net:
    
    volumes: {}
    

    Und hierzu

    - ./certs:/certs                   # bind-mount acme.json
    

    brauch es noch ein paar Anpassungen auf dem Host, also im Verzeichnis von wo wir deployen mit dem dockeruser!

    mkdir -p ./certs
    touch ./certs/acme.json
    chmod 600 ./certs/acme.json
    chown 1000:1000 ./certs/acme.json  # UID muss mit docker-compose user übereinstimmen
    

    Das klappt jetzt hier einwandfrei.

    dockeruser@opencloud:~/opencloud/deployments/examples/opencloud_full$ docker exec -it traefik id
    uid=1000 gid=1001 groups=1001
    

    Sieht soweit gut aus 😉

    Die KI meint noch das hier

    Wenn du maximale Sicherheit willst, kannst du langfristig docker-socket-proxy einsetzen. Er erlaubt Traefik nur lesenden Zugriff auf die Container-API:

    → Projektseite: Tecnativa/docker-socket-proxy

    Das muss ich aber erst noch sacken lassen und mich etwas zu einlesen.

  • FrankMF FrankM verschob dieses Thema von Linux
  • OpenCloud - Minio Integration

    Verschoben OpenCloud opencloud linux minio
    2
    1
    0 Stimmen
    2 Beiträge
    71 Aufrufe
    FrankMF
    Ich habe das wieder abgeschaltet, da es in meinem Setup zu viel der schnellen Oberfläche kaputt macht. Beide Installationen als VMs bei Hetzner. Da bleibe ich für meinen Fall, soll sowieso nur für mich und evtl. ein paar Familienmitglieder sein, bei der lokalen Speicherung. Das ist schneller und fühlt sich einfach besser an
  • Fedora erhebt KDE zur offiziellen Workstation Alternative

    Linux fedora kde plasma linux
    1
    0 Stimmen
    1 Beiträge
    173 Aufrufe
    Niemand hat geantwortet
  • MongoDB - Erste Erfahrungen

    Linux mongodb linux ki-generiert
    2
    2
    0 Stimmen
    2 Beiträge
    250 Aufrufe
    FrankMF
    So frisch von der MongoDB Front und wieder viel gelernt, weil beim Üben macht man Fehler Oben war ja mongodump & mongorestore von der KI empfohlen. Hier das wie ich es gemacht habe. mongodump frank@redis-stack:~$ mongodump -u frank -p '<password>' --host 192.168.3.9 --authenticationDatabase admin -d portfolio -o mongodump/ 2024-04-06T09:29:25.174+0200 writing portfolio.stockList to mongodump/portfolio/stockList.bson 2024-04-06T09:29:25.175+0200 writing portfolio.users to mongodump/portfolio/users.bson 2024-04-06T09:29:25.175+0200 done dumping portfolio.stockList (8 documents) 2024-04-06T09:29:25.176+0200 writing portfolio.total_sum to mongodump/portfolio/total_sum.bson 2024-04-06T09:29:25.177+0200 done dumping portfolio.total_sum (1 document) 2024-04-06T09:29:25.177+0200 writing portfolio.old_total_sum to mongodump/portfolio/old_total_sum.bson 2024-04-06T09:29:25.177+0200 writing portfolio.stocks to mongodump/portfolio/stocks.bson 2024-04-06T09:29:25.177+0200 done dumping portfolio.users (4 documents) 2024-04-06T09:29:25.178+0200 writing portfolio.settings to mongodump/portfolio/settings.bson 2024-04-06T09:29:25.178+0200 done dumping portfolio.settings (1 document) 2024-04-06T09:29:25.179+0200 done dumping portfolio.old_total_sum (1 document) 2024-04-06T09:29:25.179+0200 done dumping portfolio.stocks (34 documents) mongorestore mongorestore -u frank -p '<password>' --host 192.168.3.9 --authenticationDatabase admin -d portfolio mongodump/meineDatenbank/ Hier wird die Datensicherung mongodump/meineDatenbank/ in die neue Datenbank portfolio transferiert. Grund für das Ganze? Mich hatte der Datenbank Name meineDatenbank gestört. Benutzerrechte Jetzt der Teil wo man schnell was falsch machen kann Ich hatte also die neue Datenbank, konnte sie aber nicht lesen. Fehlten halt die Rechte. Ich hatte dann so was hier gemacht. db.updateUser("frank", { roles: [ { role: "readWrite", db: "meineDatenbank" }, { role: "readWrite", db: "portfolio" }]}) Ging auch prima, kam ein ok zurück. Nun das Problem, ich hatte beim Einrichten, den User frank als admin benutzt. Durch den oben abgesetzten Befehl (frank ist ja admin), wurden die neuen Rechte gesetzt und die Rechte als Admin entzogen!! Das war jetzt nicht wirklich das was ich gebrauchen konnte. LOL Ich hatte jetzt keine Kontrolle mehr über die DB. Das war aber nicht so wirklich kompliziert, das wieder zu ändern. Die Authentication temporär abstellen. Also /etc/mongod.conf editieren und #security: security.authorization: enabled eben mal auskommentieren. Den Daemon neustarten und anmelden an der DB. mongosh --host 192.168.3.9 Danach neuen User anlegen db.createUser({ user: "<name>", pwd: "<password>", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }) mongod.conf wieder ändern und neustarten. Danach hat man wieder eine DB mit Authentifizierung und einen neuen Admin. Ich bin diesmal, man lernt ja, anders vorgegangen. Es gibt nun einen Admin für die DB und einen User zum Benutzen der Datenbanken! So wie man es auch auf einem produktiven System auch machen würde. Wenn ich jetzt mal was an den Benutzerrechten des Users ändere, kann mir das mit dem Admin nicht mehr passieren. Hoffe ich
  • Counter-Strike 2 unter Linux?

    Allgemeine Diskussionen counter-strike steam linux
    2
    5
    0 Stimmen
    2 Beiträge
    346 Aufrufe
    FrankMF
    Ergänzungen Ich hatte Steam auch auf meinem Haupt-PC installiert, da muss es aber wieder runter. Läuft da nicht vernünftig und am PC wird auch nichts geändert. Dafür habe ich ja den anderen eingerichtet. Also, ran ans Aufräumen Installation Steam gibt es auch als Flatpak, aber das habe ich nicht getestet. Wenn es läuft, würde ich das empfehlen. Dann bleibt das System sauber. Deinstallation Das .deb Paket mit der Software Verwaltung öffnen. Auf Deinstallation klicken. Danach waren leider alle Daten noch vorhanden, als Handarbeit rm -R /home/frank/.local/share/Steam
  • HSTS - Sicherheitsmechanismus für HTTPS-Verbindungen

    Linux hsts linux https
    1
    0 Stimmen
    1 Beiträge
    104 Aufrufe
    Niemand hat geantwortet
  • EndeavourOS - ein Test

    Linux endeavouros linux
    12
    0 Stimmen
    12 Beiträge
    605 Aufrufe
    FrankMF
    Ich möchte aus Fairness Gründen hier festhalten, das die Probleme mit dem Standby in Endeavour vermutlich kein Problem der Distrubution sind. Bitte dazu folgenden Beitrag von mir lesen. https://linux-nerds.org/topic/1397/debian-bookworm-12-test/3
  • Kopia 0.7.0-rc1 Kurztest

    Kopia kopia linux
    2
    2
    0 Stimmen
    2 Beiträge
    411 Aufrufe
    FrankMF
    Nachdem ich doch ziemlich lange Snapshot Zeiten hatte, habe ich Jarek mal gefragt woran das liegt. I guess you could run it in the cloud but latency will be progressively worse because it's a chatty protocol sensitive to latency Technisch verstehe ich das nicht, aber ich habe dann mal als kurzen Test auf meine lokale SSD einen Snapshot gemacht. Der war nach 2 Minuten (ca. 11GB) fertig. Der zweite Snapshot brauchte ca. 12 Sekunden. Das hört sich schon mal viel besser an, als die Stunden. Aktuell ist der Plan den Kopia-Server im Internet zu nutzen damit beerdigt. Das scheint so nicht zu funktionieren. Ich mache da noch einen kurzen Test, diesmal Lokal auf meinem NAS.
  • Debian 10 Buster 10.5 released

    Linux debian linux
    1
    0 Stimmen
    1 Beiträge
    235 Aufrufe
    Niemand hat geantwortet