Ricerca nel sito web

Come installare Metabase su Ubuntu 22.04 con Docker


Su questa pagina

  1. Prerequisiti
  2. Passaggio 1: configurazione del firewall
  3. Passaggio 2 - Installa Docker e Docker Compose
  4. Passaggio 3 - Crea il file Docker Compose per Metabase
  5. Passaggio 4 - Configurare i file dell'ambiente e avviare la metabase
  6. Passaggio 5 - Installa Nginx
  7. Passaggio 6 - Installa SSL
  8. Passaggio 7 - Configura Nginx
  9. Passaggio 8 - Installa e accedi alla metabase
  10. Passaggio 9 - Backup della metabase
  11. Passaggio 10 - Aggiorna la metabase
  12. Conclusione

Metabase è uno strumento di Business Intelligence (BI) open source basato su Java. Si collega a una serie di database e utilizza un generatore di domande per nascondere la complessità delle query SQL di grandi dimensioni che consentono di visualizzare i dati dei clienti in un formato leggibile e analizzarli. Puoi porre domande sui tuoi dati o incorporarli nella tua app per consentire ai tuoi clienti di esplorare i propri dati da soli. Può generare dashboard e visualizzazioni e inviare avvisi al tuo canale Slack. Può connettersi a molte piattaforme di database e fonti di dati, tra cui MySQL, Google Analytics, MongoDB, PostgreSQL, ClickHouse, Amazon Athena, Amazon Redshift e molti altri.

Usando Docker, imparerai come installare Metabase su un server Ubuntu 22.04.

Prerequisiti

  • A server running Ubuntu 22.04 with a minimum of 2 CPU cores and 2GB of memory. You will need to upgrade the server as per requirements.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use metabase.example.com as the domain name.

  • Metabase sends email notifications to users. We recommend you use a 3rd party Transactional mail service like Mailgun, Sendgrid, Amazon SES, or Sparkpost. The instructions in the guide will be using Amazon SES.

  • Make sure everything is updated.

    $ sudo apt update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

Passaggio 1: configurare il firewall

Il primo passo è configurare il firewall. Ubuntu viene fornito con ufw (Uncomplicated Firewall) per impostazione predefinita.

Controlla se il firewall è in esecuzione.

$ sudo ufw status

Dovresti ottenere il seguente output.

Status: inactive

Consenti porta SSH in modo che il firewall non interrompa la connessione corrente attivandola.

$ sudo ufw allow OpenSSH

Consenti anche porte HTTP e HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Abilita il firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Controlla di nuovo lo stato del firewall.

$ sudo ufw status

Dovresti vedere un output simile.

Status: active

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

Passaggio 2: installa Docker e Docker Compose

Ubuntu 22.04 viene fornito con una versione precedente di Docker. Per installare la versione più recente, importa innanzitutto la chiave GPG di Docker.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Crea un file di repository Docker.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Aggiorna l'elenco dei repository di sistema.

$ sudo apt update

Installa l'ultima versione di Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Verificare che sia in esecuzione.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-01-05 05:55:23 UTC; 2min 16s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 2116 (dockerd)
      Tasks: 8
     Memory: 22.5M
        CPU: 252ms
     CGroup: /system.slice/docker.service
             ??2116 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Per impostazione predefinita, Docker richiede i privilegi di root. Se vuoi evitare di usare sudo ogni volta che esegui il comando docker, aggiungi il tuo nome utente al gruppo docker.

$ sudo usermod -aG docker $(whoami)

Sarà necessario disconnettersi dal server e riconnettersi come lo stesso utente per abilitare questa modifica o utilizzare il seguente comando.

$ su - ${USER}

Verifica che il tuo utente sia stato aggiunto al gruppo Docker.

$ groups
navjot wheel docker

Passaggio 3: creare il file Docker Compose per Metabase

Creare una directory per Metabase.

$ mkdir ~/metabase

Crea e apri il file di composizione Docker per la modifica.

$ nano docker-compose.yml

Incolla il seguente codice al suo interno.

