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 Debian 10.
- 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 Debian 10 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 il compilatore GCC 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 root@IP_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_utente@IP_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 nome_utente@IP_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 suminiostorage
, 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, inclusilocalhost
e tutti gli indirizzi IP relativi a Docker, quindi si consiglia di specificare direttamente l'indirizzo IP qui. Se lo desideri, la porta predefinita9000
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 Thu 2020-03-19 00:26:30 CET; 2s ago
Docs: https://docs.min.io
Process: 11242 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: 11243 (minio)
Tasks: 8 (limit: 2301)
Memory: 148.8M
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 UFW, se attivo, 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.
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.
Note: Packages are only provided for currently supported Ubuntu releases.
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é Debian 10 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.pem
e 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.