Come configurare Laravel con Dockerfile e Docker-Compose

1 feb 2024 3 min di lettura
Come configurare Laravel con Dockerfile e Docker-Compose
Indice dei contenuti

Introduzione

Lo sviluppo di applicazioni Laravel richiede un ambiente di sviluppo stabile e coerente. Docker, una popolare piattaforma di containerizzazione, offre un modo efficiente per creare un tale ambiente. In questo tutorial completo, esploreremo come creare un solido ambiente di sviluppo Laravel utilizzando Docker, una tecnologia leader di containerizzazione. La guida include passaggi per l'integrazione di MySQL e la configurazione di Nginx, garantendo un processo di sviluppo senza interruzioni.

Prerequisiti

  • Conoscenza base di Laravel, Docker e MySQL.
  • Docker e Docker Compose installati sul tuo computer.

Passaggio 1: impostazione del progetto Laravel

Innanzitutto, crea un nuovo progetto Laravel o vai alla directory del progetto esistente. Se stai creando un nuovo progetto, utilizza Composer:

composer create-project --prefer-dist laravel/laravel my-laravel-app 
cd my-laravel-app

Passaggio 2: creazione del Dockerfile

Sviluppa un Dockerfile alla radice del tuo progetto Laravel. Questo file utilizza l'immagine PHP 8.2 e installa le estensioni PHP necessarie insieme a Composer. Delinea l'ambiente della tua applicazione Laravel.

FROM php:8.2-fpm

# Install dependencies
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

Passaggio 3: configurazione di Docker Compose

Crea un file "docker-compose.yml" nella root del tuo progetto. Questo file orchestra i tuoi contenitori Docker, definendo i servizi per Laravel (app), MySQL (db) e Nginx (web). Stabilisce una rete per questi servizi e un volume per MySQL.

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: my-laravel-app
    container_name: my-laravel-app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: my-laravel-app
      SERVICE_TAGS: dev
    working_dir: /var/www/html
    volumes:
      - ./:/var/www/html
    networks:
      - app-network

  db:
    image: mysql:8
    container_name: my-laravel-mysql
    restart: unless-stopped
    tty: true
    ports:
      - "13306:3306"
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
      SERVICE_TAGS: dev
    volumes:
      - dbdata:/var/lib/mysql
    networks:
      - app-network

  # Nginx Service
  web:
    image: 'nginx:alpine'
    ports:
      - "8000:80"
    volumes:
      - ./:/var/www/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  dbdata:
    driver: local

Questo file definisce due servizi: app per la tua applicazione Laravel e db per MySQL. Configura inoltre una rete e un volume per la persistenza dei dati MySQL.

Passaggio 4: implementazione della configurazione Nginx

Inserisci un file nginx.conf nella root del tuo progetto per configurare il server Nginx, essenziale per servire la tua applicazione.

server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.ht {
        deny all;
    }
}

Passaggio 5: esecuzione dei contenitori

Con la configurazione di Dockerfile e docker-compose.yml , puoi avviare i tuoi contenitori.

docker-compose up -d 

Passaggio 5: configurazione del database Laravel

Modifica il file .env nel tuo progetto Laravel per utilizzare il servizio MySQL:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=user
DB_PASSWORD=password

Passaggio 6: migrazione dei database

Esegui le migrazioni Laravel per configurare il tuo database:

docker-compose exec app php artisan migrate 

Passaggio 6: accedere all'applicazione

Una volta che i contenitori sono attivi e funzionanti. È possibile accedere all'applicazione Laravel su http://localhost:8000.

Conclusione

Hai creato con successo un ambiente di sviluppo Laravel basato su Docker con integrazione MySQL e configurazione Nginx. Questa configurazione migliora la coerenza tra gli scenari di sviluppo e facilita la collaborazione del team. Per perfezionare ulteriormente il tuo ambiente, approfondisci le funzionalità Docker aggiuntive e le funzionalità avanzate di Laravel.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.