Introduzione

Minio è un popolare server di archiviazione oggetti open source compatibile con il servizio di archiviazione cloud Amazon S3. Le applicazioni che sono state configurate per comunicare con Amazon S3 possono anche essere configurate per comunicare con Minio, consentendo a Minio di essere una valida alternativa a S3 se si desidera un maggiore controllo sul server di archiviazione degli oggetti. Il servizio archivia dati non strutturati come foto, video, file di registro, backup e immagini container/VM e può persino fornire un server di archiviazione a singolo oggetto che raggruppa più unità distribuite su molti server.

Minio è scritto in Go, viene fornito con un client da riga di comando più un'interfaccia del browser e supporta un semplice servizio di coda per servizi come AMQP (Advanced Message Queuing Protocol), Elasticsearch, Redis, NATS e PostgreSQL. Per tutti questi motivi, imparare a configurare un server di archiviazione oggetti Minio può aggiungere una vasta gamma di flessibilità e utilità al progetto.

In questo tutorial, dovrai:

  • Installare il server Minio sul tuo server Ubuntu 18.04.
  • Configurare un certificato SSL/TLS utilizzando Let's Encrypt per proteggere le comunicazioni tra il server e il client.
  • Accedi all'interfaccia del browser Minio tramite HTTPS per utilizzare e amministrare il server.

Prerequisiti

Per completare questo tutorial, avrai bisogno di:

  • Un server Ubuntu 18.04 configurato con un utente sudo non root e un firewall.
  • Un nome di dominio completamente registrato. In questo tutorial, il tuo dominio sarà rappresentato come your_domain.

