#!/usr/bin/env bash # Скрипт инициализации ноды. # 1. Скачивает случайный шаблон сайта и разворачивает его в /var/www/html. # 2. Создаёт докер-сеть, указанную в docker-compose.yml. # 3. Запрашивает необходимые параметры у пользователя и записывает их в .env. # 4. Открывает порт панели только для центрального сервера. # 5. Запускает docker compose. set -euo pipefail # --- Шаг 1: загрузка случайного шаблона сайта --- TMP_DIR=$(mktemp -d) git clone --depth 1 https://github.com/SmallPoppa/sni-templates "$TMP_DIR" >/dev/null 2>&1 TEMPLATE_DIR=$(find "$TMP_DIR" -mindepth 1 -maxdepth 1 -type d ! -name '.git' | shuf -n 1) if [ -d /var/www/html ] && [ "$(ls -A /var/www/html 2>/dev/null)" ]; then rm -rf /var/www/html_bac mv /var/www/html /var/www/html_bac else rm -rf /var/www/html fi mkdir -p /var/www/html cp -R "$TEMPLATE_DIR"/. /var/www/html/ rm -rf /var/www/html/.git "$TMP_DIR" # --- Шаг 2: создание докер-сети --- N=$(awk '/^networks:/,/^[^[:space:]]/{if($1=="name:"){print $2; exit}}' docker-compose.yml); N=${N:-proxy} docker network inspect "$N" >/dev/null 2>&1 || docker network create --driver bridge --attachable "$N" # --- Шаг 3: запрос параметров --- read -rp "APP_PORT: " APP_PORT read -rp "SSL_CERT: " SSL_CERT read -rp "NODE_DOMAIN: " NODE_DOMAIN read -rp "CW_CLIENT_AES_KEY_BASE64: " CW_CLIENT_AES_KEY_BASE64 read -rp "CW_CLIENT_KEY_APIKEY: " CW_CLIENT_KEY_APIKEY read -rp "CW_CLIENT_CERT_APIKEY: " CW_CLIENT_CERT_APIKEY SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ENV_FILE="$SCRIPT_DIR/.env" touch "$ENV_FILE" update_env_var() { local key="$1" local value="$2" sed -i "/^${key}=.*/d" "$ENV_FILE" printf '%s="%s"\n' "$key" "$value" >> "$ENV_FILE" } update_env_var APP_PORT "$APP_PORT" update_env_var SSL_CERT "$SSL_CERT" update_env_var NODE_DOMAIN "$NODE_DOMAIN" update_env_var CW_CLIENT_AES_KEY_BASE64 "$CW_CLIENT_AES_KEY_BASE64" update_env_var CW_CLIENT_KEY_APIKEY "$CW_CLIENT_KEY_APIKEY" update_env_var CW_CLIENT_CERT_APIKEY "$CW_CLIENT_CERT_APIKEY" # --- Шаг 4: открытие порта только для центрального сервера --- read -rp "IP или домен центрального сервера: " CENTRAL_HOST CENTRAL_IP=$(getent ahosts "$CENTRAL_HOST" | awk '{print $1; exit}') if [ -n "$CENTRAL_IP" ]; then iptables -C INPUT -p tcp -s "$CENTRAL_IP" --dport "$APP_PORT" -j ACCEPT 2>/dev/null \ || iptables -I INPUT -p tcp -s "$CENTRAL_IP" --dport "$APP_PORT" -j ACCEPT fi # --- Шаг 5: запуск docker compose --- docker compose up -d