In uno dei miei ultimi progetti software mi son trovato difronte al problema di come far comunicare Drupal 8 con un database MS SQL Server. Inizialmente avevo preso la questione "sotto gamba" vista l'esistenza del modulo Drupal driver for SQL Server and SQL Azure e del driver per PHP. Il fatto è che avevo perso di vista tutta la questione DevOps per garantirmi un processo di sviluppo agile, un deployment automatizzato e ambienti identici (compreso quello di sviluppo locale).
Solitamente io utilizzo due tipi di infrastrutture per avere questi standard nel processo di lavoro:
- Platform.sh, per progetti che necessitano un alto grado di affidabilità;
- Wodby, dove è accettato qualche secondo in più di offline e quando il cliente vuole ospitare l'applicazione nel proprio server.
Per questo progetto nello specifico ho utilizzato Wodby, installando la sua infrastruttura nella macchina messa a disposizione dal cliente. Procedura di installazione semplicissima, è bastato eseguire uno script fornito da Wodby per vedere apparire magicamente l'istanza del server nella loro interfaccia web.
Questione non così banale è stata invece la preparazione dell'immagine Docker contenente il driver sqlsrv per PHP.
Immagine Docker personalizzata
Le immagini messe a disposizione da Wodby sono basate su Linux Alpine; fico per la sua caratteristiche di sistema operativo snello, ma un problema nel mio caso perché non ha il pacchetto del driver sqlsrv per PHP; esiste quello per Ubuntu, ma non quello per Alpine. Su consiglio del supporto tecnico di Wodby, ho deciso quindi di imbarcarmi per il mio primo viaggio nella creazione di un'immagine Docker custom.
L'obiettivo era quello di mantenere le stesse caratteristiche offerte dalle immagini Wodby, ma con l'aggiunta del driver sqlsrv per PHP. La cosa più onerosa è stata quella di spulciare il Dockerfile di Wodby e recuperare tutti i pacchetti e estensioni per Debian. Ero partito con l'idea di creare un'immagine, ma dopo qualche giorno ne ho partorito ben due:
- php-sqlserver, un'immagine PHP (FPM) generica su debian9
- drupal-php-sqlsrv, quella specifica per Drupal con già installati Drush e Drupal Console.
Per chi volesse contribuire lascio anche i repository di GitHub https://github.com/robertoperuzzo/php-sqlserver e https://github.com/robertoperuzzo/drupal-php-sqlsrv.
Inserendo quindi l'immagine drupal-php-sqlsrv nel docker-compose.yml file, ecco che l'ambiente di sviluppo locale è bello che pronto.
E per l'ambiente di produzione?
Niente paura, l'infrastruttura di Wodby ti permette di personalizzare lo stack applicativo a tuo piacimento utilizzando anche immagini Docker non fornite direttamente da loro. Mi è bastato creare il mio file di configurazione in formato YML con una sintassi simile a quella delle configurazioni Kubernetes ed ecco creato lo stack applicativo da utilizzare per qualsiasi ambiente che andrò a creare grazie a Wodby.