6e94e7338e
- 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/
130 lines
5.0 KiB
Bash
130 lines
5.0 KiB
Bash
#!/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)."
|