# πŸš€ Π€Π˜ΠΠΠ›Π¬ΠΠ«Π™ DEPLOYMENT БКРИПВ bash `#!/bin/bash # ~/deploy-both.sh # Deployment script for German VPN server + Russian VDS set -e echo "╔═════════════════════════════════════════════════════════╗" echo "β•‘ πŸš€ DUAL SERVER NIXOS DEPLOYMENT (nixos-anywhere) β•‘" echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•" echo "" # ============================================================ # CONFIG # ============================================================ GERMAN_REPO="$HOME/nix-server" RUSSIAN_REPO="$HOME/vds-ru" GERMAN_SERVER="root@64.188.70.209" RUSSIAN_SERVER="root@176.108.250.130" # ============================================================ # FUNCTION: Deploy one server # ============================================================ deploy_server() { local REPO="$1" local SERVER="$2" local SERVER_NAME="$3" local GENERATE_SECRETS="$4" # "yes" or "no" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "🎯 DEPLOYING: $SERVER_NAME" echo " Repo: $REPO" echo " Server: $SERVER" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" cd "$REPO" # Generate secrets if needed if [ "$GENERATE_SECRETS" = "yes" ]; then echo "πŸ“ Generating secrets..." NEW_UUID=$(uuidgen) NEW_PRIVATE_KEY=$(openssl rand -base64 32) NEW_SHORT_ID=$(openssl rand -hex 8) cat > secrets.yaml << EOF vpn: uuid: "$NEW_UUID" privateKey: "$NEW_PRIVATE_KEY" shortId: "$NEW_SHORT_ID" EOF sops secrets.yaml echo "βœ… Secrets encrypted" echo "" fi # Backup echo "πŸ’Ύ Creating backup..." mkdir -p ~/backups ssh "$SERVER" 'tar czf /tmp/backup.tar.gz /etc/nixos/ /var/lib/sing-box/ 2>/dev/null || true' 2>/dev/null || true BACKUP_NAME="$(echo $SERVER | cut -d'@' -f2)-backup-$(date +%Y-%m-%d-%H%M%S).tar.gz" scp "$SERVER":/tmp/backup.tar.gz ~/backups/"$BACKUP_NAME" 2>/dev/null || echo "⚠️ Backup skipped" echo "βœ… Backup: $BACKUP_NAME" echo "" # Deploy echo "πŸš€ Running nixos-anywhere..." echo " (this will take 5-10 minutes)" echo "" nixos-anywhere --flake .#server "$SERVER" echo "" echo "⏳ Waiting for system to boot (120 seconds)..." sleep 120 echo "βœ… Boot complete" echo "" # Verify echo "πŸ” Verifying deployment..." echo "" # Try to find the non-root user (nxoska or similar) NON_ROOT_USER=$(ssh "$SERVER" 'getent passwd | grep -E ":(1000|1001):" | cut -d: -f1 | head -1') if [ -z "$NON_ROOT_USER" ]; then NON_ROOT_USER="root" fi VERIFY_SERVER="${NON_ROOT_USER}@$(echo $SERVER | cut -d'@' -f2)" ssh "$VERIFY_SERVER" << 'VERIFY_SCRIPT' echo "=== Uptime ===" uptime echo "" echo "=== System Status ===" systemctl is-system-running echo "" echo "=== Time Synchronization ===" timedatectl status | head -4 echo "" echo "=== sing-box Service (if applicable) ===" sudo systemctl status sing-box --no-pager 2>/dev/null | head -8 || echo "N/A (not a VPN server)" echo "" echo "=== Port 443 (if applicable) ===" sudo ss -tulpn 2>/dev/null | grep 443 || echo "N/A (not listening)" echo "" echo "=== NixOS Generation ===" sudo nixos-rebuild list-generations | head -3 VERIFY_SCRIPT echo "" echo "βœ… $SERVER_NAME deployment complete!" echo "" echo "" } # ============================================================ # MAIN: Ask user which servers to deploy # ============================================================ echo "Which servers do you want to deploy?" echo "" echo "1) German server only (nix-server VPN)" echo "2) Russian server only (vds-ru)" echo "3) Both servers" echo "" read -p "Choose [1-3]: " CHOICE case $CHOICE in 1) deploy_server "$GERMAN_REPO" "$GERMAN_SERVER" "German Server (VPN)" "yes" ;; 2) deploy_server "$RUSSIAN_REPO" "$RUSSIAN_SERVER" "Russian Server (VDS)" "no" ;; 3) deploy_server "$GERMAN_REPO" "$GERMAN_SERVER" "German Server (VPN)" "yes" deploy_server "$RUSSIAN_REPO" "$RUSSIAN_SERVER" "Russian Server (VDS)" "no" ;; *) echo "❌ Invalid choice!" exit 1 ;; esac # ============================================================ # FINAL STATUS # ============================================================ echo "╔═════════════════════════════════════════════════════════╗" echo "β•‘ βœ… DEPLOYMENT COMPLETED SUCCESSFULLY! β•‘" echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•" echo "" echo "πŸ“ Next steps:" echo " 1. Test your services" echo " 2. Commit changes to git:" echo " cd ~/nix-server && git add . && git commit -m 'πŸš€ Deploy with nixos-anywhere'" echo " git push" echo "" echo "πŸ“š Documentation:" echo " See: server-deployment.md" echo ""` --- ## КАК Π˜Π‘ΠŸΠžΠ›Π¬Π—ΠžΠ’ΠΠ’Π¬ 🎬 bash `# 1. Π‘ΠΎΠ·Π΄Π°ΠΉ скрипт cat > ~/deploy-both.sh << 'PASTE_ENTIRE_SCRIPT_ABOVE' # 2. Π”Π°ΠΉ ΠΏΡ€Π°Π²Π° chmod +x ~/deploy-both.sh # 3. Запусти ~/deploy-both.sh # 4. Π’Ρ‹Π±Π΅Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: # 1 = German only # 2 = Russian only # 3 = Both` ---