Configurazione di LEMP Stack con Docker e Certificati SSL


Questo tutorial ti guida passo dopo passo nella configurazione di uno stack LEMP con Docker e Docker Compose, integrando la protezione SSL tramite Let’s Encrypt.

Prerequisiti

  • Un server Ubuntu con un utente non root abilitato a sudo e un firewall attivo.
  • Docker e Docker Compose installati.
  • Un dominio registrato con i record DNS configurati (A e www).

Fase 1: Configurazione del Server Web

Crea la directory di configurazione del progetto e il file nginx.conf:


mkdir -p webserver_www/nginx-conf
nano webserver_www/nginx-conf/nginx.conf

            

Inserisci il seguente blocco di configurazione:


server {
    listen 80;
    server_name your_domain www.your_domain;
    root /var/www/html;

    location ~ /.well-known/acme-challenge {
        allow all;
    }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php_fpm:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

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

            

Nota: Ricordati di sostituire your_domain con il tuo dominio effettivo.

Fase 2: Definizione delle Variabili Ambientali

Crea un file .env per definire variabili sensibili:


nano webserver_www/.env

            

Inserisci i seguenti valori:


MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_USER=your_php_fpm_user
MYSQL_PASSWORD=your_php_fpm_password
MYSQL_DATABASE=your_database

            

Fase 3: Configurazione di Docker Compose

Crea il file docker-compose.yml per definire i servizi:


version: '3'
services:
  db:
    image: mysql:8.0
    env_file: .env
    volumes:
      - dbdata:/var/lib/mysql
    networks:
      - app-network

  php_fpm:
    image: php:8.2-fpm
    volumes:
      - php_fpm:/var/www/html
    networks:
      - app-network

  nginx:
    image: nginx:1.21-alpine
    ports:
      - "80:80"
    volumes:
      - php_fpm:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
    networks:
      - app-network

  certbot:
    image: certbot/certbot
    volumes:
      - certbot-etc:/etc/letsencrypt
      - php_fpm:/var/www/html
    command: certonly --webroot --webroot-path=/var/www/html --email you@example.com --agree-tos --no-eff-email --staging -d your_domain -d www.your_domain

volumes:
  dbdata:
  php_fpm:
  certbot-etc:

networks:
  app-network:
    driver: bridge

            

Fase 4: Configurazione Certificati SSL

Esegui il comando per ottenere i certificati:


docker-compose up -d certbot

            

Verifica la presenza dei certificati con:


docker-compose exec nginx ls -la /etc/letsencrypt/live

            

Fase 5: Modifica della Configurazione Nginx

Modifica nginx.conf per abilitare HTTPS:


server {
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
}

            

Fase 6: Rinnovo Automatico dei Certificati

Crea uno script di rinnovo:


#!/bin/bash
docker-compose run certbot renew && docker-compose kill -s SIGHUP nginx

            

Configura un cron job:


crontab -e
# Aggiungi la seguente riga
0 12 * * * /path/to/ssl_renew.sh >> /var/log/cron.log 2>&1

            

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *