Introduzione

phpMyAdmin è uno strumento software gratuito scritto in PHP, destinato a gestire l'amministrazione di MySQL sul Web. phpMyAdmin supporta una vasta gamma di operazioni su MySQL e MariaDB. Le operazioni utilizzate di frequente (gestione di database, tabelle, colonne, relazioni, indici, utenti, autorizzazioni, ecc.) Possono essere eseguite tramite l'interfaccia utente, mentre si ha ancora la possibilità di eseguire direttamente qualsiasi istruzione SQL.

phpMyAdmin è stato creato per permettere agli utenti di interagire con MySQL attraverso un'interfaccia web.

In questa guida, vedremo come installare e proteggere phpMyAdmin con Docker Compose per gestire i database su un sistema Ubuntu 20.04 LTS Focal Fossa.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di:

Definire le variabili di ambiente

Innanzitutto, crea una directory di progetto per la tua configurazione con il comando mkdir chiamata my_app e naviga verso di essa con il comando cd:

mkdir my_app && cd my_app

Il tuo database e i contenitori di applicazioni dovranno accedere a determinate variabili di ambiente in fase di esecuzione affinché i dati dell'applicazione persistano e siano accessibili alla tua applicazione.

Invece di impostare tutti i valori nel nostro file Compose Docker (il file principale che contiene informazioni su come verranno eseguiti i nostri contenitori) possiamo impostare i valori sensibili in un file .env. Ciò impedirà a questi valori di essere copiati nei repository dei nostri progetti e di essere esposti pubblicamente.

Nella directory principale del progetto ~/my_app, crea un file chiamato .env:

nano .env

I valori che imposteremo in questo file includono una password per il nostro utente root MySQL, un nome utente e una password per un utente normale, non root, per accedere al database.

Aggiungi i seguenti nomi e valori di variabili al file. Ricorda di fornire qui i tuoi valori per ogni variabile:

MYSQL_ROOT_PASSWORD=root_password
MYSQL_USER=my_user
MYSQL_PASSWORD=user_password
~/my_app/.env

Abbiamo incluso una password per l'account amministrativo di root , nonché il nostro nome utente e la password preferiti per il nostro database dell'applicazione.

Salvare e chiudere il file al termine della modifica.

Poiché il tuo file .env contiene informazioni riservate, dovrai assicurarti che sia incluso nei tuoi progetti all'interno dei file file .gitignore e .dockerignore, che indicano a Git e Docker quali file non copiare rispettivamente nei tuoi repository Git e nelle immagini Docker.

Se hai intenzione di lavorare con Git per il controllo della versione, inizializza la tua directory di lavoro corrente come repository con git init:

git init

Quindi apri un file .gitignore:

nano .gitignore

Aggiungi .env all'interno del file:

.env
~/my_app/.gitignore

Salvare e chiudere il file al termine della modifica.

Allo stesso modo, è una buona precauzione aggiungere .env a un file .dockerignore, in modo che non finisca nei contenitori quando si utilizza questa directory come contesto di compilazione.

Apri il file:

nano .dockerignore

Aggiungi .env all'interno del file:

.env
~/my_app/.dockerignore

Puoi facoltativamente aggiungere file e directory associati allo sviluppo della tua applicazione:

.env
.git
docker-compose.yml
.dockerignore
~/my_app/.dockerignore

Salva e chiudi il file al termine.

Definire i servizi con Docker Compose

Il file docker-compose.yml conterrà le definizioni di servizio per la configurazione. Un servizio in Compose è un contenitore in esecuzione e le definizioni del servizio specificano le informazioni su come verrà eseguito ciascun contenitore.

Utilizzando Compose, è possibile definire diversi servizi per eseguire applicazioni multi-contenitore.

Per iniziare, apri il file docker-compose.yml:

nano docker-compose.yml

Aggiungi il seguente codice per definire la versione del tuo file Compose e il servizio database db:

version: '3'

services:
  db:
    image: mysql:8.0
    container_name: db
    restart: unless-stopped
    env_file: .env
    environment:
      - MYSQL_DATABASE=my_db
    volumes: 
      - dbdata:/var/lib/mysql
    command: '--default-authentication-plugin=mysql_native_password'
    networks:
      - app-network
~/my_app/docker-compose.yml

Successivamente, sotto la definizione del servizio db, aggiungere la definizione per il servizio dell'applicazione phpmyadmin:

...
  phpmyadmin:
    depends_on: 
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - 3333:80
    env_file: .env
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORT: $MYSQL_ROOT_PASSWORD
    networks:
      - app-network
~/my_app/docker-compose.yml

Infine aggiungi le definizioni di rete e volume:

...
volumes:
  dbdata:

networks:
  app-network:
    driver: bridge
~/my_app/docker-compose.yml

Il file docker-compose.yml finito sarà simile al seguente:

version: '3'

services:
  db:
    image: mysql:8.0
    container_name: db
    restart: unless-stopped
    env_file: .env
    environment:
      - MYSQL_DATABASE=my_db
    volumes: 
      - dbdata:/var/lib/mysql
    command: '--default-authentication-plugin=mysql_native_password'
    networks:
      - app-network

  phpmyadmin:
    depends_on: 
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - 3333:80
    env_file: .env
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORT: $MYSQL_ROOT_PASSWORD
    networks:
      - app-network

volumes:
  dbdata:

networks:
  app-network:
    driver: bridge
~/my_app/docker-compose.yml

Salvare e chiudere il file al termine della modifica.

Per maggiori informazioni riguardo le specifiche voci dei vari servizi leggere il tutorial dedicato all'installazione di Wordpress con Docker Compose al paragrafo "Definire i servizi con Docker Compose".

Creare i contenitori

Possiamo avviare i nostri contenitori con il comando docker-compose up, che creerà ed eseguirà i nostri contenitori nell'ordine specificato.

Creare i contenitori con il comando docker-compose up e il flag -d, verranno eseguiti in background i contenitori db e phpmyadmin:

docker-compose up -d

Vedrai un output che conferma che i tuoi servizi sono stati creati:

Creating db ... done
Creating myapp_phpmyadmin_1 ... done

Utilizzando il comando docker-compose ps, controlla lo stato dei tuoi servizi:

docker-compose ps

Dovresti visualizzare un output simile al seguente, con i servizi db e phpmyadmin con stato Up:

       Name                     Command               State          Ports
----------------------------------------------------------------------------------
db                   docker-entrypoint.sh --def ...   Up      3306/tcp, 33060/tcp
myapp_phpmyadmin_1   /docker-entrypoint.sh apac ...   Up      0.0.0.0:3333->80/tcp

Se vedete qualcosa di diverso da Up nella colonna State per i servizi db o phpmyadmin, assicurati di controllare i registri di servizio con il comando docker-compose logs:

docker-compose logs service_name

Adesso è possibile accedere a PhpMyAdmin da browser, collegarsi al proprio nome dominio da browser:

https://example.com

Conclusione

In questo tutorial abbiamo visto come installare PhpMyadmin con Docker Compose su Ubuntu 20.04 LTS Focal Fossa.

Potrebbe interessarti: Come installare WordPress con Docker Compose su Ubuntu 20.04 LTS.