Создание ноды remnanode с ssl сертификатами
Обновление и установка пакетов
apt update && apt install sudo curl
Докер
sudo curl -fsSL https://get.docker.com | sh
Каталоги для certbot в docker
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. Первичное получение сертификата
Замените 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
Создание каталога для remnanode
mkdir /opt/remnanode && cd /opt/remnanode && nano docker-compose.yml
Вставить текст
services:
remnanode:
container_name: remnanode
hostname: remnanode
image: remnawave/node:latest
network_mode: host
restart: always
cap_add:
- NET_ADMIN
ulimits:
nofile:
soft: 1048576
hard: 1048576
environment:
- NODE_PORT=2272
- SECRET_KEY=""
volumes:
- '/opt/certbot/certs/live:/etc/letsencrypt:letsencrypt/live:ro'
Поднять ноду
docker compose up -d && docker compose logs -f -t
Создать скрипт для переноса файлов сертификата в каталог ниже
cat > /opt/remnanode/update-certs-universal.sh << 'EOF'
#!/bin/bash
TARGET_DIR="/opt/certbot/certs/live"
echo "🔍 Анализируем $TARGET_DIR..."
# Ищем папку домена (игнорируем файлы)
DOMAIN=$(ls -A1 "$TARGET_DIR" 2>/dev/null | grep -E '^[a-zA-Z0-9][a-zA-Z0-9.-]*$' | grep -v '\.pem$' | head -1)
if [ -z "$DOMAIN" ]; then
echo "❌ Папка домена не найдена, пробуем файлы в корне..."
# Если нет папки — используем файлы из корня
if [ -f "$TARGET_DIR/fullchain.pem" ] && [ -f "$TARGET_DIR/privkey.pem" ]; then
echo "✅ Файлы уже в корне $TARGET_DIR — ничего не копируем"
echo "Домен: auto (файлы в корне)"
ls -la "$TARGET_DIR/"
cd /opt/remnanode && docker compose restart remnanode
echo "🔄 remnanode перезапущен"
sleep 3
docker logs remnanode --tail=10
exit 0
fi
echo "❌ Ни папки домена, ни файлов в корне не найдено!"
exit 1
fi
SOURCE_DIR="$TARGET_DIR/$DOMAIN"
echo "🔄 Найден домен: $DOMAIN → $SOURCE_DIR"
mkdir -p "$TARGET_DIR"
if [ -f "$SOURCE_DIR/fullchain.pem" ] && [ -f "$SOURCE_DIR/privkey.pem" ]; then
cp "$SOURCE_DIR/fullchain.pem" "$TARGET_DIR/fullchain.pem"
cp "$SOURCE_DIR/privkey.pem" "$TARGET_DIR/privkey.pem"
chmod 644 "$TARGET_DIR/fullchain.pem"
chmod 600 "$TARGET_DIR/privkey.pem"
echo "✅ ✅ ✅ СЕРТИФИКАТЫ СКОПИРОВАНЫ ИЗ ПАПКИ ✅ ✅ ✅"
else
echo "✅ Файлы уже в корне $TARGET_DIR"
fi
echo "📋 Финальное состояние:"
ls -la "$TARGET_DIR/"
cd /opt/remnanode && docker compose restart remnanode
echo "🔄 remnanode перезапущен"
sleep 3
docker logs remnanode --tail=10
EOF
chmod +x /opt/remnanode/update-certs-universal.sh
Запустить скрипт
cd /opt/remnanode
./update-certs-universal.sh
Добавить в cron задачу
(crontab -l 2>/dev/null; echo "0 0 28 * * cd /opt/certbot && docker compose run --rm certbot renew && /opt/remnanode/update-certs-universal.sh") | crontab -