Ricerca nel sito web

Come installare e configurare il server di archiviazione oggetti compatibile con S3 utilizzando Minio su Ubuntu 20.04


Su questa pagina

  1. Prerequisiti
  2. Passaggio 1 - Installa Minio Server
  3. Passaggio 2: preparazione del disco di archiviazione degli oggetti
  4. Passaggio 3 - Configura Minio
  5. Passaggio 4 - Installa il servizio Minio
  6. Passaggio 5 - Avvia Minio Server
  7. Passaggio 6 - Proteggi Minio utilizzando SSL
  8. Passaggio 7: connessione a Minio e impostazione dei bucket
  9. Passaggio 8 - Installa Minio Client e accedi ai file
  10. Conclusione

L'object storage è l'archiviazione e il recupero di BLOB non strutturati di dati e metadati utilizzando un'API HTTP. Invece di archiviare i file in modo convenzionale suddividendoli in blocchi da archiviare su disco utilizzando un filesystem, ci occupiamo di interi oggetti archiviati sulla rete. Questi oggetti possono essere un'immagine, un video, registri, file HTML, backup, immagini contenitore o qualsiasi blob di byte autonomo. Non sono strutturati perché non seguono alcuno schema o formato specifico.

Minio è un popolare server di storage di oggetti open source, self-hosted, compatibile con Amazon S3. Minio è scritto in Go, viene fornito con client indipendenti dal sistema operativo e un'interfaccia browser. In questo tutorial, installerai il server Minio su un server Ubuntu 20.04, lo proteggerai utilizzando un certificato SSL da Lets Encrypt e accederai utilizzando un client a riga di comando.

Prerequisiti

  • An Ubuntu 20.04 server with a non-root user with sudo privileges.
  • A fully registered domain name, minio.example.com.
  • An Ubuntu 20.04 machine to act as a client.
  • The system is updated.

    $ sudo apt update
    
  • Few packages that your system needs.

    $ sudo apt install wget curl nano ufw software-properties-common apt-transport-https ca-certificates -y
    

    Some of these packages may already be installed on your system.

Passo 1 - Installa Minio Server

Minio, essendo scritto in Go, viene fornito come un semplice file binario. Scarica il file binario dal sito ufficiale di Minios.

$ wget https://dl.min.io/server/minio/release/linux-amd64/minio

Rendi il file eseguibile.

$ chmod +x minio

Sposta il file binario nella directory /usr/local/bin.

$ sudo mv minio /usr/local/bin

Verificare l'installazione.

$ minio --version
minio version RELEASE.2022-01-28T02-28-16Z

Passaggio 2: preparare il disco di archiviazione degli oggetti

Dobbiamo preparare un dispositivo a blocchi dedicato per memorizzare gli oggetti. Il percorso per l'archiviazione può trovarsi sul tuo disco o su un secondo disco collegato al tuo server. Per il nostro tutorial, stiamo usando un disco secondario.

$ lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda      8:0    0  50G  0 disk
??sda1   8:1    0  50G  0 part /
sdb      8:16   0  50G  0 disk

Installa l'applicazione parted per creare e modificare le partizioni del disco.

$ sudo apt install parted

Esegui i seguenti comandi per montare il disco secondario nella directory /data.

$ sudo parted -s -a optimal -- /dev/sdb mklabel gpt
$ sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
$ sudo parted -s -- /dev/sdb align-check optimal 1
$ sudo mkfs.ext4 /dev/sdb1
$ echo "/dev/sdb1 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
$ sudo mkdir /data
$ sudo mount -a

Passo 3 - Configura Minio

Il server Minio non dovrebbe mai essere eseguito come root per evitare danni. Pertanto, creeremo un utente e un gruppo chiamato minio-user.

$ sudo useradd -r minio-user -s /sbin/nologin

Il flag -s imposta la shell per l'account utente su /sbin/nologin, che non consente l'accesso dell'utente.

Cambia la proprietà del file binario Minio.

$ sudo chown minio-user:minio-user /usr/local/bin/minio

