README: step-by-step nginx+Certbot webroot for ACME on Ubuntu
This commit is contained in:
@@ -243,7 +243,85 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg
|
|||||||
|
|
||||||
**DNS:** записи **A** для `ubuntu1.kalinamall.ru` и `ubuntu2.kalinamall.ru` должны указывать на **тот же публичный IP**, что и для остальных сервисов за HAProxy (чтобы запросы Let’s Encrypt пришли на **порт 80** этого хоста).
|
**DNS:** записи **A** для `ubuntu1.kalinamall.ru` и `ubuntu2.kalinamall.ru` должны указывать на **тот же публичный IP**, что и для остальных сервисов за HAProxy (чтобы запросы Let’s Encrypt пришли на **порт 80** этого хоста).
|
||||||
|
|
||||||
**На каждой Ubuntu:** поднимите **HTTP на порту 80** (nginx/apache) с корнем для **Certbot webroot** (`/.well-known/acme-challenge/…`) или используйте схему выпуска с **DNS-01**, если открывать 80 не хотите. Автообновление — **`certbot renew`** + **systemd timer** (или cron) **на соответствующей** машине.
|
**На каждой Ubuntu:** нужен **HTTP на порту 80** и каталог под **webroot** Certbot (`/.well-known/acme-challenge/…`). Ниже — пошагово для **nginx** (типичный вариант); в конце — кратко про **Apache**. Если открывать 80 не хотите, используйте **DNS-01** на той же машине (без этого блока).
|
||||||
|
|
||||||
|
#### Пошагово: nginx + Certbot webroot на Ubuntu
|
||||||
|
|
||||||
|
Выполняйте **на каждой** Ubuntu отдельно; подставляйте своё имя (`ubuntu1.kalinamall.ru` или `ubuntu2.kalinamall.ru`).
|
||||||
|
|
||||||
|
1. **Установите nginx и certbot**
|
||||||
|
```bash
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y nginx certbot
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Каталог для challenge** (Certbot будет писать сюда файлы, nginx — отдавать):
|
||||||
|
```bash
|
||||||
|
sudo mkdir -p /var/www/certbot/.well-known/acme-challenge
|
||||||
|
sudo chown -R www-data:www-data /var/www/certbot
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Виртуальный хост только под ACME и имя сервера**
|
||||||
|
Создайте файл, например `/etc/nginx/sites-available/acme-le.conf` (на одной машине в `server_name` — `ubuntu1.kalinamall.ru`, на другой — `ubuntu2.kalinamall.ru`):
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
server {
|
||||||
|
listen 80 default_server;
|
||||||
|
listen [::]:80 default_server;
|
||||||
|
server_name ubuntu1.kalinamall.ru;
|
||||||
|
|
||||||
|
location ^~ /.well-known/acme-challenge/ {
|
||||||
|
root /var/www/certbot;
|
||||||
|
default_type "text/plain";
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Включите сайт и перезапустите nginx**
|
||||||
|
```bash
|
||||||
|
sudo ln -sf /etc/nginx/sites-available/acme-le.conf /etc/nginx/sites-enabled/
|
||||||
|
sudo rm -f /etc/nginx/sites-enabled/default
|
||||||
|
sudo nginx -t && sudo systemctl reload nginx
|
||||||
|
```
|
||||||
|
Убедитесь, что снаружи (через HAProxy и открытый WAN **80**) до этой машины доходит запрос с правильным **Host** — иначе Let’s Encrypt не пройдёт проверку.
|
||||||
|
|
||||||
|
5. **Первый выпуск сертификата (webroot)**
|
||||||
|
Подставьте свой домен и e-mail:
|
||||||
|
```bash
|
||||||
|
sudo certbot certonly --webroot -w /var/www/certbot \
|
||||||
|
-d ubuntu1.kalinamall.ru \
|
||||||
|
--email admin@example.com --agree-tos --non-interactive
|
||||||
|
```
|
||||||
|
При первом запуске можно убрать `--non-interactive`, чтобы согласиться с условиями в диалоге. Сертификаты появятся в `/etc/letsencrypt/live/<имя>/`.
|
||||||
|
|
||||||
|
6. **Проверка автообновления**
|
||||||
|
```bash
|
||||||
|
sudo systemctl enable --now certbot.timer
|
||||||
|
sudo certbot renew --dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **Перезагрузка nginx после успешного renew**
|
||||||
|
Создайте скрипт и сделайте его исполняемым:
|
||||||
|
```bash
|
||||||
|
sudo install -d /etc/letsencrypt/renewal-hooks/deploy
|
||||||
|
echo 'systemctl reload nginx' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/01-reload-nginx.sh
|
||||||
|
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/01-reload-nginx.sh
|
||||||
|
```
|
||||||
|
Таймер **`certbot.timer`** по расписанию вызывает `certbot renew`; при обновлении сертификата выполняются hook’и из `renewal-hooks/deploy`.
|
||||||
|
|
||||||
|
Дальше на этой же машине можно настроить **HTTPS** для своих сервисов, указав в nginx `ssl_certificate` и `ssl_certificate_key` на файлы из `/etc/letsencrypt/live/<домен>/` (это уже отдельно от HAProxy, если TLS терминируется на Ubuntu).
|
||||||
|
|
||||||
|
#### Кратко: Apache вместо nginx
|
||||||
|
|
||||||
|
1. `sudo apt install -y apache2 certbot python3-certbot-apache` (или только `certbot` и webroot без плагина apache).
|
||||||
|
2. Корень для challenge: например `sudo mkdir -p /var/www/certbot/.well-known/acme-challenge` и в виртуальном хосте на **:80** для вашего `ServerName` — `Alias /.well-known/acme-challenge /var/www/certbot/.well-known/acme-challenge` и доступ `Require all granted` для этого каталога.
|
||||||
|
3. `sudo apachectl configtest && sudo systemctl reload apache2`
|
||||||
|
4. `sudo certbot certonly --webroot -w /var/www/certbot -d ubuntu1.kalinamall.ru` (и аналогично для второго имени на второй машине).
|
||||||
|
5. Таймер **`certbot.timer`** и при необходимости hook с `systemctl reload apache2`.
|
||||||
|
|
||||||
**На HAProxy:** один фронтенд на **80**, маршрутизация по заголовку **Host** + путь ACME на разные бэкенды:
|
**На HAProxy:** один фронтенд на **80**, маршрутизация по заголовку **Host** + путь ACME на разные бэкенды:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user