quicktool/deploy_naive.sh

153 lines
3.7 KiB
Bash

#!/bin/bash
# Function to check if command succeeded
check_error() {
if [ $? -ne 0 ]; then
echo "Error: $1"
exit 1
fi
}
# Check if script is run as root
if [ "$EUID" -ne 0 ]; then
echo "Please run as root (with sudo)"
exit 1
fi
# Check for required commands
if ! command -v wget &> /dev/null; then
echo "wget is required but not installed. Installing..."
apt-get update && apt-get install -y wget
check_error "Failed to install wget"
fi
# Check if port 8443 is available
if netstat -tuln | grep -q ':8443 '; then
echo "Error: Port 8443 is already in use"
exit 1
fi
# Collect user input
while true; do
read -p "Enter your domain (e.g., usnode1.xorbit.link): " DOMAIN
if [[ $DOMAIN =~ ^[a-zA-Z0-9][a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
break
else
echo "Invalid domain format. Please try again."
fi
done
# Generate email automatically
EMAIL="example@${DOMAIN}"
read -p "Enter desired username for proxy: " PROXY_USER
check_error "Username cannot be empty"
read -s -p "Enter desired password for proxy: " PROXY_PASS
echo
check_error "Password cannot be empty"
# Create temporary directory for downloads
TEMP_DIR=$(mktemp -d)
cd "$TEMP_DIR" || exit 1
# Install Go 1.22
echo "Installing Go 1.22..."
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
check_error "Failed to download Go"
rm -rf /usr/local/go
tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
check_error "Failed to extract Go"
# Add Go to PATH if not already added
if ! grep -q "/usr/local/go/bin" /etc/profile; then
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
fi
source /etc/profile
# Install xcaddy and build caddy with forwardproxy
echo "Building Caddy with forwardproxy..."
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
check_error "Failed to install xcaddy"
~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy=github.com/klzgrad/forwardproxy@naive
check_error "Failed to build Caddy"
# Copy caddy to /usr/bin
cp caddy /usr/bin/
chmod +x /usr/bin/caddy
check_error "Failed to install Caddy"
# Create service file
echo "Creating service file..."
cat > /etc/systemd/system/naive.service << EOL
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
User=root
Group=root
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
EOL
# Create required directories
mkdir -p /etc/caddy /var/www/html
check_error "Failed to create required directories"
# Create Caddyfile with user input
cat > /etc/caddy/Caddyfile << EOL
{
https_port 8443
}
:8443, ${DOMAIN}
tls ${EMAIL}
route {
forward_proxy {
basic_auth ${PROXY_USER} ${PROXY_PASS}
hide_ip
hide_via
probe_resistance
}
file_server {
root /var/www/html
}
}
EOL
# Start and enable service
echo "Starting naive proxy service..."
systemctl daemon-reload
systemctl enable naive
systemctl start naive
check_error "Failed to start naive service"
# Cleanup
cd - || exit 1
rm -rf "$TEMP_DIR"
echo "NaiveProxy deployment completed successfully!"
echo "Your proxy is available at: ${DOMAIN}:8443"
echo "Username: ${PROXY_USER}"
echo "Password: ${PROXY_PASS}"
# Check if service is running
if systemctl is-active --quiet naive; then
echo "Service is running properly"
else
echo "Warning: Service is not running. Please check logs with: journalctl -u naive"
fi