Skip to content

Minio - Objektspeicher selbst gehostet

Linux
1 1 228
  • 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 😉

  • Firefox 141 has been released.

    Uncategorized linux opensource freesoftware
    2
    0 Stimmen
    2 Beiträge
    27 Aufrufe
    frankm@nrw.socialF
    @fosspost Juhu "On Linux, Firefox uses less memory and no longer requires a forced restart after an update has been applied by a package manager."
  • 0 Stimmen
    1 Beiträge
    18 Aufrufe
    Niemand hat geantwortet
  • MongoDB - Erste Erfahrungen

    Linux mongodb linux ki-generiert
    2
    2
    0 Stimmen
    2 Beiträge
    280 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
  • Intel ARC A580

    Linux linux intelarc debian
    4
    4
    0 Stimmen
    4 Beiträge
    642 Aufrufe
    FrankMF
    Zwei Monitore ausprobiert, einen 4K und einen Full-HD (HDMI). Lief einwandfrei, auch gemeinsam.
  • HSTS - Sicherheitsmechanismus für HTTPS-Verbindungen

    Linux hsts linux https
    1
    0 Stimmen
    1 Beiträge
    119 Aufrufe
    Niemand hat geantwortet
  • Restic v0.16.0 released

    Restic restic linux
    1
    0 Stimmen
    1 Beiträge
    162 Aufrufe
    Niemand hat geantwortet
  • Restic v0.13.1 released

    Restic restic
    1
    0 Stimmen
    1 Beiträge
    161 Aufrufe
    Niemand hat geantwortet
  • checkmk - Rest-Server überwachen

    Verschoben checkmk checkmk linux restic
    1
    3
    0 Stimmen
    1 Beiträge
    793 Aufrufe
    Niemand hat geantwortet