Se vuoi installare Minio su un server in remoto continua a leggere, altrimenti se vuoi installare Minio sul computer locale salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh nome_[email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Passaggio 1: Installare e configurare il server Minio

È possibile installare il server Minio compilando il codice sorgente o tramite un file binario. Per installarlo dal sorgente, devi avere almeno Go 1.12 installato sul tuo sistema.

In questo passaggio, installerai il server tramite il binario precompilato e successivamente configurerai il server Minio.

Se non hai aggiornato di recente il database dei pacchetti, aggiornalo ora:

sudo apt update

Quindi, scarica il file binario del server Minio dal sito Web ufficiale:

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

Riceverai un output simile al seguente:

--2020-03-17 22:21:52--  https://dl.min.io/server/minio/release/linux-amd64/minio
Resolving dl.min.io (dl.min.io)... 178.128.69.202
Connecting to dl.min.io (dl.min.io)|178.128.69.202|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 47321088 (45M) [application/octet-stream]
Saving to: ‘minio’

minio                                               100%[=================================================================================================================>]  45.13M  13.8MB/s    in 4.0s

2020-03-17 22:21:57 (11.2 MB/s) - ‘minio’ saved [47321088/47321088]

Al termine del download, un file denominato minio sarà nella directory di lavoro. Utilizzare il comando seguente per renderlo eseguibile:

sudo chmod +x minio

Ora, sposta il file nella directory /usr/local/bin in cui lo script systemd di avvio di Minio si aspetta di trovarlo:

sudo mv minio /usr/local/bin

Questo ci permetterà di scrivere un file di unità di servizio (service unit file) più avanti in questo tutorial per eseguire automaticamente Minio all'avvio.

Per motivi di sicurezza, è meglio evitare di eseguire il server Minio come root. Ciò limiterà il danno che può essere fatto al tuo sistema se compromesso. Poiché lo script systemd che utilizzerai nel passaggio 2 cerca un account utente e un gruppo chiamato minio-user, crea un nuovo utente con questo nome:

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

In questo comando, hai usato il flag -s per impostare /sbin/nologin come shell per minio-user. Questa è una shell che non consente l'accesso dell'utente, che non è necessaria per minio-user.

Successivamente, modifica la proprietà del binario Minio in minio-user:

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

Successivamente, creerai una directory in cui Minio memorizzerà i file. Questa sarà la posizione di archiviazione per i bucket che verranno utilizzati in seguito per organizzare gli oggetti archiviati sul server Minio. Questo tutorial nominerà la directory minio:

sudo mkdir /usr/local/share/minio

Assegna la proprietà di quella directory a minio-user:

sudo chown minio-user:minio-user /usr/local/share/minio

La maggior parte dei file di configurazione del server sono memorizzati nella directory /etc, quindi crea lì il tuo file di configurazione Minio:

sudo mkdir /etc/minio

Dai anche la proprietà di quella directory a minio-user:

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

Usa Nano o il tuo editor di testo preferito per creare il file di ambiente necessario per modificare la configurazione predefinita:

sudo nano /etc/default/minio

Una volta aperto il file, aggiungi le seguenti righe per impostare alcune importanti variabili di ambiente nel tuo file di ambiente:

MINIO_ACCESS_KEY="minio"
MINIO_VOLUMES="/usr/local/share/minio/"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000"
MINIO_SECRET_KEY="miniostorage"

Diamo un'occhiata a queste variabili e ai valori impostati:

  • MINIO_ACCESS_KEY: Imposta la chiave di accesso che utilizzerai per accedere all'interfaccia utente del browser Minio.
  • MINIO_SECRET_KEY: Imposta la chiave privata che utilizzerai per completare le credenziali di accesso nell'interfaccia di Minio. Questo tutorial ha impostato il valore su miniostorage, ma ti consigliamo di scegliere una password diversa e più complicata per proteggere il tuo server.
  • MINIO_VOLUMES: Identifica la directory di archiviazione creata per i bucket.
  • MINIO_OPTS: Questo cambia dove e come il server serve i dati. Il flag -C punta Minio alla directory di configurazione che dovrebbe usare, mentre il flag --address indica a Minio l'indirizzo IP e la porta a cui associarsi. Se l'indirizzo IP non viene specificato, Minio si assocerà a tutti gli indirizzi configurati sul server, inclusi localhost e tutti gli indirizzi IP relativi a Docker, quindi si consiglia di specificare direttamente l'indirizzo IP qui. Se lo desideri, la porta predefinita 9000 può essere modificata.

Infine, salva e chiudi il file di ambiente (environment) al termine delle modifiche.

Ora hai installato Minio e impostato alcune importanti variabili di ambiente. Successivamente, configurerai il server per l'esecuzione come servizio di sistema.

Passaggio 2: Installare lo script di avvio di Minio Systemd

In questo passaggio, configurerai il server Minio per essere gestito come servizio systemd.

Innanzitutto, scarica il file descrittore del servizio Minio ufficiale usando il seguente comando:

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

Riceverai un output simile al seguente:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   835  100   835    0     0   4133      0 --:--:-- --:--:-- --:--:--  4133

Al termine del download, un file denominato minio.service sarà nella directory di lavoro.

Per controllare il contenuto di minio.service prima di applicarlo, aprilo in un editor di testo per visualizzarne il contenuto:

nano minio.service

Questo sarà il contenuto del file:

[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

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=65536

# 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 file di unità di servizio avvia il server Minio utilizzando l'utente minio-user creato in precedenza. Implementa anche le variabili di ambiente impostate nell'ultimo passaggio e consente al server di essere eseguito automaticamente all'avvio.

Dopo aver esaminato il contenuto dello script, chiudi l'editor di testo.

Systemd richiede che i file di unità siano archiviati nella directory systemd di configurazione, quindi sposta il file minio.service in quella cartella con il comando mv:

sudo mv minio.service /etc/systemd/system

Quindi, eseguire il comando seguente per ricaricare tutte le unità systemd:

sudo systemctl daemon-reload

Infine, abilita Minio per l'avvio all'avvio:

sudo systemctl enable minio

Questo darà il seguente output:

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

Ora che lo script systemd è installato e configurato, è il momento di avviare il server.

Passaggio 3: Avviare il server Minio

In questo passaggio, avvierai il server e modificherai il firewall per consentire l'accesso tramite l'interfaccia del browser.

Innanzitutto, avvia il server Minio:

sudo systemctl start minio

Successivamente, verifica lo stato di Minio, l'indirizzo IP a cui è associato, l'utilizzo della memoria e altro eseguendo questo comando:

sudo systemctl status minio

Otterrai il seguente output:

● minio.service - MinIO
   Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-17 22:04:34 CET; 4s ago
     Docs: https://docs.min.io
  Process: 2176 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exit 1; fi (code=exited, status=0/SUCCESS)
 Main PID: 2180 (minio)
    Tasks: 8 (limit: 2298)
   CGroup: /system.slice/minio.service
           └─2180 /usr/local/bin/minio server -C /etc/minio --address YOUR_ADDRESS:9000 /usr/local/share/minio/

Quindi, abilitare l'accesso tramite il firewall al server Minio sulla porta configurata. In questo tutorial, la porta è 9000.

Per prima cosa aggiungi la regola:

sudo ufw allow 9000

Quindi, abilita il firewall:

sudo ufw enable

Verrà visualizzato il seguente prompt:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Premere y e ENTER per confermare. Otterrai quindi il seguente output:

Firewall is active and enabled on system startup

Minio è ora pronto per accettare il traffico, ma prima di connetterti al server, proteggerai le comunicazioni installando un certificato SSL / TLS.

Passaggio 4: Protezione dell'accesso al server Minio con un certificato TLS

In questo passaggio, proteggerai l'accesso al tuo server Minio usando una chiave privata e un certificato pubblico ottenuto da un'autorità di certificazione (CA), in questo caso Let's Encrypt. Per ottenere un certificato SSL gratuito, utilizzerai Certbot.

Innanzitutto, consenti l'accesso HTTP e HTTPS attraverso il tuo firewall. Per fare ciò, apri la porta 80, che è la porta per HTTP:

sudo ufw allow 80

Quindi, apri la porta 443 per HTTPS:

sudo ufw allow 443

Dopo aver aggiunto queste regole, controlla lo stato del tuo firewall con il seguente comando:

sudo ufw status verbose

Riceverai un output simile al seguente:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
9000                       ALLOW IN    Anywhere
443                        ALLOW IN    Anywhere
80                         ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
9000 (v6)                  ALLOW IN    Anywhere (v6)
443 (v6)                   ALLOW IN    Anywhere (v6)
80 (v6)                    ALLOW IN    Anywhere (v6)

Ciò conferma che le porte 80 e 443 sono aperte, garantendo che il server accetti le richieste da Internet.

Successivamente, installerai Certbot. Poiché Certbot mantiene un repository PPA separato, dovrai prima aggiungerlo al tuo elenco di repository prima di installare Certbot come mostrato:

Per preparare l'aggiunta del repository PPA, installare prima il pacchetto software-properties-common per la gestione dei PPA:

sudo apt install software-properties-common

Questo pacchetto fornisce alcuni script utili per l'aggiunta e la rimozione di PPA invece di farlo manualmente.

Ora aggiungi il repository Universe:

sudo add-apt-repository universe

Questo repository contiene software gratuito e open source gestito dalla comunità Ubuntu, ma non è ufficialmente gestito da Canonical, gli sviluppatori di Ubuntu. Qui è dove troveremo il repository per Certbot.

Successivamente, aggiungi il repository Certbot:

sudo add-apt-repository ppa:certbot/certbot

Riceverai il seguente output:

This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu(s).
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or ctrl-c to cancel adding it

Premere ENTER per accettare.

Quindi aggiorna l'elenco dei pacchetti:

sudo apt update

Infine, installa certbot:

sudo apt install certbot

Successivamente, utilizzerai certbot per generare un nuovo certificato SSL.

Poiché Ubuntu 18.04 non supporta ancora l'installazione automatica, utilizzerai il comando certonly e --standalone per ottenere il certificato:

sudo certbot certonly --standalone -d minio-server.your_domain

--standalone significa che questo certificato è per un server web autonomo incorporato.

Riceverai il seguente output:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

Aggiungi la tua email e premi ENTER.

Certbot ti chiederà quindi di registrarti con Let's Encrypt:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:

Digita A e premi ENTER per accettare.

Successivamente, ti verrà chiesto se desideri condividere la tua e-mail con la Electronic Frontier Foundation:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

Dopo aver risposto Y o N, le chiavi pubbliche e private verranno generate e salvate nella directory /etc/letsencrypt/live/minio-server.your_domain_name.

Quindi, copia questi due file (privkey.peme fullchain.pem) nella directory certs nella cartella di configurazione del server di Minio, che è /etc/minio in questo tutorial. Utilizzare il comando cp per copiare privkey.pem e rinominare il file private.key:

sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/privkey.pem /etc/minio/certs/private.key

Quindi fai lo stesso per fullchain.pem, nominando il risultato public.crt:

sudo cp /etc/letsencrypt/live/minio-server.your_domain_name/fullchain.pem /etc/minio/certs/public.crt

Ora, cambia la proprietà dei file in minio-user. Innanzitutto, fai questo per private.key:

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

Quindi public.crt:

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

Riavvia il server Minio, in modo che venga a conoscenza del certificato e inizi a utilizzare HTTPS:

sudo systemctl restart minio

I certificati Let's Encrypt sono validi solo per novanta giorni. Questo per incoraggiare gli utenti ad automatizzare il processo di rinnovo del certificato. Il pacchetto Certbot che hai installato aggiunge automaticamente uno script di rinnovo a /etc/cron.d. Questo script viene eseguito due volte al giorno e rinnoverà automaticamente qualsiasi certificato entro trenta giorni dalla scadenza.

Con ciò, la connessione di Minio è ora sicura e il certificato SSL TLS si rinnoverà automaticamente per te. Nel passaggio successivo, ti collegherai a Minio tramite il browser per utilizzare il server.

Passaggio 5: Connessione sicura all'interfaccia Web di Minio tramite HTTPS

In questo passaggio, ti collegherai in modo sicuro all'interfaccia Web di Minio tramite HTTPS, quindi creerai bukects e caricherai oggetti al loro interno.

Accedere all'interfaccia Web puntando il browser verso .https://minio-server.your_domain:9000

Vedrai la schermata di accesso al server Minio.

Ora accedi all'interfaccia principale inserendo le tue credenziali. Per Access Key, immettere il valore MINIO_ACCESS_KEY impostato nel file di ambiente /etc/default/minio al passaggio 1. Per Secret Key, digitare il valore impostato nel campo MINIO_SECRET_KEY dello stesso file. Dopo aver inserito le credenziali, fai clic sul pulsante direttamente sotto i campi di input.

Ti verrà quindi presentata l'interfaccia utente di Minio. Per creare un nuovo bucket in cui è possibile archiviare oggetti, fare clic sul pulsante nella parte inferiore destra dell'interfaccia principale per visualizzare due pulsanti gialli aggiuntivi.

Fai clic sul pulsante giallo centrale e inserisci un nome per il tuo nuovo bucket nel prompt, premendo il tasto ENTER per salvare la risposta. Il tuo nuovo bucket è ora pronto per essere utilizzato per la conservazione.

Nota: quando assegni un nome al tuo bucket Minio, assicurati che il tuo nome contenga solo lettere minuscole, numeri o trattini. Minio limita le convenzioni di denominazione dei bucket per essere compatibile con gli standard AWS S3.

Quando vuoi aggiungere oggetti nel bucket, fai clic sullo stesso pulsante rosso chiaro di prima e quindi fai clic sul pulsante giallo in alto per aprire un prompt di caricamento dei file.

Conclusione

Ora hai il tuo server di archiviazione oggetti Minio a cui puoi connetterti in modo sicuro dall'interfaccia web usando un certificato Let's Encrypt SSL/TLS. Opzionalmente, potresti voler guardare il client desktop Minio per FreeBSD, Linux, Mac e Windows come un modo alternativo per usare e amministrare il tuo server di archiviazione oggetti.

Ulteriori informazioni su Minio sono disponibili sul sito Web della documentazione del progetto.