Skip to content

Minio - Objektspeicher selbst gehostet

Linux
1 1 202
  • Ich hatte mal bei Hetzner, den S3 Objekt-Speicher ausprobiert, aber da ließen sich die Benutzerrechte nicht so einstellen, wie ich mir das vorstellte. Eine Recherche im Hetzner Forum ergab, das diese Funktion wohl noch Baustelle ist. Somit habe ich mich davon verabschiedet. Da ich das Thema sehr spannend fand und es von Restic auch so unterstützt wird, sperrte ich meine Ohren auf. Irgendwann fiel dann bei einem Gespräch, das Wort Minio. So fing es an....

    Installation

    So installierte ich das mal auf eine Hetzner VM, ein Debian 12 Bookworm. Dazu ein Letsencrypt Zertifikat und der Spaß konnte beginnen. Aber, am Anfang hatte ich doch einige Probleme, das vernünftig ans Laufen zu bekommen.

    SystemD

    /lib/systemd/system/minio.service

    [Unit]
    Description=MinIO
    Documentation=https://docs.min.io
    Wants=network-online.target
    After=network-online.target
    AssertFileIsExecutable=/usr/local/bin/minio
    
    [Service]
    Type=notify
    
    WorkingDirectory=/usr/local
    
    User=minio-user
    Group=minio-user
    ProtectProc=invisible
    
    EnvironmentFile=-/etc/default/minio
    ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
    
    # Let systemd restart this service always
    Restart=always
    
    # Specifies the maximum file descriptor number that can be opened by this process
    LimitNOFILE=1048576
    
    # Turn-off memory accounting by systemd, which is buggy.
    MemoryAccounting=no
    
    # Specifies the maximum number of threads this process can create
    TasksMax=infinity
    
    # Disable timeout logic and wait until process is stopped
    TimeoutSec=infinity
    
    # Disable killing of MinIO by the kernel's OOM killer
    OOMScoreAdjust=-1000
    
    SendSIGKILL=no
    
    [Install]
    WantedBy=multi-user.target
    
    # Built for ${project.name}-${project.version} (${project.name})
    

    Mini ENV File

    Die Startparameter von Minio werden über /etc/default/minio gesteuert.

    MINIO_ROOT_USER=<USER>
    MINIO_ROOT_PASSWORD=<PASSWORD>
    
    MINIO_VOLUMES=/mnt/HC_Volume_XXXXXXXXXX/
    
    MINIO_OPTS="--address :9000 --console-address :9001 --certs-dir /home/minio/certs"
    
    MINIO_BROWSER_REDIRECT_URL=https://<DOMAIN>/minio/ui
    

    NGINX

    Das war mein Sorgenkind, doch am Ende hatte ich es hinbekommen.

    ## Upstream Block
    # API
    upstream minio_s3 {
       least_conn;
       server <DOMAIN>:9000;
    }
    
    # Webinterface
    upstream minio_console {
       least_conn;
       server <DOMAIN>:9001;
    }
    
    ## Server Block
    server {
       listen       443 ssl;
       listen  [::]:443 ssl;
       server_name  <DOMAIN>;
    
       # SSL configuration
       ssl_certificate /home/minio/certs/public.crt;
       ssl_certificate_key /home/minio/certs/private.key;
       ssl_dhparam /home/minio/certs/dhparam.pem;
    
       ssl_protocols TLSv1.3;
       ssl_prefer_server_ciphers on;
       ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    
       # Allow special characters in headers
       ignore_invalid_headers off;
       # Allow any size file to be uploaded.
       # Set to a value such as 1000m; to restrict file size to a specific value
       client_max_body_size 0;
       # Disable buffering
       proxy_buffering off;
       proxy_request_buffering off;
    
    # WebSocket-Verbindungen
    location /ws/ {
        proxy_pass http://localhost:9001/ws/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_buffering off;
    }
    
    # API      
    location / {
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_connect_timeout 300;
       # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
       proxy_http_version 1.1;
       proxy_set_header Connection "";
       chunked_transfer_encoding off;
       proxy_pass https://minio_s3; # This uses the upstream directive definition to load balance
       }
    
    # Webinterface
    location /minio/ui/ {
       rewrite ^/minio/ui/(.*) /$1 break;
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-NginX-Proxy true;
       proxy_connect_timeout 300;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       chunked_transfer_encoding off;
       proxy_pass https://minio_console;
       }
    }
    

    1505926c-57d4-45d7-974d-f66360dc3b3c-grafik.png

    Speicher

    Hetzner Objektspeicher hat da kostenmäßig deutlich die Nase vorne. Das was ich jetzt hier mache, ist deutlich teurer. Aber, dafür habe ich die volle Kontrolle. Ok, fast 🙂 Ich lege da aber sowieso nur Restic Backups ab, da kann keiner was mit anfangen (AES256 verschlüsselt). Ich hänge an die Hetzner VM ein 100GB Volume an.

    /etc/fstab

    /dev/disk/by-id/scsi-0HC_Volume_xxxxxxxxxx /mnt/HC_Volume_xxxxxxxxxxxx xfs discard,nofail,defaults 0 0
    

    XFS, weil es in der Minio Dokumentation empfohlen wird.

    Die Kosten, mit 100GB Volume und CX22 VM, liegen bei ca. 9€ im Monat.

    Viel Spaß beim Spielen 😉

  • OpenCloud - Minio Integration

    Verschoben OpenCloud opencloud linux minio
    2
    1
    0 Stimmen
    2 Beiträge
    70 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 42

    Linux fedora linux btrfs
    2
    2
    0 Stimmen
    2 Beiträge
    350 Aufrufe
    FrankMF
    Ich habe mir gestern den Cosmic Desktop angesehen. Davon abgesehen, das er noch ein sehr frühes Stadium ist, hat er mir nicht wirklich gefallen. Also heute mal die Referenz von Fedora installiert, die Workstation mit Gnome Desktop. Wer hier lange mitliest, weiß das ich kein Fanboy vom Gnome Desktop bin. Aber ich wollte unbedingt mal den Anaconda Installer sehen. Der ist richtig gut geworden und das man jetzt das Tastaturlayout für die Verschlüsselung einstellen kann, wird hoffentlich in Zukunft verhindern, das ich mit einer amerikanischen Tastatur meine Passphrase eingeben muss Da war ja vorher bei meinen Test das Problem, das ich nach Standby nicht über die Tastatur aufwecken konnte. Das war eine Einstellung im BIOS, irgendwas mit Wakeup/BIOS/USB Jetzt funktioniert das auch einwandfrei. Und zu Gnome sag ich mal nichts, ich bin da vermutlich zu alt für Ich lasse es aber mal ein paar Tage auf der Platte, vielleicht erkenne ich ja noch seinen Nutzen. Zum Schluss, das schöne an FOSS ist, wir haben die Wahl welchen Desktop wir installieren dürfen. Fedora 42 sieht gut aus und läuft rund. Jetzt mal suchen, wo ich in Gnome diese beschissene Updateverhalten ausschalten kann, was aussieht wie ein Windows. Das braucht nun wirklich niemand.
  • Intel ARC A580

    Linux linux intelarc debian
    4
    4
    0 Stimmen
    4 Beiträge
    607 Aufrufe
    FrankMF
    Zwei Monitore ausprobiert, einen 4K und einen Full-HD (HDMI). Lief einwandfrei, auch gemeinsam.
  • FrOSCon 18

    Linux froscon linux opensource
    1
    0 Stimmen
    1 Beiträge
    112 Aufrufe
    Niemand hat geantwortet
  • Restic - Kompression

    Restic restic
    2
    0 Stimmen
    2 Beiträge
    416 Aufrufe
    FrankMF
    Gestern Abend noch ein paar Tests gemacht, aber nicht wirklich Erfolg gehabt. Ok, dann heute noch mal von vorne und mit System. Als erstes muss man mal Daten finden, die man auch gut komprimieren kann, ich will ja auch ein deutliches Ergebnis sehen. Meine Wahl fiel auf einen openwrt Ordner, mit dem ich mal ein Image selber gebaut hatte. Schön viele kleine Dateien, sollte sich gut komprimieren lassen. Original [image: 1651846033957-547e3596-69df-48ac-9409-5173367afb85-grafik.png] Test mit 7z Rechtsklick, mit den Bordmittel und dann 7z gewählt. [image: 1651845865746-364b497f-cf59-408c-ba2b-cad70cc09529-grafik.png] Test mit Restic V1 Ich habe auf einer mechanischen 1TB Platte zwei Ordner angelegt, einmal Restic_V1, einmal Restic_V2. frank@frank-MS-7C37:~/Downloads$ restic version restic 0.13.1 compiled with go1.18 on linux/amd64 Init restic init -r /media/1TB/Restic_V1/ Backup frank@frank-MS-7C37:~/Downloads$ restic -r /media/1TB/Restic_V1/ backup /home/frank/openwrt/ enter password for repository: repository 731db857 opened successfully, password is correct created new cache in /home/frank/.cache/restic no parent snapshot found, will read all files Files: 407839 new, 0 changed, 0 unmodified Dirs: 41286 new, 0 changed, 0 unmodified Added to the repo: 7.851 GiB processed 407839 files, 11.061 GiB in 4:49 snapshot 24cd8ef4 saved Ergebnis [image: 1651846470644-799fa3ee-5bdf-48ba-a05e-8f7f24f1c41b-grafik.png] Test mit Restic V2 frank@frank-MS-7C37:~/Downloads$ ./restic_v0.13.0-126-g26c33332_linux_amd64 version restic 0.13.1-dev (compiled manually) compiled with go1.18 on linux/amd64 Init ./restic_v0.13.0-126-g26c33332_linux_amd64 init -r /media/1TB/Restic_V2/ --repository-version 2 Backup frank@frank-MS-7C37:~/Downloads$ ./restic_v0.13.0-126-g26c33332_linux_amd64 -r /media/1TB/Restic_V2/ backup /home/frank/openwrt/ enter password for repository: repository 33c5e24c opened (repo version 2) successfully, password is correct created new cache in /home/frank/.cache/restic no parent snapshot found, will read all files Files: 407839 new, 0 changed, 0 unmodified Dirs: 41286 new, 0 changed, 0 unmodified Added to the repo: 7.835 GiB processed 407839 files, 11.061 GiB in 2:47 snapshot 474d0376 saved Ergebnis [image: 1651846653769-caafd946-1285-4e1d-8873-a3ff4141a777-grafik.png] Fazit Fassen wir es mal ein wenig zusammen. Das Original hat 12,1GB ITool Dateigröße Zeit 7z 2,2GB ca. 11:59 Restic V1 8,5GB 4:49 Restic V2 2,9GB 2:47 Man kann auch noch etwas an der Kompression einstellen, ich habe es für diesen Test auf der Standardeinstellung(?) gelassen. You can set the desired compression level by passing it to --compression (e.g. restic backup --compression max), supported are auto, max and off. Das Ergebnis sieht sehr vielversprechend aus. Es könnte den Platzverbrauch stark begrenzen, sehr wichtig für mich wenn man seine Daten in einer Cloud speichert. (Stichwort: Kosten) Und was hier auch noch schön ins Auge fällt, es ist schneller Das möchte ich hier nicht versuchen zu erklären, da ich nicht genau woran es liegt. Vermutung, ich muss wesentlich weniger Daten "schreiben". Ich freue mich extrem, diese Version produktiv einzusetzen. Mal überlegen, ob ich die Version hier auf dem Haupt-PC mal testweise nutze, ich denke das wäre spannend. @Restic-Team: Vielen Dank für dieses tolle Feature!
  • Quartz64 - SPDIF Modul

    Verschoben Quartz64 - A quartz64 linux
    2
    3
    0 Stimmen
    2 Beiträge
    343 Aufrufe
    FrankMF
    Für das bequeme Umschalten der Soundkarten kann man das Tool alsamixer benutzen. pacman -S alsa-utils Danach alsamixer [image: 1633791802992-e912744f-8f69-4b28-a50b-7ffc8a3ab399-grafik.png]
  • Wenn dir der Redis-Server flöten geht....

    Verschoben Redis linux redis
    3
    0 Stimmen
    3 Beiträge
    665 Aufrufe
    FrankMF
    So, nach einer kleinen Pause und ein wenig nachdenken ist mir doch noch was eingefallen Backports! Man so einfach! nano /etc/apt/sources.list Das folgende eintragen. # backports deb http://deb.debian.org/debian stretch-backports main Danach ein apt update Und dann schauen wir uns mal die Version an.... apt -t stretch-backports search redis-server Sorting... Done Full Text Search... Done golang-github-stvp-tempredis-dev/stretch-backports 0.0~git20160122.0.83f7aae-1~bpo9+1 all Go package to start and stop temporary redis-server processes libtest-redisserver-perl/oldstable,oldstable 0.20-1 all redis-server runner for tests python-hiredis/oldstable,oldstable 0.2.0-1+b2 amd64 redis protocol reader for Python 2.X using hiredis python3-hiredis/oldstable,oldstable 0.2.0-1+b2 amd64 redis protocol reader for Python using hiredis redis/stretch-backports 5:5.0.3-3~bpo9+2 all Persistent key-value database with network interface (metapackage) redis-server/stretch-backports 5:5.0.3-3~bpo9+2 amd64 [residual-config] Persistent key-value database with network interface Und die habe ich gestern Abend gebaut. 127.0.0.1:6379> INFO # Server redis_version:5.0.5 Ok, das schmerzt jetzt
  • NGINX

    Verschoben NGINX nginx linux
    1
    0 Stimmen
    1 Beiträge
    588 Aufrufe
    Niemand hat geantwortet