Files
panel-vpn/internal/nodeinstall/compose.go
T

50 lines
1.5 KiB
Go

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()
}