docker nginx letsencrypt proxy


Как настроить Docker с Nginx, Let's Encrypt и прокси: пошаговая инструкция для российского рынка
В современном мире безопасность и надежность сайта или веб-приложения — превыше всего. Особенно, если речь идет о публичных сервисах, которые требуют защищенного соединения по HTTPS. В этой статье я расскажу, как легко и быстро настроить Docker с Nginx, использовать Let's Encrypt для получения бесплатных сертификатов и организовать проксирование трафика — всё по шагам с учетом российских реалий.
Почему именно Docker, Nginx и Let's Encrypt?
- Docker позволяет изолировать окружение, делать развертывание быстрым и управляемым.
- Nginx — мощный и гибкий веб-сервер и обратный прокси, идеально подходит для балансировки нагрузки и маршрутизации.
- Let's Encrypt — бесплатный сертификатный центр, предоставляющий SSL-сертификаты, подтверждающие безопасность соединения.
Объединение этих технологий дает вам инструмент для быстрого, безопасного и масштабируемого запуска веб-сервиса.
Шаг 1: Установка Docker и Docker Compose
Перед началом убедитесь, что у вас установлены Docker и Docker Compose. Для этого выполните команды:
sudo apt update
sudo apt install docker docker-compose
Проверьте версии:
docker --version
docker-compose --version
Шаг 2: Создаем конфигурацию Docker Compose
Создайте файл docker-compose.yml в удобной директории:
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx_proxy
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./certs:/etc/letsencrypt
ports:
- "80:80"
- "443:443"
networks:
- webproxy
restart: unless-stopped
certbot:
image: certbot/certbot
container_name: certbot
volumes:
- ./certs:/etc/letsencrypt
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do sleep 12h & wait $${!}; done;'"
networks:
- webproxy
networks:
webproxy:
driver: bridge
Этот файл задает два сервиса: Nginx и Certbot для получения сертификатов.
Шаг 3: Настройка Nginx как обратного прокси
Создайте файл nginx.conf рядом с docker-compose.yml:
server {
listen 80;
server_name yourdomain.ru;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name yourdomain.ru;
ssl_certificate /etc/letsencrypt/live/yourdomain.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.ru/privkey.pem;
location / {
proxy_pass http://backend_service:port; # замените на ваш бэкенд
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;
}
}
Обратите внимание: замените yourdomain.ru на ваш реальный домен.
Шаг 4: Получение SSL-сертификата
Запустите контейнер Certbot для получения сертификатов:
docker run --rm -it \
-v $(pwd)/certs:/etc/letsencrypt \
-v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf \
certbot/certbot certonly --webroot \
--webroot-path=/var/www/certbot \
-d yourdomain.ru
Следуйте инструкциям, подтвердите владение доменом. После этого сертификаты появятся в папке certs.
Шаг 5: Запуск всей системы
Теперь запустите контейнеры:
docker-compose up -d
Ваш сервер будет слушать порты 80 и 443, перенаправляя трафик через Nginx и защищая соединение сертификатом Let’s Encrypt.
Итог: безопасность и удобство
Вы получили полноценный стек — Docker с Nginx и автоматическим управлением SSL с помощью Let's Encrypt. Такой подход подходит как для небольших проектов, так и для масштабируемых сервисов внутри России, учитывая особенности локальной инфраструктуры и регуляторные требования.
Если хотите углубиться, можно настроить автоматический обновление сертификатов, использовать динамическое управление конфигурациями или интегрировать с CI/CD системами. Всё это — следующий шаг к надежной и защищенной инфраструктуре.
Если нужно, я подготовлю инструкции для более сложных сценариев или адаптирую под конкретные задачи.
Присоединиться к обсуждению
Комментариев пока нет.
Оставить комментарий