Skip to content

OpenCloud - Docker Compose Hetzner VM

Angeheftet Verschoben OpenCloud
2 1 238
  • 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
  • FrankMF FrankM hat dieses Thema angepinnt
  • 0 Stimmen
    1 Beiträge
    15 Aufrufe
    Niemand hat geantwortet
  • Debian Bug auf Arm64

    Linux linux arm64
    1
    0 Stimmen
    1 Beiträge
    193 Aufrufe
    Niemand hat geantwortet
  • Links zu Vaultwarden

    Angeheftet Vaultwarden vaultwarden bitwarden linux
    1
    0 Stimmen
    1 Beiträge
    165 Aufrufe
    Niemand hat geantwortet
  • PHP - ChatGPT

    PHP php linux chatgpt
    1
    2
    0 Stimmen
    1 Beiträge
    160 Aufrufe
    Niemand hat geantwortet
  • Kopia

    Allgemeine Diskussionen kopia linux restic
    1
    0 Stimmen
    1 Beiträge
    320 Aufrufe
    Niemand hat geantwortet
  • Rest-Server

    Verschoben Restic rest-server linux restic
    8
    0 Stimmen
    8 Beiträge
    791 Aufrufe
    FrankMF
    Dann mal eben ausprobiert. Auf meinem Server war die Version 0.9.7 selber, mit go, gebaut. Dann mache ich das auch mit der v0.10.0 so. Aber bevor ich anfange, wird die v0.9.7 gesichert. mv /usr/local/bin/rest-server /usr/local/bin/rest-server_0_9_7 So erspare ich mir im Problemfall das selber bauen. Ok, dann die neue Version bauen. git clone https://github.com/restic/rest-server.git cd rest-server go run build.go Danach befindet sich im Verzeichnis die Binärdatei rest-server Die kopieren wir jetzt cp rest-server /usr/local/bin Danach kurzer Test # rest-server --version rest-server 0.10.0 (v0.10.0-6-g037fe06) compiled with go1.11.6 on linux/amd64 Gut Version passt Dann ein Backup gestartet. Das sichert einen Teil meines Home-Verzeichnis Files: 153 new, 100 changed, 177857 unmodified Dirs: 0 new, 1 changed, 0 unmodified Added to the repo: 81.881 MiB processed 178110 files, 80.571 GiB in 0:28 snapshot 607e0027 saved Applying Policy: keep the last 3 snapshots, 3 monthly snapshots keep 5 snapshots: ID Time Host Tags Reasons Paths --------------------------------------------------------------------------------------- fa97890e 2020-07-25 21:02:05 frank-XXX monthly snapshot /home/frank 5b073bbb 2020-08-30 10:17:27 frank-XXX monthly snapshot /home/frank f7cf37ef 2020-09-06 15:13:03 frank-XXX last snapshot /home/frank 0157462c 2020-09-13 13:32:12 frank-XXX last snapshot /home/frank 607e0027 2020-09-14 08:09:34 frank-XXX last snapshot /home/frank monthly snapshot --------------------------------------------------------------------------------------- 5 snapshots remove 1 snapshots: ID Time Host Tags Paths --------------------------------------------------------------------- 3010b7cc 2020-09-06 11:39:27 frank-XXX /home/frank --------------------------------------------------------------------- 1 snapshots 1 snapshots have been removed, running prune counting files in repo building new index for repo [1:34] 100.00% 17351 / 17351 packs So weit funktioniert das genau wie vorher. Im Changelog stand ja was von Subfoldern. Das betrifft mich nicht, weil ich für jeden User genau ein Verzeichnis habe. So mit alles Gut Dann warte ich mal morgen ab, ob die täglichen Backups der Server rund laufen.
  • nginx konfigurieren

    NodeBB nodebb nginx linux
    1
    0 Stimmen
    1 Beiträge
    660 Aufrufe
    Niemand hat geantwortet
  • NodeBB auf dem Raspberry3 B+ installieren

    RaspberryPi nodebb raspberrypi linux
    1
    0 Stimmen
    1 Beiträge
    881 Aufrufe
    Niemand hat geantwortet