Для интеграции Certbot в среду Docker с сервером Nginx вы можете использовать один из двух подходов:
1. **Certbot внутри контейнера Docker с Nginx**:
Создайте Docker образ, который будет содержать как Nginx, так и Certbot. Вы можете использовать официальный образ Certbot в качестве основы и добавить Nginx, или наоборот.
В вашем `Dockerfile` это может выглядеть следующим образом:
```dockerfile
FROM nginx:latest
# Устанавливаем Certbot
RUN apt-get update && \
apt-get install -y certbot python-certbot-nginx && \
rm -rf /var/lib/apt/lists/*
# Копируем конфигурацию Nginx
COPY ./default.conf /etc/nginx/conf.d/default.conf
# Скрипт для получения сертификатов и автоматического обновления
COPY ./init-letsencrypt.sh /usr/local/bin/init-letsencrypt.sh
RUN chmod +x /usr/local/bin/init-letsencrypt.sh
CMD ["/usr/local/bin/init-letsencrypt.sh"]
```
Здесь скрипт `init-letsencrypt.sh` будет отвечать за получение сертификатов и настройку автоматического их обновления.
2. **Используем Certbot за пределами Docker**:
Если вы хотите упростить структуру Docker Compose и избежать сложностей с установкой и обновлением сертификатов Let's Encrypt внутри Docker, можно запустить Certbot на хосте, а не в контейнере.
Следующие шаги помогут вам настроить это:
- Запустите Nginx в Docker, как обычно.
- Выделите папки, где будут храниться сертификаты (`/etc/letsencrypt` и `/var/lib/letsencrypt`) и делайте их доступными для вашего контейнера через volume.
- Запустите Certbot на хосте, желательно как cron job или systemd timer, для автоматического обновления сертификатов.
В вашем `docker-compose.yml`:
```yaml
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- /etc/letsencrypt:/etc/letsencrypt:ro
- /var/lib/letsencrypt:/var/lib/letsencrypt:ro
depends_on:
- web
```
Сконфигурируйте Certbot на хосте, чтобы использовать веб-корень Nginx, который соответствует volume, предоставленному контейнером Nginx.
Для Certbot можно использовать следующую команду, чтобы получить сертификат для нескольких доменов:
```sh
certbot certonly --webroot -w /path/to/nginx/webroot -d example.com -d www.example.com
```
И не забудьте настроить автоматическое обновление сертификатов, добавив Certbot в cron:
```cron
0 12 * * * /usr/bin/certbot renew --quiet --renew-hook "docker-compose -f /path/to/docker-compose.yml exec nginx nginx -s reload"
```
Оба метода работоспособны, но второй способ позволяет отделять процесс управления сертификатом от контейнера с Nginx, что может упростить управление и обновление сертификатов.
Учтите, что примеры конфигураций могут потребовать дополнительной настройки в зависимости от специфик вашей среды.