version: '3.9'
services:
  metabase:
    image: metabase/metabase:latest
    container_name: metabase
    hostname: metabase
    volumes:
    - /dev/urandom:/dev/random:ro
    ports:
      - 3000:3000
    environment:
      MB_DB_TYPE: postgres
      MB_DB_DBNAME: metabase
      MB_DB_PORT: 5432
      MB_DB_USER_FILE: /run/secrets/db_user
      MB_DB_PASS_FILE: /run/secrets/db_password
      MB_DB_HOST: postgres
    env_file:
      - metabase.env
    healthcheck:
      test: curl --fail -I http://localhost:3000/api/health || exit 1
      interval: 15s
      retries: 5
      start_period: 10s
      timeout: 5s
    networks:
      - metanet1
    depends_on:
      - postgres
    secrets:
      - db_password
      - db_user
  postgres:
    image: postgres:latest
    container_name: postgres
    hostname: postgres
    environment:
      POSTGRES_USER_FILE: /run/secrets/db_user
      POSTGRES_DB: metabase
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    healthcheck:
      test: ['CMD', 'pg_isready', '-U', 'postgres']
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    networks:
      - metanet1
    secrets:
      - db_password
      - db_user
networks:
  metanet1:
    driver: bridge
secrets:
   db_password:
     file: db_password.txt
   db_user:
     file: db_user.txt

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

Il file di composizione Docker precedente acquisisce l'ultima versione dell'immagine Metabase Docker ed espone l'app tramite la porta 3000. È connesso all'immagine PostgreSQL. Il nome utente e la password del database PostgreSQL sono archiviati rispettivamente nei file db_user.txt e db_password.txt.

Crea e apri il file db_user.txt per la modifica.

$ nano db_user.txt

Incolla il tuo nome utente e salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Crea e apri il file db_password.txt per la modifica.

$ nano db_password.txt

Incolla la tua password e salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Passaggio 4: configurare i file dell'ambiente e avviare la metabase

Genera una chiave di crittografia utilizzando il seguente comando.

$ openssl rand -base64 32
aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=

Copia la chiave per usarla in seguito.

Crea e apri il file metabase.env per la modifica.

$ nano metabase.env

Incolla il seguente codice al suo interno. Incolla la chiave segreta che hai generato nella variabile MB_ENCRYPTION_SECRET_KEY. Inserisci il tuo dominio Metabase incluso il protocollo https. Inserisci i tuoi dati SMTP utilizzando il provider che utilizzi. Stiamo usando Amazon SES. La variabile MB_PASSWORD_COMPLEXITY è impostata su strong, il che significa che la tua password Metabase deve avere una lunghezza minima di 8 caratteri, con 2 lettere minuscole, 2 maiuscole, 1 cifra e 1 carattere speciale.

MB_SITE_URL=https://metabase.example.com
MB_SITE_NAME="Howtoforge"



MB_EMAIL_FROM_NAME=Howtoforge
MB_EMAIL_SMTP_HOST=email-smtp.us-west-2.amazonaws.com
MB_EMAIL_SMTP_USERNAME=AWS_USERID
MB_EMAIL_SMTP_PASSWORD=AWS_KEY
MB_EMAIL_SMTP_PORT=587
MB_EMAIL_SMTP_SECURITY=starttls

MB_ENCRYPTION_SECRET_KEY=aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=
MB_ANON_TRACKING_ENABLED=false
MB_APPLICATION_NAME=Howtoforge Metabase
MB_PASSWORD_COMPLEXITY=strong

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

Avvia il contenitore Docker.

$ docker compose up -d

Puoi controllare lo stato dei contenitori usando il seguente comando.

$ watch docker ps

Riceverai un output simile. Attendi che lo stato di entrambi i contenitori diventi integro, quindi premi Ctrl + C per uscire dalla schermata.

CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS                   PORTS                                       NAMES
15698ae2de6a   metabase/metabase:latest   "/app/run_metabase.sh"   2 minutes ago   Up 2 minutes (healthy)   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   metabase
ee2d03dc3a00   postgres:latest            "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes (healthy)   5432/tcp                                    postgres

Passaggio 5: installa Nginx

Ubuntu 22.04 viene fornito con una versione precedente di Nginx. Per installare l'ultima versione, devi scaricare il repository Nginx ufficiale.

Importa la chiave di firma Nginxs.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Aggiungi il repository per la versione stabile di Nginxs.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Aggiorna i repository di sistema.

$ sudo apt update

Installa Nginx.

$ sudo apt install nginx

Verificare l'installazione.

$ nginx -v
nginx version: nginx/1.22.1

Avvia il server Nginx.

$ sudo systemctl start nginx

Controlla lo stato del server.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-01-05 07:21:46 UTC; 1s ago
       Docs: https://nginx.org/en/docs/
    Process: 13197 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 13198 (nginx)
      Tasks: 3 (limit: 2237)
     Memory: 2.6M
        CPU: 7ms
     CGroup: /system.slice/nginx.service
             ??13198 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??13199 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??13200 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Jan 05 07:21:46 metabase systemd[1]: Starting nginx - high performance web server...
Jan 05 07:21:46 metabase systemd[1]: Started nginx - high performance web server.

