1. Подготовка и установка Certbot
Создаем рабочую директорию и конфигурационный файл для контейнера Certbot.
mkdir -p /opt/certbot && cd /opt/certbot && nano docker-compose.yml
Вставьте следующее содержимое:
services:
certbot:
container_name: certbot
image: certbot/certbot
network_mode: host
volumes:
- ./certs:/etc/letsencrypt
2. Первичное получение сертификата
Перед запуском убедитесь, что порт 80 свободен. Certbot в режиме --standalone поднимет временный сервер для проверки владения доменом.
Замените your-domain.com и admin@your-domain.com на ваши данные:
docker run --rm \
-v $(pwd)/certs:/etc/letsencrypt \
-v $(pwd)/var-lib-letsencrypt:/var/lib/letsencrypt \
--network host \
certbot/certbot certonly --standalone \
--non-interactive --agree-tos \
--email admin@your-domain.com \
-d your-domain.com
3. Проброс сертификатов в Remnawave
Чтобы нода увидела файлы, нужно подключить папку с сертификатами как Volume.
cd /opt/remnanode/ && nano docker-compose.yml
Добавьте строку с сертификатами в секцию volumes (режим :ro — только чтение):
services:
remnanode:
...
volumes:
- '/opt/certbot/certs:/etc/letsencrypt:ro'
Перезапустите ноду:
docker compose down && docker compose up -d
4. Настройка профиля Hysteria2 в панели
При создании или редактировании профиля в Remnawave используйте следующий JSON. Обратите внимание на пути к файлам — они указывают на внутренние папки контейнера, которые мы пробросили выше.
Важно: замените your-domain.com на ваш реальный домен в путях.
{
"log": { "loglevel": "none" },
"inbounds": [
{
"tag": "HYSTERIA-BBR",
"port": 443,
"listen": "0.0.0.0",
"protocol": "hysteria",
"settings": {
"clients": [],
"version": 2
},
"streamSettings": {
"network": "hysteria",
"security": "tls",
"finalmask": {
"quicParams": { "debug": false, "congestion": "bbr" }
},
"tlsSettings": {
"alpn": ["h3"],
"certificates": [
{
"keyFile": "/etc/letsencrypt/live/your-domain.com/privkey.pem",
"certificateFile": "/etc/letsencrypt/live/your-domain.com/fullchain.pem"
}
]
},
"hysteriaSettings": { "version": 2 }
}
}
],
"outbounds": [
{ "tag": "DIRECT", "protocol": "freedom" },
{ "tag": "BLOCK", "protocol": "blackhole" }
],
"routing": {
"rules": [
{ "ip": ["geoip:private"], "outboundTag": "BLOCK" },
{ "domain": ["geosite:private"], "outboundTag": "BLOCK" },
{ "protocol": ["bittorrent"], "outboundTag": "BLOCK" }
]
}
}
5. Автоматическое обновление (Cron)
Сертификаты LetsEncrypt живут 90 дней. Настроим обновление раз в месяц (28-го числа).
* Откройте планировщик: crontab -e
* Выберите редактор (обычно 1 для nano).
* Добавьте строку в конец файла:
0 0 28 * * cd /opt/certbot && docker compose run --rm certbot renew