hostinger-django-demo/setup-multi-webhook.sh
thecyberlearn 996c50841b 🚀 TRANSFORM: Django VPS Deployment Toolkit
🔄 Complete transformation from mixed demo project to pure deployment toolkit

REMOVED:
 Django demo project (core/, demo_project/, manage.py, requirements.txt)
 Demo-specific files and configurations
 Mixed-purpose confusion

RESTRUCTURED:
 deploy-django-project.sh - Universal Django deployment
 setup-django-user.sh - VPS user setup
 setup-multi-webhook.sh - Auto-deploy webhooks
 webhook-router.py - Multi-project webhook handler
 templates/ - Configuration templates
 Clean root-level organization

NEW PURPOSE:
🎯 Universal toolkit to deploy ANY Django project to VPS
🏷️ Auto-extracts GitHub repo names
🔄 Multi-project support with path-based routing
📡 GitHub webhook auto-deploy integration
🔒 Secure non-root deployment

BENEFITS:
- Deploy any Django project with one command
- Zero configuration required
- Professional deployment toolkit
- Reusable for unlimited projects
- Industry-standard VPS setup

Now it's a PURE deployment toolkit, not a demo project! 🎉
2025-08-30 09:38:51 +05:30

168 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
"""
Multi-Project Webhook Router Setup Script
Sets up centralized webhook receiver for multiple Django projects
"""
set -e
echo "🔄 Setting up Multi-Project Webhook Router..."
# Configuration
WEBHOOK_SECRET=${1:-$(openssl rand -hex 32)}
SERVICE_USER="django"
WEBHOOK_PATH="/var/www/webhook-manager"
WEBHOOK_ROUTER_PATH="$WEBHOOK_PATH/webhook-router.py"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
# Create webhook manager directory
echo -e "${YELLOW}📦 Setting up webhook manager...${NC}"
mkdir -p "$WEBHOOK_PATH"
# Copy webhook router
cp "$(dirname "$0")/webhook-router.py" "$WEBHOOK_ROUTER_PATH"
chown -R django:www-data "$WEBHOOK_PATH"
chmod +x "$WEBHOOK_ROUTER_PATH"
# Install Flask if not present
echo -e "${YELLOW}📦 Installing Flask...${NC}"
sudo -u django bash -c "cd $WEBHOOK_PATH && python3 -m venv venv && source venv/bin/activate && pip install flask"
# Create webhook secret file
echo -e "${YELLOW}🔐 Setting up webhook secret...${NC}"
echo "WEBHOOK_SECRET=$WEBHOOK_SECRET" > "$WEBHOOK_PATH/.env"
chown django:www-data "$WEBHOOK_PATH/.env"
chmod 600 "$WEBHOOK_PATH/.env"
echo -e "${GREEN}🔑 Webhook Secret: $WEBHOOK_SECRET${NC}"
echo -e "${YELLOW}📝 Save this secret - you'll need it for GitHub webhook configuration!${NC}"
# Create systemd service file
echo -e "${YELLOW}⚙️ Creating systemd service...${NC}"
cat > /etc/systemd/system/django-webhook-router.service << EOF
[Unit]
Description=Django Multi-Project Webhook Router
After=network.target
[Service]
Type=simple
User=$SERVICE_USER
Group=www-data
WorkingDirectory=$WEBHOOK_PATH
Environment=PYTHONPATH=$WEBHOOK_PATH
EnvironmentFile=$WEBHOOK_PATH/.env
ExecStart=$WEBHOOK_PATH/venv/bin/python $WEBHOOK_ROUTER_PATH
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
# Create main nginx configuration with webhook routing
echo -e "${YELLOW}🌐 Configuring Nginx for multi-project...${NC}"
cat > /etc/nginx/sites-available/django-multi-projects << 'EOF'
server {
listen 80 default_server;
server_name _;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
# Webhook endpoints (centralized)
location /webhook {
proxy_pass http://127.0.0.1:8001/webhook;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Health check endpoint
location /health {
proxy_pass http://127.0.0.1:8001/health;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Deployment status endpoint
location /deploy-status {
proxy_pass http://127.0.0.1:8001/status;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Root endpoint - show project list
location = / {
proxy_pass http://127.0.0.1:8001/health;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Include project-specific configurations
include /etc/nginx/conf.d/projects/*.conf;
}
EOF
# Create directory for project-specific nginx configs
mkdir -p /etc/nginx/conf.d/projects/
# Disable default nginx site and enable multi-project
rm -f /etc/nginx/sites-enabled/default
ln -sf /etc/nginx/sites-available/django-multi-projects /etc/nginx/sites-enabled/django-multi-projects
# Start and enable services
echo -e "${YELLOW}🚀 Starting services...${NC}"
systemctl daemon-reload
systemctl enable django-webhook-router.service
systemctl start django-webhook-router.service
# Test nginx and restart
nginx -t && systemctl restart nginx
# Check service status
if systemctl is-active --quiet django-webhook-router.service; then
echo -e "${GREEN}✅ Multi-Project Webhook Router is running${NC}"
else
echo -e "${RED}❌ Webhook router failed to start${NC}"
echo "Check logs: journalctl -u django-webhook-router.service -f"
exit 1
fi
echo -e "${GREEN}🎉 Multi-Project Webhook Setup Complete!${NC}"
echo
echo -e "${YELLOW}📋 Configuration:${NC}"
echo -e "1. 🔐 Webhook Secret: ${GREEN}$WEBHOOK_SECRET${NC}"
echo -e "2. 🌐 Webhook URL: ${GREEN}http://YOUR_VPS_IP/webhook${NC}"
echo -e "3. 📊 Status URL: ${GREEN}http://YOUR_VPS_IP/deploy-status${NC}"
echo -e "4. ❤️ Health Check: ${GREEN}http://YOUR_VPS_IP/health${NC}"
echo
echo -e "${YELLOW}📝 GitHub Webhook Setup:${NC}"
echo -e "- Go to each repository → Settings → Webhooks → Add webhook"
echo -e "- Payload URL: http://YOUR_VPS_IP/webhook"
echo -e "- Content type: application/json"
echo -e "- Secret: $WEBHOOK_SECRET"
echo -e "- Events: Just the push event"
echo
echo -e "${YELLOW}🚀 Deploy Projects:${NC}"
echo -e "sudo bash deploy/deploy-project.sh https://github.com/user/repo.git"
echo
echo -e "${YELLOW}🔍 Monitoring:${NC}"
echo -e "- Router logs: ${GREEN}journalctl -u django-webhook-router.service -f${NC}"
echo -e "- All projects: ${GREEN}http://YOUR_VPS_IP/deploy-status${NC}"
echo
echo -e "${GREEN}🎯 Your VPS now supports unlimited Django projects with auto-deploy!${NC}"