Assegna la proprietà della directory /data a minio-user.

$ sudo chown minio-user:minio-user /data -R

Il prossimo passo è creare un file di configurazione per Minio. Crea una directory per memorizzare il file di configurazione.

$ sudo mkdir /etc/minio

Assegna la proprietà della directory all'utente minio-user.

$ sudo chown minio-user:minio-user /etc/minio

Crea il file di ambiente per archiviare la configurazione predefinita. Questo file deve essere memorizzato nella directory /etc/default.

$ sudo nano /etc/default/minio

Incolla il codice seguente con le variabili di ambiente per definire Minio.

MINIO_ROOT_USER="minio"
MINIO_VOLUMES="/data"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000 --console-address :9001"
MINIO_ROOT_PASSWORD="miniostorage"

Controlliamo tutte le variabili e cosa fanno.

  • MINIO_ROOT_USER: imposta la chiave di accesso/utente per accedere all'interfaccia utente di Minio. Deve avere una lunghezza minima di 3 caratteri.
  • MINIO_VOLUMES: specifica la directory di archiviazione per i dati.
  • MINIO_OPTS: imposta varie opzioni per il server Minio. Il flag -C specifica la directory di configurazione creata in precedenza. Il flag --address specifica l'indirizzo IP e la porta a cui collegarsi. Se non specifichi l'indirizzo IP, Minio si collegherà a tutti gli indirizzi IP sul server, incluso localhost o qualsiasi indirizzo IP correlato a Docker. La porta predefinita è 9000. Il flag --console-address imposta la porta 9001 per la console web di Minio.
  • MINIO_ROOT_PASSWORD: imposta la chiave privata/password per accedere all'interfaccia Minio. Deve avere una lunghezza minima di 8 caratteri. Scegli una chiave segreta forte e complicata.

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Passaggio 4: installa il servizio Minio

Scarica il file del servizio Minio dal repository ufficiale di Github.

$ curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

Apri il file con l'editor Nano.

$ nano minio.service

Troverai il seguente codice.

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
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

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

Questo servizio avvia Minio utilizzando l'utente minio-user che abbiamo creato in precedenza. Utilizza /etc/default/minio come file di ambiente che abbiamo configurato nel passaggio 3. Una volta soddisfatto, chiudi il file premendo Ctrl + X e digitando Y quando richiesto.

Sposta il file di servizio nella directory /etc/systemd/system.

$ sudo mv minio.service /etc/systemd/system

Ricarica il demone del servizio.

$ sudo systemctl daemon-reload

Abilita il servizio Minio.

$ sudo systemctl enable minio
Created symlink from /etc/systemd/system/multi-user.target.wants/minio.service to /etc/systemd/system/minio.service.

Passo 5 - Avvia Minio Server

Avvia il mini server.

$ sudo systemctl start minio

Verifica lo stato.

$ sudo systemctl status minio
? minio.service - MinIO
     Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-02-01 13:30:44 UTC; 5s ago
       Docs: https://docs.min.io
    Process: 26068 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exi>
   Main PID: 26076 (minio)
      Tasks: 6
     Memory: 55.3M
     CGroup: /system.slice/minio.service
             ??26076 /usr/local/bin/minio server -C /etc/minio --address 209.208.26.129:9000 --console-address :9001 /data

Consenti le porte 9000 e 9001 utilizzando Uncomplicated Firewall (UFW).

$ sudo ufw allow 9000
$ sudo ufw allow 9001

Abilita il firewall.

$ sudo ufw enable

Apri l'URL http://your_server_ip:9001 nel browser e vedrai la seguente schermata.

Passaggio 6: proteggi Minio utilizzando SSL

Useremo Lets Encrypt per proteggere Minio. Per ottenere un certificato SSL gratuito, dobbiamo scaricare lo strumento Certbot. Useremo il programma di installazione del pacchetto Snapd per questo.

Installa il programma di installazione di Snap.

$ sudo apt install snapd

