Add node mode with SSH auto-install and Remnawave-style manual deploy.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package nodeinstall
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/orohi/vpn-panel/internal/models"
|
||||
)
|
||||
|
||||
const AgentVersion = "0.1.0"
|
||||
|
||||
func ComposeYAML(n *models.Node) string {
|
||||
return fmt.Sprintf(`services:
|
||||
vpn-node:
|
||||
container_name: vpn-panel-node
|
||||
image: alpine:3.21
|
||||
restart: unless-stopped
|
||||
network_mode: host
|
||||
environment:
|
||||
NODE_NAME: %q
|
||||
NODE_PORT: %q
|
||||
SECRET_KEY: %q
|
||||
AGENT_VERSION: %q
|
||||
volumes:
|
||||
- ./vpn-node:/usr/local/bin/vpn-node:ro
|
||||
- ./data:/var/lib/vpn-node
|
||||
command: ["/usr/local/bin/vpn-node"]
|
||||
`, n.Name, fmt.Sprintf("%d", n.NodePort), n.SecretKey, AgentVersion)
|
||||
}
|
||||
|
||||
func ManualInstallScript(n *models.Node) string {
|
||||
compose := ComposeYAML(n)
|
||||
var b strings.Builder
|
||||
b.WriteString("#!/usr/bin/env bash\n")
|
||||
b.WriteString("set -euo pipefail\n\n")
|
||||
b.WriteString("sudo curl -fsSL https://get.docker.com | sh\n")
|
||||
b.WriteString("sudo mkdir -p /opt/vpn-panel-node/data\n")
|
||||
b.WriteString("cd /opt/vpn-panel-node\n\n")
|
||||
b.WriteString("cat > docker-compose.yml <<'EOF'\n")
|
||||
b.WriteString(compose)
|
||||
b.WriteString("EOF\n\n")
|
||||
b.WriteString("# Скопируйте бинарник vpn-node (linux amd64) в /opt/vpn-panel-node/vpn-node\n")
|
||||
b.WriteString("# chmod +x /opt/vpn-panel-node/vpn-node\n")
|
||||
b.WriteString("# docker compose up -d && docker compose logs -f -t\n")
|
||||
b.WriteString("\necho \"NODE_PORT=")
|
||||
b.WriteString(fmt.Sprintf("%d", n.NodePort))
|
||||
b.WriteString(" — откройте его только для IP панели\"\n")
|
||||
return b.String()
|
||||
}
|
||||
Reference in New Issue
Block a user