Установка Remnawave
Установка Remnawave состоит из нескольких частей :
Минимальные требования для Backend: Timeweb - 550 р в месяц (1/2)
Минимальные требования для Node: Inferno
- Домены panel.domen.com, subs.domen.com должны указывать на IP-адрес сервера с панелью
- Домен steel.domen.com для сайта-заглушки Self Steal должен указывать на IP-адрес сервера с нодой
1. Установка Основная панель
sudo curl -fsSL https://get.docker.com | sh
mkdir /opt/remnawave && cd /opt/remnawave
curl -o .env https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/.env.sample
nano .env
FRONT_END_DOMAIN=panel.domen.com указываем адрес панели
SUB_PUBLIC_DOMAIN=subs.domen.com указываем адрес страницы подписок
и обязательно прописать данные для БД
Сохраняем данные, нажав Ctrl-X далее Y и Enter
nano docker-compose.yml
services:
remnawave-db:
image: postgres:17
container_name: 'remnawave-db'
hostname: remnawave-db
restart: always
env_file:
- .env
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
- TZ=UTC
ports:
- '127.0.0.1:6767:5432'
volumes:
- remnawave-db-data:/var/lib/postgresql/data
networks:
- remnawave-network
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 3s
timeout: 10s
retries: 3
remnawave:
image: remnawave/backend:latest
container_name: 'remnawave'
hostname: remnawave
restart: always
ports:
- '127.0.0.1:3000:3000'
env_file:
- .env
networks:
- remnawave-network
depends_on:
remnawave-db:
condition: service_healthy
remnawave-redis:
condition: service_healthy
remnawave-redis:
image: valkey/valkey:8.0.2-alpine
container_name: remnawave-redis
hostname: remnawave-redis
restart: always
networks:
- remnawave-network
volumes:
- remnawave-redis-data:/data
healthcheck:
test: ['CMD', 'valkey-cli', 'ping']
interval: 3s
timeout: 10s
retries: 3
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: false
volumes:
remnawave-db-data:
driver: local
external: false
name: remnawave-db-data
remnawave-redis-data:
driver: local
external: false
name: remnawave-redis-dataСохраняем данные, нажав Ctrl-X далее Y и Enter
docker compose up -d
docker compose logs -f
mkdir -p /opt/remnawave/caddy && cd /opt/remnawave/caddy && nano Caddyfile
и вставляем данные предварительно заменив panel.domen.com на домен панели
https://panel.domen.com {
reverse_proxy * http://remnawave:3000
}
:443 {
tls internal
respond 204
}Сохраняем данные, нажав Ctrl-X далее Y и Enter
cd /opt/remnawave/caddy && nano docker-compose.yml
services:
caddy:
image: caddy:2.9
container_name: 'caddy'
hostname: caddy
restart: always
ports:
- '0.0.0.0:443:443'
networks:
- remnawave-network
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy-ssl-data:/data
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true
volumes:
caddy-ssl-data:
driver: local
external: false
name: caddy-ssl-dataСохраняем данные, нажав Ctrl-X далее Y и Enter
docker compose up -d
docker compose logs -f
Ваша панель установлена и теперь доступна по адресу: https://panel.domen.com
2. Установка страницы подписок
mkdir -p /opt/remnawave/subscription && cd /opt/remnawave/subscription && nano docker-compose.yml
и вставляем данные предварительно заменив panel.domen.com на домен панели
services:
remnawave-subscription-page:
image: remnawave/subscription-page:latest
container_name: remnawave-subscription-page
hostname: remnawave-subscription-page
restart: always
environment:
- REMNAWAVE_PANEL_URL=https://panel.com
- APP_PORT=3010
- META_TITLE="Subscription Page Title"
- META_DESCRIPTION="Subscription Page Description"
ports:
- '127.0.0.1:3010:3010'
networks:
- remnawave-network
networks:
remnawave-network:
driver: bridge
external: trueСохраняем данные, нажав Ctrl-X далее Y и Enter
docker compose up -d
docker compose logs -f
cd /opt/remnawave/caddy && nano Caddyfile
И добавляем в самый низ строки предварительно заменив sub.domen.com на поддомен подписок
https://sub.domen.com {
reverse_proxy * http://remnawave-subscription-page:3010
}Сохраняем данные, нажав Ctrl-X далее Y и Enter
docker compose down && docker compose up -d
docker compose logs -f
3. Установка Ноды
sudo curl -fsSL https://get.docker.com | sh
mkdir -p /opt/remnanode && cd /opt/remnanode
nano .env
APP_PORT=2222 SSL_CERT=CERT_FROM_MAIN_PANEL
APP_PORT - указываем любой, это порт для подключения к ноде с панели (но не 61001)
SSL_CERT=CERT_FROM_MAIN_PAN - полностью удаляем данную строку.
Переходим в основную панель panel.domen.com Раздел: Ноды- Управление -Создать новую ноду, нажимаем скопировать сертификат и вставляем полностью текст в файл nano.env вместо SSL_CERT=CERT_FROM_MAIN_PAN
Сохраняем данные, нажав Ctrl-X далее Y и Enter
nano docker-compose.yml
services:
remnanode:
container_name: remnanode
hostname: remnanode
image: remnawave/node:latest
restart: always
network_mode: host
env_file:
- .envСохраняем данные, нажав Ctrl-X далее Y и Enter
docker compose up -d
docker compose logs -f
Переходим в panel.domen.com и продолжаем добавление Ноды
Адрес панели указываем IP, порт тот который указали выше APP_PORT
4. Установка Selfsteel (SNI)
mkdir -p /opt/selfsteel && cd /opt/selfsteel && nano Caddyfile
{
https_port {$SELF_STEAL_PORT}
default_bind 127.0.0.1
servers {
listener_wrappers {
proxy_protocol {
allow 127.0.0.1/32
}
tls
}
}
auto_https disable_redirects
}
http://{$SELF_STEAL_DOMAIN} {
bind 0.0.0.0
redir https://{$SELF_STEAL_DOMAIN}{uri} permanent
}
https://{$SELF_STEAL_DOMAIN} {
root * /var/www/html
try_files {path} /index.html
file_server
}
:{$SELF_STEAL_PORT} {
tls internal
respond 204
}
:80 {
bind 0.0.0.0
respond 204
}
Сохраняем данные, нажав Ctrl-X далее Y и Enter
nano .env
и вставляем данные предварительно заменив steel.domen.com на домен для страницы заглушки
# Домены SELF_STEAL_DOMAIN=steel.domen.com #Должен совпадать с XRAY конфигом (realitySettings.serverNames) SELF_STEAL_PORT=9443 #Должен совпадать с XRAY конфигом (realitySettings.dest)
Сохраняем данные, нажав Ctrl-X далее Y и Enter
nano docker-compose.yml
services:
caddy:
image: caddy:2.9.1
container_name: caddy-remnawave
restart: unless-stopped
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ../html:/var/www/html
- ./logs:/var/log/caddy
- caddy_data_selfsteal:/data
- caddy_config_selfsteal:/config
env_file:
- .env
network_mode: "host"
volumes:
caddy_data_selfsteal:
caddy_config_selfsteal:Сохраняем данные, нажав Ctrl-X далее Y и Enter
docker compose up -d
docker compose logs -f
5. Настройка Конфиг
Переходим в панель по адресу panel.domen.com раздел конфиг и меняем данные предварительно заменим данные "меняем" и steel.domen.com(блок Shadowsocks можно в будущем удалить)
{
"log": {
"loglevel": "info"
},
"inbounds": [
{
"tag": "Shadowsocks",
"port": 1234,
"protocol": "shadowsocks",
"settings": {
"clients": [],
"network": "tcp,udp"
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
},
{
"tag": "VLESS",
"port": 443,
"listen": "0.0.0.0",
"protocol": "vless",
"settings": {
"clients": [],
"decryption": "none"
},
"sniffing": {
"enabled": true,
"routeOnly": false,
"destOverride": [
"http",
"tls",
"quic",
"fakedns"
],
"metadataOnly": false
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"tcpSettings": {
"header": {
"type": "none"
},
"acceptProxyProtocol": false
},
"realitySettings": {
"dest": "9443",
"show": false,
"xver": 0,
"spiderX": "/",
"shortIds": [
"Меняем"
],
"publicKey": "Меняем",
"privateKey": "Меняем",
"fingerprint": "chrome",
"serverNames": [
"steel.domen.com"
]
}
}
}
],
"outbounds": [
{
"tag": "DIRECT",
"protocol": "freedom"
},
{
"tag": "BLOCK",
"protocol": "blackhole"
}
],
"routing": {
"rules": [
{
"ip": [
"geoip:private"
],
"type": "field",
"outboundTag": "BLOCK"
},
{
"type": "field",
"domain": [
"geosite:private"
],
"outboundTag": "BLOCK"
},
{
"type": "field",
"protocol": [
"bittorrent"
],
"outboundTag": "BLOCK"
}
]
}
}Ключи можно сгенерировать на панели нажав
6. Добавление Хоста
Переходим в панель по адресу panel.domen.com раздел Хост
Добавляем хост, Указываем примечание, можно Инбаунд VLESS> адрес меняем на свой из пункта 4