Assicurati che la tua versione di Snapd sia aggiornata.

$ sudo snap install core 
$ sudo snap refresh core

Installa Cerbot.

$ sudo snap install --classic certbot

Utilizzare il seguente comando per assicurarsi che il comando Certbot venga eseguito creando un collegamento simbolico alla directory /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Genera un certificato SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d minio.example.com

Il comando precedente scaricherà un certificato nella directory /etc/letsencrypt/live/minio.example.com sul tuo server.

Copia i file privkey.pem e fullchain.pem nella directory certs nella cartella di configurazione di Minios.

$ sudo cp /etc/letsencrypt/live/minio.example.com/privkey.pem /etc/minio/certs/private.key
$ sudo cp /etc/letsencrypt/live/minio.example.com/fullchain.pem /etc/minio/certs/public.crt

Modificare la proprietà dei certificati copiati.

$ sudo chown minio-user:minio-user /etc/minio/certs/private.key
$ sudo chown minio-user:minio-user /etc/minio/certs/public.crt

Consenti porte HTTP e HTTPS attraverso il firewall.

$ sudo ufw allow 80
$ sudo ufw allow 443

Apri il file di configurazione di Minio.

$ sudo nano /etc/default/minio

Aggiungi la seguente riga in fondo.

MINIO_SERVER_URL="https://minio.example.com:9000"

Anche se si accede alla console tramite la porta 9001, l'URL del server SSL utilizza la porta 9000 per accedere all'API Minio.

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Riavvia Mini Server.

$ sudo systemctl restart minio

Puoi accedere alla console Minio tramite l'URL https://minio.example.com:9001 nel tuo browser.

Passaggio 7: connessione a Minio e impostazione dei bucket

Accedi alla Minio Console utilizzando l'utente e la password impostati in precedenza per accedere al Minio Dashboard.

Fai clic sul pulsante Crea bucket per creare il tuo primo bucket.

Poiché stiamo installando Minio su un singolo server/disco, alcune funzionalità sono disabilitate. Immettere il nome del bucket e fare clic sul pulsante Crea bucket per procedere. Otterrai la seguente schermata una volta terminato.

Per caricare i file, fare clic sul pulsante Sfoglia e verrà visualizzata la seguente pagina.

Fare clic sul pulsante Carica file e selezionare di nuovo Carica file per aprire il browser dei file sul PC. Puoi selezionare più file contemporaneamente da caricare.

Fare clic sul pulsante del cestino per cancellare la coda di caricamento una volta terminato.

Questo è tutto per ora. Hai creato il tuo primo bucket e caricato alcuni file. Successivamente, ci connetteremo al server utilizzando un client, accederemo a questo bucket. e gestirlo.

Passaggio 8: installa Minio Client e accedi ai file

Installeremo il client della riga di comando Minios su una diversa macchina basata su Ubuntu 20.04 per il nostro scopo. Puoi anche scaricare i client desktop dalla pagina di download ufficiale di Minios.

Scarica il binario ufficiale di Minio.

$ wget https://dl.min.io/client/mc/release/linux-amd64/mc

Rendi eseguibile il file binario.

$ chmod +x mc

Sposta il file binario nella directory /usr/local/bin.

$ sudo mv mc /usr/local/bin

Verificare l'installazione.

$ mc --version
mc version RELEASE.2022-02-02T02-03-24Z

Imposta un alias per il tuo server Minio in modo da potervi accedere utilizzando un nome facilmente identificabile. Sostituisci minio e miniostorage con il nome utente e la password scelti per il server.

$ mc alias set howtoforge https://minio.example.com:9000 minio miniostorage
mc: Configuration written to `/home/<user>/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/<user>/.mc/share`.
mc: Initialized share uploads `/home/<user>/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/<user>/.mc/share/downloads.json` file.
Added `howtoforge` successfully.

Il client Minio memorizza tutte le configurazioni nella directory /home/user/.mc.

Ottieni le informazioni sul server Minio. Usiamo il sottocomando admin per questo.

