53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
package nodeinstall
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/orohi/vpn-panel/internal/models"
|
|
)
|
|
|
|
const AgentVersion = "0.3.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
|
|
DATA_DIR: /var/lib/vpn-node
|
|
HOST_DATA_DIR: /opt/vpn-panel-node/data
|
|
volumes:
|
|
- ./vpn-node:/usr/local/bin/vpn-node:ro
|
|
- ./data:/var/lib/vpn-node
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
command: ["sh", "-c", "apk add --no-cache docker-cli >/dev/null && exec /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()
|
|
}
|