Перейти к основному контенту

Создание ноды 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/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 -