$ mc admin info howtoforge
?  minio.example.com:9000
   Uptime: 2 minutes
   Version: 2022-01-28T02:28:16Z
   Network: 1/1 OK

9.6 MiB Used, 1 Bucket, 5 Objects

Per elencare tutti i bucket sotto il tuo server Minio, usa il seguente comando.

$ mc ls howtoforge
[2022-02-01 16:59:46 UTC]     0B howtoforge/

Per elencare tutti gli oggetti/file in un determinato bucket, utilizzare il seguente comando.

$ mc ls howtoforge/howtoforge
[2022-02-02 05:32:28 UTC] 2.9MiB STANDARD IMG_20160717_184947_HDR.jpg
[2022-02-02 05:32:00 UTC] 2.2MiB STANDARD IMG_20160903_220639_HDR.jpg
[2022-02-02 05:28:25 UTC] 2.4MiB STANDARD IMG_20161006_213936_HDR.jpg
[2022-02-02 05:28:07 UTC] 2.2MiB STANDARD IMG_20161015_194409_HDR.jpg
[2022-02-02 03:33:28 UTC]  25KiB STANDARD quarantine.jpg

Puoi creare un nuovo bucket utilizzando il seguente comando.

$ mc mb howtoforge/bucket2
Bucket created successfully `howtoforge/bucket2`.

Creiamo un nuovo file da copiare in questo bucket.

$ touch test.txt

Per copiare un file nel bucket appena creato, utilizza il seguente comando.

$ mc cp test.txt howtoforge/bucket2
/home/nspeaks/test.txt:    0 B / ? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????

Elenca il file appena copiato.

$ mc ls howtoforge/bucket2
[2022-02-02 07:06:44 UTC]     0B STANDARD test.txt

Puoi controllare tutti i comandi usando l'argomento --help.

$ mc --help
NAME:
  mc - MinIO Client for cloud storage and filesystems.

USAGE:
  mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]

COMMANDS:
  alias      set, remove and list aliases in configuration file
  ls         list buckets and objects
  mb         make a bucket
  rb         remove a bucket
  cp         copy objects
  mirror     synchronize object(s) to a remote site
  cat        display object contents
  head       display first 'n' lines of an object
  pipe       stream STDIN to an object
  share      generate URL for temporary access to an object
  find       search for objects
  sql        run sql queries on objects
  stat       show object metadata
  mv         move objects
  tree       list buckets and objects in a tree format
  du         summarize disk usage recursively
  retention  set retention for object(s)
  legalhold  manage legal hold for object(s)
  diff       list differences in object name, size, and date between two buckets
  rm         remove object(s)
  version    manage bucket versioning
  ilm        manage bucket lifecycle
  encrypt    manage bucket encryption config
  event      manage object notifications
  watch      listen for object notification events
  undo       undo PUT/DELETE operations
  anonymous  manage anonymous access to buckets and objects
  tag        manage tags for bucket and object(s)
  replicate  configure server side bucket replication
  admin      manage MinIO servers
  update     update mc to latest release
  support    Support related commands

GLOBAL FLAGS:
  --autocompletion              install auto-completion for your shell
  --config-dir value, -C value  path to configuration folder (default: "/home/<user>/.mc")
  --quiet, -q                   disable progress bar display
  --no-color                    disable color theme
  --json                        enable JSON lines formatted output
  --debug                       enable debug output
  --insecure                    disable SSL certificate verification
  --help, -h                    show help
  --version, -v                 print the version

TIP:
  Use 'mc --autocompletion' to enable shell autocompletion

VERSION:
  RELEASE.2022-02-02T02-03-24Z

Conclusione

Questo conclude il nostro tutorial in cui hai installato il server di archiviazione oggetti Minio su un server basato su Ubuntu 20.04. È accessibile tramite una console web protetta da un certificato SSL Lets Encrypt. Hai anche installato il client della riga di comando Minio su un'altra macchina Ubuntu per gestire e accedere al server Minio.

Se hai domande, pubblicale nei commenti qui sotto.