11#! /bin/bash
2- # Module: Install Node
2+ # Module: Install Node Only
33
4- install_node_caddy () {
4+ install_node_nginx () {
55 # Load selfsteal templates module
66 load_selfsteal_templates_module
77
@@ -49,7 +49,11 @@ install_node_caddy() {
4949 exit 1
5050 fi
5151
52- cat > docker-compose.yml << EOL
52+ SELFSTEAL_BASE_DOMAIN=$( extract_domain " $SELFSTEAL_DOMAIN " )
53+
54+ unique_domains[" $SELFSTEAL_BASE_DOMAIN " ]=1
55+
56+ cat > docker-compose.yml << EOL
5357x-common: &common
5458 ulimits:
5559 nofile:
@@ -65,85 +69,104 @@ x-logging: &logging
6569 max-file: 5
6670
6771services:
68- caddy:
69- image: caddy:2.11.2
70- container_name: caddy-remnawave
71- hostname: caddy-remnawave
72- <<: [*common, *logging]
73- network_mode: host
74- volumes:
75- - ./Caddyfile:/etc/caddy/Caddyfile
76- - /var/www/html:/var/www/html:ro
77- - /dev/shm:/dev/shm:rw
78- - caddy_data:/data
79- command: sh -c 'rm -f /dev/shm/nginx.sock && caddy run --config /etc/caddy/Caddyfile --adapter caddyfile'
80- environment:
81- - CADDY_SOCKET_PATH=/dev/shm/nginx.sock
82- - SELF_STEAL_DOMAIN=${SELFSTEAL_DOMAIN}
83- healthcheck:
84- test: ["CMD", "test", "-S", "/dev/shm/nginx.sock"]
85- interval: 2s
86- timeout: 5s
87- retries: 15
88- start_period: 5s
89-
90- remnanode:
91- image: remnawave/node:latest
92- container_name: remnanode
93- hostname: remnanode
94- <<: [*common, *logging]
95- network_mode: host
96- cap_add:
97- - NET_ADMIN
98- environment:
99- - NODE_PORT=2222
100- - SECRET_KEY=$( echo -e " $CERTIFICATE " )
101- volumes:
102- - /dev/shm:/dev/shm:rw
103-
104- volumes:
105- caddy_data:
106- name: caddy_data
107- driver: local
108- external: false
72+ remnawave-nginx:
73+ image: nginx:1.28
74+ container_name: remnawave-nginx
75+ hostname: remnawave-nginx
76+ <<: [*common, *logging]
77+ network_mode: host
78+ volumes:
79+ - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
10980EOL
110-
111- cat > /opt/remnanode/Caddyfile << EOL
112- {
113- admin off
114- servers {
115- listener_wrappers {
116- proxy_protocol
117- tls
118- }
119- }
120- auto_https disable_redirects
12181}
12282
123- http://{\$ SELF_STEAL_DOMAIN} {
124- bind 0.0.0.0
125- redir https://{\$ SELF_STEAL_DOMAIN}{uri} permanent
83+ installation_node () {
84+ echo -e " ${COLOR_YELLOW}${LANG[INSTALLING_NODE]}${COLOR_RESET} "
85+ sleep 1
86+
87+ declare -A unique_domains
88+ install_node_nginx
89+
90+ declare -A domains_to_check
91+ domains_to_check[" $SELFSTEAL_DOMAIN " ]=1
92+
93+ handle_certificates domains_to_check " $CERT_METHOD " " $LETSENCRYPT_EMAIL "
94+
95+ if [ -z " $CERT_METHOD " ]; then
96+ local base_domain=$( extract_domain " $SELFSTEAL_DOMAIN " )
97+ if [ -d " /etc/letsencrypt/live/$base_domain " ] && is_wildcard_cert " $base_domain " ; then
98+ CERT_METHOD=" 1"
99+ else
100+ CERT_METHOD=" 2"
101+ fi
102+ fi
103+
104+ if [ " $CERT_METHOD " == " 1" ]; then
105+ local base_domain=$( extract_domain " $SELFSTEAL_DOMAIN " )
106+ NODE_CERT_DOMAIN=" $base_domain "
107+ else
108+ NODE_CERT_DOMAIN=" $SELFSTEAL_DOMAIN "
109+ fi
110+
111+ cat >> /opt/remnanode/docker-compose.yml << EOL
112+ - /dev/shm:/dev/shm:rw
113+ - /var/www/html:/var/www/html:ro
114+ command: sh -c 'rm -f /dev/shm/nginx.sock && exec nginx -g "daemon off;"'
115+
116+ remnanode:
117+ image: remnawave/node:latest
118+ container_name: remnanode
119+ hostname: remnanode
120+ <<: [*common, *logging]
121+ network_mode: host
122+ cap_add:
123+ - NET_ADMIN
124+ environment:
125+ - NODE_PORT=2222
126+ - SECRET_KEY=$( echo -e " $CERTIFICATE " )
127+ volumes:
128+ - /dev/shm:/dev/shm:rw
129+ EOL
130+
131+ cat > /opt/remnanode/nginx.conf << EOL
132+ server_names_hash_bucket_size 64;
133+
134+ map \$ http_upgrade \$ connection_upgrade {
135+ default upgrade;
136+ "" close;
126137}
127138
128- https://{\$ SELF_STEAL_DOMAIN} {
129- bind unix/{\$ CADDY_SOCKET_PATH}
130- root * /var/www/html
131- try_files {path} /index.html
132- file_server
139+ ssl_protocols TLSv1.2 TLSv1.3;
140+ ssl_ecdh_curve X25519:prime256v1:secp384r1;
141+ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
142+ ssl_prefer_server_ciphers on;
143+ ssl_session_timeout 1d;
144+ ssl_session_cache shared:MozSSL:10m;
145+ ssl_session_tickets off;
146+
147+ server {
148+ server_name $SELFSTEAL_DOMAIN ;
149+ listen unix:/dev/shm/nginx.sock ssl proxy_protocol;
150+ http2 on;
151+
152+ ssl_certificate "/etc/nginx/ssl/$NODE_CERT_DOMAIN /fullchain.pem";
153+ ssl_certificate_key "/etc/nginx/ssl/$NODE_CERT_DOMAIN /privkey.pem";
154+ ssl_trusted_certificate "/etc/nginx/ssl/$NODE_CERT_DOMAIN /fullchain.pem";
155+
156+ root /var/www/html;
157+ index index.html;
158+ add_header X-Robots-Tag "noindex, nofollow, noarchive, nosnippet, noimageindex" always;
133159}
134160
135- :80 {
136- bind 0.0.0.0
137- respond 204
161+ server {
162+ listen unix:/dev/shm/nginx.sock ssl proxy_protocol default_server;
163+ server_name _;
164+ add_header X-Robots-Tag "noindex, nofollow, noarchive, nosnippet, noimageindex" always;
165+ ssl_reject_handshake on;
166+ return 444;
138167}
139168EOL
140- }
141169
142- installation_node_caddy () {
143- echo -e " ${COLOR_YELLOW}${LANG[INSTALLING_NODE]}${COLOR_RESET} "
144- install_node_caddy
145-
146- ufw allow 80/tcp comment ' HTTP' > /dev/null 2>&1
147170 ufw allow from $PANEL_IP to any port 2222 > /dev/null 2>&1
148171 ufw reload > /dev/null 2>&1
149172
@@ -177,4 +200,4 @@ installation_node_caddy() {
177200 fi
178201 (( attempt++ ))
179202 done
180- }
203+ }
0 commit comments