Come scrivere uno script di inizializzazione per Laravel in Docker con Docker Compose

Utilizzare Docker per eseguire Laravel è una scelta comune per chi vuole standardizzare l’ambiente di sviluppo. Uno script di inizializzazione consente di impostare correttamente l’ambiente Laravel al primo avvio, automatizzando operazioni come installazione delle dipendenze, migrazioni e generazione delle chiavi di sicurezza.

Struttura di base del progetto

Assumiamo che tu abbia una struttura di progetto simile alla seguente:

.
├── docker-compose.yml
├── init.sh
├── app/
│   ├── artisan
│   └── ... (file Laravel)

Il file docker-compose.yml

Ecco un esempio base di docker-compose.yml per Laravel:



services:
  app:
    image: php:8.2-fpm
    container_name: laravel_app
    working_dir: /var/www
    volumes:
      - ./app:/var/www
      - ./init.sh:/init.sh
    command: ["sh", "/init.sh"]
    depends_on:
      - mysql

  web:
    image: nginx:alpine
    container_name: laravel_web
    ports:
      - "8000:80"
    volumes:
      - ./app:/var/www
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app

  mysql:
    image: mysql:8.0
    container_name: laravel_db
    restart: always
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: root
    ports:
      - "3306:3306"

Lo script init.sh

Questo script viene eseguito all’avvio del container app. Serve a preparare Laravel:

#!/bin/sh

set -e

# Installa Composer
EXPECTED_SIGNATURE=$(php -r "copy('https://composer.github.io/installer.sig', 'php://stdout');")
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') !== '$EXPECTED_SIGNATURE') { echo 'Invalid installer'; unlink('composer-setup.php'); exit(1); }"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php

cd /var/www
composer install

php artisan key:generate

php artisan migrate --force

php-fpm

Ricorda di rendere eseguibile lo script con il comando:

chmod +x init.sh

Considerazioni finali

Questo script semplifica molto l’onboarding in team o la distribuzione locale di un’app Laravel. Puoi estenderlo aggiungendo supporto per la cache delle configurazioni, seeding del database o installazione di package globali.

Una buona pratica è anche usare un'immagine personalizzata che abbia già Composer installato, evitando così di scaricarlo ogni volta.

Torna su