Переглянути пости за тегами

Налаштування безкоштовних SSL сертифікатів з Let’s Encrypt і Docker

  • 2 хв читання
  • 24 Чер, 2024

У сучасному веб-середовищі захист вашого сайту за допомогою HTTPS є надзвичайно важливим для захисту даних користувачів і забезпечення довіри. Let’s Encrypt пропонує безкоштовні SSL сертифікати, а використання Docker полегшує їх налаштування та управління. У цій статті ми покажемо, як налаштувати Docker сервіси для Let’s Encrypt і налаштувати Nginx для безпечного обслуговування вашого сайту.

Передумови

Перед початком переконайтеся, що на вашій системі встановлені наступні інструменти:

  • Docker: Відвідайте офіційний веб-сайт Docker, щоб завантажити та встановити Docker Desktop.

  • Docker Compose: Зазвичай включено в Docker Desktop, встановіть окремо, якщо його немає.

Якщо ви не знаєте, як налаштувати середовище для Docker, прочитайте про це тут.

Крок 1: Налаштування початкової конфігурації Nginx

Спочатку налаштуємо конфігурацію Nginx для обробки HTTP трафіку та відповіді на запити Let’s Encrypt. Створіть файл nginx.conf з наступним вмістом:

# nginx.conf

# Define the upstream server (Gunicorn)
upstream web {
    server web:8000;
}

server {
    listen 80;
    server_name localhost;
    client_max_body_size 50M;
    client_body_buffer_size 50M;

    location /static/ {
        alias /static/; 
        # expires 30d;
    }

    location /media/ {
        alias /media/;
        expires 30d;
    }

    location / {
        proxy_pass http://web;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }
}

Крок 2: Налаштування Docker сервісу для Let’s Encrypt

Далі налаштуємо Docker сервіс для Let’s Encrypt за допомогою Certbot. Додайте наступне визначення сервісу у ваш docker-compose.yml файл:

  certbot:
    image: certbot/certbot    
    volumes:
      - ./docker/certbot/www/:/var/www/certbot/:rw
      - ./docker/certbot/conf/:/etc/letsencrypt/:rw  

Крок 3: Отримання SSL сертифікатів

Запустіть наступну команду для отримання SSL сертифікатів від Let’s Encrypt:

docker-compose run --rm certbot certonly --webroot --webroot-path=/var/www/certbot -d example.com

Замініть example.com на ваше фактичне доменне ім’я.

Крок 4: Оновлення конфігурації Nginx для SSL

Після отримання сертифікатів оновіть вашу конфігурацію Nginx для використання SSL. Змініть ваш файл nginx.conf на наступний:

# nginx.conf

upstream web {
    server web:8000;
}

server {
    listen 80;
    server_name example.com; 

    client_max_body_size 50M;
    client_body_buffer_size 50M;
    
    location /static/ {
        alias /static/; 
    }

    location /media/ {
        alias /media/;
        expires 30d;
    }

    location / {
        proxy_pass http://web;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;  
    client_max_body_size 50M;
    client_body_buffer_size 50M;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";

    location /static/ {
        alias /static/; 
    }

    location /media/ {
        alias /media/;
        expires 30d;
    }

    location / {
        proxy_pass http://web;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Замініть `example.com` на ваше фактичне доменне ім'я.

Висновок

Дотримуючись цих кроків, ви можете захистити свій сайт за допомогою безкоштовних SSL сертифікатів від Let's Encrypt, використовуючи Docker для спрощення процесу. Ця налаштування забезпечує обробку безпечного HTTPS трафіку на вашому сайті, підвищуючи рівень безпеки і довіри користувачів.