Files
wireguard-vpn/install.sh
T
datadunia 6e94e7338e feat: add Docker deployment, update install script, and project configs
- Add Dockerfile and docker-compose.yml for containerized deployment
- Rewrite install.sh for Docker-based setup (multi-distro support)
- Add Go module files (go.mod, go.sum) for WGRplane backend
- Add wgrplane.service systemd unit for Go backend
- Add CI verification scripts in scripts/
- Update README.md with Docker deployment docs
- Update .gitignore for binaries and .sisyphus/
2026-05-03 23:37:36 +07:00

130 lines
5.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
echo "[WGRplane] Easy Install Script install.sh"
# Detect OS
if [ -f /etc/os-release ]; then
. /etc/os-release
fi
OS_ID=${ID:-unknown}
OS_CODENAME=${VERSION_CODENAME:-unknown}
echo "Detected OS: $OS_ID ($OS_CODENAME)"
install_docker_apt() {
echo "[WGRplane] Installing Docker and dependencies via apt (Debian/Ubuntu)..."
sudo apt-get update -y
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# Try to install docker.io as the simplest path
if ! command -v docker >/dev/null 2>&1; then
if apt-cache show docker.io >/dev/null 2>&1; then
sudo apt-get install -y docker.io
else
echo "[WGRplane] Fallback: installing docker-ce from Docker's official repo..."
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
rm -f get-docker.sh
fi
fi
sudo systemctl enable --now docker || true
# Install Docker Compose (plugin-based or legacy)
if command -v docker-compose >/dev/null 2>&1; then
echo "[WGRplane] docker-compose already installed (legacy)."
elif command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
echo "[WGRplane] docker-compose is available as a Docker plugin (docker compose)."
else
echo "[WGRplane] Installing docker-compose (latest)"
# Try to install the latest release without hardcoding version
if command -v curl >/dev/null 2>&1; then
LATEST_URL=$(curl -fsSL https://api.github.com/repos/docker/compose/releases/latest 2>/dev/null | grep -o 'https://[^\"]*linux-$(uname -m\)' || true)
if [ -z "$LATEST_URL" ]; then
LATEST_URL="https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)"
fi
sudo sh -c "curl -L $LATEST_URL -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose"
if command -v docker-compose >/dev/null 2>&1; then
echo "[WGRplane] docker-compose installed at /usr/local/bin/docker-compose"
fi
else
echo "[WGRplane] curl not available. Skipping docker-compose installation."
fi
fi
}
install_docker_yum() {
echo "[WGRplane] Installing Docker via yum/dnf (CentOS/RHEL)..."
if command -v dnf >/dev/null 2>&1; then
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
else
sudo yum -y install yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum -y install docker-ce docker-ce-cli containerd.io
fi
sudo systemctl enable --now docker || true
}
case "$OS_ID" in
ubuntu|debian)
install_docker_apt
;;
centos|fedora|rhel|amazon)
install_docker_yum
;;
*)
echo "[WGRplane] Unsupported OS for automated install. Please install Docker manually."; exit 1
;;
esac
echo "[WGRplane] Docker verification: $(docker --version 2>&1 || echo 'not found')"
if command -v docker-compose >/dev/null 2>&1; then
echo "[WGRplane] docker-compose is available: $(docker-compose --version 2>&1)"
elif command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
echo "[WGRplane] docker compose (plugin) is available: $(docker compose version | tr -d '\n')"
else
echo "[WGRplane] Docker Compose not detected. Attempting to install via Docker plugin if possible..."
fi
# Clone repo if not present
REPO_URL_VAR="${GIT_REPO:-}"
if [ -d .git ]; then
echo "[WGRplane] Repository already present. Skipping clone."
elif [ -n "$REPO_URL_VAR" ]; then
echo "[WGRplane] Cloning repository from $REPO_URL_VAR"
git clone "$REPO_URL_VAR" . || { echo "[WGRplane] Clone failed."; exit 1; }
else
echo "[WGRplane] GIT_REPO not set. Skipping clone. You can export GIT_REPO=https://... before running."
fi
# Create a default .env if missing
ENV_FILE=".env"
if [ ! -f "$ENV_FILE" ]; then
echo "[WGRplane] Creating default .env file at $ENV_FILE"
cat > "$ENV_FILE" <<'EOF'
# Auto-generated environment file for WGRplane
WGRPLANE_ENV=production
WG_INTERFACE=wg0
WG_CONF_PATH=/etc/wireguard/wg0.conf
EOF
else
echo "[WGRplane] .env already exists. Skipping creation."
fi
# Start application with docker-compose
echo "[WGRplane] Starting application with docker-compose..."
if command -v docker-compose >/dev/null 2>&1; then
sudo docker-compose up -d || { echo "[WGRplane] docker-compose up failed."; exit 1; }
elif command -v docker >/dev/null 2>&1; then
if docker compose version >/dev/null 2>&1; then
sudo docker compose up -d || { echo "[WGRplane] docker compose up failed."; exit 1; }
else
echo "[WGRplane] Docker Compose plugin not installed. Please install docker-compose or enable docker compose plugin."; exit 1
fi
else
echo "[WGRplane] Docker is not installed or not found in PATH. Cannot start application."; exit 1
fi
echo "[WGRplane] Install script completed. Check with: docker ps -a; docker-compose ps; wg-policy-ctl status (depending on your setup)."