Sul web ci sono a disposizione numerose guide su come installare un ambiente LAMP su Docker. Eppure serve questa guida, dato che le altre non funzionano su Raspberry Pi OS. Perché?
Perché su Docker per Raspberry manca la M. Infatti non esistono pacchetti ufficiali per MySQL o per MariaDB per l’architettura ARM a 32 bit. Per fortuna, però, alcuni utenti hanno sviluppato delle versioni non ufficiali direttamente ricompilate dall’originale che possono essere usate.
Ma perché dovrei usare Docker quand’è così semplice installare normalmente?!
Perché le cose si introiano molto più velocemente di quanto si pensi. Basta magari un’installazione sbagliata per mandare a miglior vita la vostra installazione LAMP. E se c’è qualcosa di più tedioso di imparare un nuovo meccanismo è ripristinare i pacchetti su Debian. Sì, ok, è un sistema più stabile di Windows, ma su diecimila operazioni una avrà anche il diritto di impallarsi e se riguarda anche solo minimamente MariaDB siete fregati e fate prima a reinstallare.
Altro elemento utile è la possibilità di esportare molto più velocemente il vostro progetto: se lo volete distribuire non avrete bisogno di far configurare un ambiente LAMP, ad esempio e se state magari creando un software per un’azienda state creando un ambiente standard che può funzionare ovunque, senza cadere nella trappola del “ma funzionava sulla mia macchina, perché non funziona su questo Raspberry configurato in modo completamente diverso?”.
Parte 1: installare Docker (se non lo avete)
Nella mia installazione uso Docker com’è nei repository di Raspberry Pi OS Buster, che è una versione un po’ vecchiotta ma funziona bene. Per installarla, è sufficiente digitare a terminale:
sudo apt install docker
Se avete una versione più recente pace amen: al 90% funzionerà, al 10% saranno i messaggi d’errore a guidarvi. Sono davvero chiari e semplici.
Potete, se preferite una versione più aggiornata, seguire la documentazione di docker e installarlo manualmente.
Parte 2: pre-configurazione
Per il progetto c’è bisogno di una directory apposita per i dati di progetto e una per l’HTML, che potete creare alla svelta così:
mkdir -p ~/docker/lamp/html
dovete poi recarvi nella directory ~/docker/lamp dove creerete un file denominato php.Dockerfile che deve avere come contenuto:
FROM php:7.4.3-apache RUN docker-php-ext-install mysqli pdo pdo_mysql
version: "3.3" services: web-server: build: dockerfile: php.Dockerfile context: . restart: always volumes: - "./html/:/var/www/html/" ports: - "80:80" db: image: jsurf/rpi-mariadb restart: always environment: MYSQL_ROOT_PASSWORD: [PASSWORD DI ROOT] MYSQL_DATABASE: [NOME DATABASE] MYSQL_USER: [NOME UTENTE] MYSQL_PASSWORD: [PASSWORD DATABASE] ports: #togliere se non si vuole esposizione, vedere sotto - 3306:3306 #idem come sopra
Parte 3B: installare un gestore grafico di database
Dockerizzare o non dockerizzare?
Sul tema, però, posso spezzare una lancia a favore di non dockerizzare. Infatti, i vari gestori sono delle semplici applicazioni PHP.
Se il vostro obiettivo è di avere un sistema standard che includa uno di questi gestori, ovviamente, sarà utile dockerizzarlo. Ciò permetterà anche, come professionalità comanda, l’uso di una porta separata da quella del web server.
Se si tratta invece di un vostro ambiente di sviluppo oppure di un’immagine multiuso che potrebbe non richiedere tale software o richiederlo solo in alcuni casi non lo includerei, lasciando l’installazione ad un secondo momento, scegliendo se dockerizzarla o meno.
In ogni caso, se il vostro Raspberry non è potente, la dockerizzazione potrebbe aggiungere del peso inutile, sia in termini di RAM che di CPU.
Giusto per capirci adminer, un file di circa 500 KB, con Docker pesa più di 60 MB, poiché deve integrare tutto quello che serve a farlo girare autonomamente.
Insomma, non c’è una risposta giusta: dipende sempre da potenza e standardizzazione richieste.
Stringhe di installazione
Per aggiungere adminer con Docker sarà sufficiente aggiungere nel file docker-compose.yaml la seguente stringa:
adminer: image: adminer restart: always ports: - 8080:8080
Qualora preferiste, invece, phpmyadmin la stringa sarà questa:
phpmyadmin: image: phpmyadmin/phpmyadmin:5.0.1 restart: always environment: PMA_HOST: [NOME DATABASE] PMA_USER: [NOME UTENTE] PMA_PASSWORD: [PASSWORD DATABASE] ports: - 5000:80
Parte 3: finalmente il server!
Per avviare il server è sufficiente digitare a terminale:
docker-compose up -d
I servizi, quindi, si avvieranno demonizzati, ossia in background. Da questo momento potrete accedere dall’IP del vostro dispositivo e visualizzare il server. Ovviamente dovrete mettere almeno una index nella directory dedicata all’HTML, sennò riceverete un errore.
Potrete anche usare uno script di connessione PDO per provare la connettività al database, che dovrebbe funzionare senza problemi. E se dovete fermare il server? Basta tornare nella directory e digitare:
docker-compose down
Sarà sempre possibile riavviarlo con il comando esposto all’inizio di questo paragrafo.
Parte 4: possibili cose da tenere a mente
#1: Sicurezza
In questa installazione, è bene farlo notare, il database è accessibile fuori da localhost. Ciò consente di usare tool di gestione remota, ad esempio, ma è sconsigliabile qualora il sistema debba essere messo su Internet o anche in una LAN non molto sicura.
In tal caso è ovviamente possibile agire in più modi: il primo, utile qualora sia necessario mantenere un minimo di uso tramite tool remoti, è agire a livello di firewall in modo da limitare gli indirizzi da cui è possibile connettersi.
Oppure è anche possibile eliminare completamente l’esposizione delle porte, eliminando le stringhe relative alle porte che sono marcate nel file di configurazione.
In tal modo sarà possibile accedere solamente dalla macchina locale e da altre applicazioni dockerizzate, come spiegato precedentemente.
#2: Altri database
Se l’idea di usare un database non ufficiale, magari in produzione, non vi coinvolge particolarmente potete usare l’unico database che è presente ufficialmente su Raspberry Pi: PostgreSQL.
È un database SQL abbastanza simile a MariaDB e se non conoscete già le differenze in prestazioni, probabilmente, poco vi importerà.
Se sapete il significato di “mettere in produzione” probabilmente non vi servirà un tutorial dettagliato, ne trovate qui uno in caso di necessità: basta cercare sul Docker Hub PostgreSQL e seguire le indicazioni.
Per la gestione grafica potete usare sia adminer che un prodotto apposito che si chiama pgadmin4. La versione ufficiale non è disponibile per ARM a 32 bit, ma è disponibile una versione non ufficiale che ho linkato sopra.
Ringraziamenti
Ringrazio il buon Lemonz per avermi introdotto al mondo di docker e avermi dato alcuni consigli nello scrivere questo tutorial, oltre a spiegarmi un po’ il funzionamento di PostgreSQL per i test della parte relativa ad esso.
Pingback: LAMP è un paradigma obsoleto? – Computer Blog
Pingback: Going 64… (Installare Ubuntu Server su Raspberry Pi) – Computer Blog
Pingback: Power to the Docker! [SDSC] – Computer Blog