Passaggio 6: installa SSL

Dobbiamo installare Certbot per generare il certificato SSL. Puoi installare Certbot usando il repository Ubuntus o prendere l'ultima versione usando lo strumento Snapd. Useremo la versione Snapd.

Ubuntu 22.04 viene fornito con Snapd installato per impostazione predefinita. Esegui i seguenti comandi per assicurarti che la tua versione di Snapd sia aggiornata. 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

Eseguire il seguente comando per generare un certificato SSL.

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

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

Genera un certificato di gruppo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Esegui un'esecuzione a secco del processo per verificare se il rinnovo SSL funziona correttamente.

$ sudo certbot renew --dry-run

Se non vedi errori, sei a posto. Il tuo certificato si rinnoverà automaticamente.

Passaggio 7: configurare Nginx

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf

Aggiungi la riga seguente prima della riga include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

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

Crea e apri il file /etc/nginx/conf.d/metabase.conf per la modifica.

$ sudo nano /etc/nginx/conf.d/metabase.conf

Incolla il seguente codice al suo interno.

server {
  # Redirect any http requests to https
  listen         80;
  listen         [::]:80;
  server_name    metabase.example.com;
  return 301     https://$host$request_uri;
}

server {
  listen                    443 ssl http2;
  listen                    [::]:443 ssl http2;
  server_name               metabase.example.com;

  access_log                /var/log/nginx/metabase.access.log;
  error_log                 /var/log/nginx/metabase.error.log;

  # TLS configuration
  ssl_certificate           /etc/letsencrypt/live/metabase.example.com/fullchain.pem;
  ssl_certificate_key       /etc/letsencrypt/live/metabase.example.com/privkey.pem;
  ssl_trusted_certificate   /etc/letsencrypt/live/metabase.example.com/chain.pem;
  ssl_protocols             TLSv1.2 TLSv1.3;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_session_cache         shared:SSL:50m;
  ssl_session_timeout       1d;

  # OCSP Stapling ---
  # fetch OCSP records from URL in ssl_certificate and cache them
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header	    X-Forwarded-Host $http_host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass              http://127.0.0.1:3000;
  }
}

Una volta terminato, salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Verificare la sintassi del file di configurazione Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Riavvia il server Nginx.

$ sudo systemctl restart nginx

Passaggio 8: installazione e accesso alla metabase

Apri l'URL https://metabase.example.com per avviare l'installazione guidata di Metabase.

Fare clic sul pulsante Iniziamo per procedere al passaggio successivo. La pagina successiva avrà diversi passaggi elencati. Scegli la lingua e fai clic su Avanti per procedere.

Inserisci i dettagli dell'amministratore di Metabase.

Successivamente, ti verrà chiesto di aggiungere dati alla metabase da esplorare. Puoi aggiungere i dati ora o farlo in un secondo momento.

Fare clic su Aggiungerò i miei dati più tardi per procedere.

Deseleziona il segno di spunta Consenti alla metabase di raccogliere in modo anonimo gli eventi di utilizzo e fai clic sul pulsante Fine per completare il processo.

Fare clic sul pulsante Portami a Metabase per avviare il dashboard di Metabase.

Puoi iniziare a utilizzare Metabase ora.

Passaggio 9: backup della metabase

Se si desidera eseguire il backup del database Metabase, utilizzare il seguente comando.

$ docker exec -t postgres pg_dumpall -c -U navjot > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

Sostituisci navjot con il nome utente del tuo database e postgres con il nome del tuo contenitore docker per PostgreSQL.

Per ripristinare il database, utilizzare il seguente comando.

$ cat dump_*.sql | docker exec -i your-db-container psql -U navjot

Passaggio 10: aggiornare la metabase

L'aggiornamento di Metabase richiede diversi passaggi. Il primo passaggio consiste nell'eseguire il backup del database Metabase utilizzando il comando del passaggio 9.

Quindi, passa alla directory.

$ cd /opt/metabase

Estrai le ultime immagini del container per Mastodon.

$ docker compose pull metabase/metabase:latest

Apporta eventuali modifiche in docker-compose.yml se lo desideri.

Riavvia i contenitori Mastodon.

$ docker compose up -d

Le istruzioni di cui sopra sono istruzioni di aggiornamento generiche. Controlla sempre la pagina delle versioni di GitHub di Mastodon per cercare attività e comandi di aggiornamento specifici tra le versioni per assicurarti che tutto vada liscio.

Conclusione

Questo conclude il nostro tutorial sull'installazione di Metabase su un server Ubuntu 22.04. Se hai domande, pubblicale nei commenti qui sotto.