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 😉

  • Debian Bookworm 12.5 released

    Linux linux debian
    3
    0 Stimmen
    3 Beiträge
    251 Aufrufe
    FrankMF
    Und hier taucht es dann auf -> https://www.debian.org/News/2024/20240210
  • Pycharm - Nach Stromausfall startet es nicht mehr.

    Linux pycharm linux
    1
    0 Stimmen
    1 Beiträge
    144 Aufrufe
    Niemand hat geantwortet
  • Pycharm & Docker

    Verschoben Linux pycharm docker linux
    1
    4
    0 Stimmen
    1 Beiträge
    318 Aufrufe
    Niemand hat geantwortet
  • NodeBB - Update auf v1.18.6

    NodeBB nodebb nodejs linux
    1
    1
    0 Stimmen
    1 Beiträge
    169 Aufrufe
    Niemand hat geantwortet
  • Ubuntu 21.04 (Hirsute Hippo) Beta

    Linux ubuntu linux
    6
    2
    0 Stimmen
    6 Beiträge
    609 Aufrufe
    FrankMF
    Seit heute ist Ubuntu mal wieder Geschichte. Bin wieder zurück auf Linux Mint Cinnamon. Die zwei wichtigsten Gründen Wenn ich unter Ubuntu (Wayland) VLC zum TV schauen an geschmissen habe, war in unregelmäßigen Abständen das UI in mehreren Fenster aufgegangen. Blöd nur, das man das TV Bild nicht zoomen konnte. Das Hauptproblem! Ab und zu passierte es, wenn ich auf das Firefox Icon geklickt habe, das der ganze Desktop einen Freeze hatte. Incl. unbenutzbarer Tastatur und Maus. Blieb dann leider nur der Reset. Blöd nur, das das immer dann passierte, wenn man es gerade gar nicht gebrauchen konnte. Bin dann wieder auf eine hoffentlich stabilere Distribution zurück gegangen. Nun wieder als X-Desktop. Wayland ist die Zukunft, da dort die Latenzen um Längen besser sind, als unter X. Aber, es bedarf da noch einer gewissen Entwicklungszeit. Wollen wir hoffen, das mit dem nächsten Ubuntu Release die Kinderkrankheiten ausgemerzt sind. [image: 1625860783134-d74e1c43-2a70-4ef0-ace5-7d8ac2c3e99a-grafik.png]
  • Restic - Backblaze B2 Cloud Storage

    Restic backblaze linux restic
    1
    2
    0 Stimmen
    1 Beiträge
    419 Aufrufe
    Niemand hat geantwortet
  • Veracrypt Volume einhängen

    Linux linux
    1
    0 Stimmen
    1 Beiträge
    914 Aufrufe
    Niemand hat geantwortet
  • Installation von Grav & NGinx & PHP7.2

    Angeheftet Verschoben Grav grav linux
    2
    1
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    FrankMF
    Nachdem ich den ROCKPro64 jetzt auf den Mainline umgestellt habe, lief meine Testinstallation von Grav nicht mehr. Hilfreiche Sache um das Problem zu lösen -> https://gist.github.com/GhazanfarMir/03bd1f1f770a3834d47274586d46ea62 Ich bekam immer 502 Bad Gateway, Grund war ein nicht korrekt gestarteter php-pfm Service. rock64@rockpro64v2_0:/usr/local/bin$ sudo service php7.2-fpm start rock64@rockpro64v2_0:/usr/local/bin$ sudo service php7.2-fpm status ● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-08-16 20:15:20 CEST; 21s ago Docs: man:php-fpm7.2(8) Main PID: 3206 (php-fpm7.2) Status: "Processes active: 0, idle: 2, Requests: 3, slow: 0, Traffic: 0.2req/sec" Tasks: 3 (limit: 4622) CGroup: /system.slice/php7.2-fpm.service ├─3206 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf) ├─3207 php-fpm: pool www └─3208 php-fpm: pool www Aug 16 20:15:19 rockpro64v2_0 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager... Aug 16 20:15:20 rockpro64v2_0 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.