mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 14:31:08 -05:00
Add Road Trip Planner template with interactive map and trip management features
- Implemented a new HTML template for the Road Trip Planner. - Integrated Leaflet.js for interactive mapping and routing. - Added functionality for searching and selecting parks to include in a trip. - Enabled drag-and-drop reordering of selected parks. - Included trip optimization and route calculation features. - Created a summary display for trip statistics. - Added functionality to save trips and manage saved trips. - Enhanced UI with responsive design and dark mode support.
This commit is contained in:
268
scripts/setup-vm-ci.sh
Executable file
268
scripts/setup-vm-ci.sh
Executable file
@@ -0,0 +1,268 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ThrillWiki VM CI Setup Script
|
||||
# This script helps set up the VM deployment system
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
log() {
|
||||
echo -e "${BLUE}[SETUP]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Configuration prompts
|
||||
prompt_config() {
|
||||
log "Setting up ThrillWiki VM CI/CD system..."
|
||||
echo
|
||||
|
||||
read -p "Enter your VM IP address: " VM_IP
|
||||
read -p "Enter your VM username (default: ubuntu): " VM_USER
|
||||
VM_USER=${VM_USER:-ubuntu}
|
||||
|
||||
read -p "Enter your GitHub repository URL: " REPO_URL
|
||||
read -p "Enter your GitHub webhook secret: " WEBHOOK_SECRET
|
||||
|
||||
read -p "Enter local webhook port (default: 9000): " WEBHOOK_PORT
|
||||
WEBHOOK_PORT=${WEBHOOK_PORT:-9000}
|
||||
|
||||
read -p "Enter VM project path (default: /home/$VM_USER/thrillwiki): " VM_PROJECT_PATH
|
||||
VM_PROJECT_PATH=${VM_PROJECT_PATH:-/home/$VM_USER/thrillwiki}
|
||||
}
|
||||
|
||||
# Create SSH key
|
||||
setup_ssh() {
|
||||
log "Setting up SSH keys..."
|
||||
|
||||
local ssh_key_path="$HOME/.ssh/thrillwiki_vm"
|
||||
|
||||
if [ ! -f "$ssh_key_path" ]; then
|
||||
ssh-keygen -t rsa -b 4096 -f "$ssh_key_path" -N ""
|
||||
log_success "SSH key generated: $ssh_key_path"
|
||||
|
||||
log "Please copy the following public key to your VM:"
|
||||
echo "---"
|
||||
cat "$ssh_key_path.pub"
|
||||
echo "---"
|
||||
echo
|
||||
log "Run this on your VM:"
|
||||
echo "mkdir -p ~/.ssh && echo '$(cat "$ssh_key_path.pub")' >> ~/.ssh/***REMOVED*** && chmod 600 ~/.ssh/***REMOVED***"
|
||||
echo
|
||||
read -p "Press Enter when you've added the key to your VM..."
|
||||
else
|
||||
log "SSH key already exists: $ssh_key_path"
|
||||
fi
|
||||
|
||||
# Test SSH connection
|
||||
log "Testing SSH connection..."
|
||||
if ssh -i "$ssh_key_path" -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$VM_USER@$VM_IP" "echo 'SSH connection successful'"; then
|
||||
log_success "SSH connection test passed"
|
||||
else
|
||||
log_error "SSH connection test failed"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Create environment file
|
||||
create_env_file() {
|
||||
log "Creating webhook environment file..."
|
||||
|
||||
cat > ***REMOVED***.webhook << EOF
|
||||
# ThrillWiki Webhook Configuration
|
||||
WEBHOOK_PORT=$WEBHOOK_PORT
|
||||
WEBHOOK_SECRET=$WEBHOOK_SECRET
|
||||
VM_HOST=$VM_IP
|
||||
VM_PORT=22
|
||||
VM_USER=$VM_USER
|
||||
VM_KEY_PATH=$HOME/.ssh/thrillwiki_vm
|
||||
VM_PROJECT_PATH=$VM_PROJECT_PATH
|
||||
REPO_URL=$REPO_URL
|
||||
DEPLOY_BRANCH=main
|
||||
EOF
|
||||
|
||||
log_success "Environment file created: ***REMOVED***.webhook"
|
||||
}
|
||||
|
||||
# Setup VM
|
||||
setup_vm() {
|
||||
log "Setting up VM environment..."
|
||||
|
||||
local ssh_key_path="$HOME/.ssh/thrillwiki_vm"
|
||||
|
||||
# Create setup script for VM
|
||||
cat > /tmp/vm_setup.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "Setting up VM for ThrillWiki deployment..."
|
||||
|
||||
# Update system
|
||||
sudo apt update
|
||||
|
||||
# Install required packages
|
||||
sudo apt install -y git curl build-essential python3-pip lsof
|
||||
|
||||
# Install UV if not present
|
||||
if ! command -v uv &> /dev/null; then
|
||||
echo "Installing UV..."
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
source ~/.cargo/env
|
||||
fi
|
||||
|
||||
# Clone repository if not present
|
||||
if [ ! -d "thrillwiki" ]; then
|
||||
echo "Cloning repository..."
|
||||
git clone REPO_URL_PLACEHOLDER thrillwiki
|
||||
fi
|
||||
|
||||
cd thrillwiki
|
||||
|
||||
# Install dependencies
|
||||
uv sync
|
||||
|
||||
# Create directories
|
||||
mkdir -p logs backups
|
||||
|
||||
# Make scripts executable
|
||||
chmod +x scripts/*.sh
|
||||
|
||||
echo "VM setup completed successfully!"
|
||||
EOF
|
||||
|
||||
# Replace placeholder with actual repo URL
|
||||
sed -i.bak "s|REPO_URL_PLACEHOLDER|$REPO_URL|g" /tmp/vm_setup.sh
|
||||
|
||||
# Copy and execute setup script on VM
|
||||
scp -i "$ssh_key_path" /tmp/vm_setup.sh "$VM_USER@$VM_IP:/tmp/"
|
||||
ssh -i "$ssh_key_path" "$VM_USER@$VM_IP" "bash /tmp/vm_setup.sh"
|
||||
|
||||
log_success "VM setup completed"
|
||||
|
||||
# Cleanup
|
||||
rm /tmp/vm_setup.sh /tmp/vm_setup.sh.bak
|
||||
}
|
||||
|
||||
# Install systemd services
|
||||
setup_services() {
|
||||
log "Setting up systemd services on VM..."
|
||||
|
||||
local ssh_key_path="$HOME/.ssh/thrillwiki_vm"
|
||||
|
||||
# Copy service files and install them
|
||||
ssh -i "$ssh_key_path" "$VM_USER@$VM_IP" << EOF
|
||||
cd thrillwiki
|
||||
|
||||
# Update service files with correct paths
|
||||
sed -i 's|/home/ubuntu|/home/$VM_USER|g' scripts/systemd/*.service
|
||||
sed -i 's|ubuntu|$VM_USER|g' scripts/systemd/*.service
|
||||
|
||||
# Install services
|
||||
sudo cp scripts/systemd/thrillwiki.service /etc/systemd/system/
|
||||
sudo cp scripts/systemd/thrillwiki-webhook.service /etc/systemd/system/
|
||||
|
||||
# Reload and enable services
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable thrillwiki.service
|
||||
|
||||
echo "Services installed successfully!"
|
||||
EOF
|
||||
|
||||
log_success "Systemd services installed"
|
||||
}
|
||||
|
||||
# Test deployment
|
||||
test_deployment() {
|
||||
log "Testing VM deployment..."
|
||||
|
||||
local ssh_key_path="$HOME/.ssh/thrillwiki_vm"
|
||||
|
||||
ssh -i "$ssh_key_path" "$VM_USER@$VM_IP" << EOF
|
||||
cd thrillwiki
|
||||
./scripts/vm-deploy.sh
|
||||
EOF
|
||||
|
||||
log_success "Deployment test completed"
|
||||
}
|
||||
|
||||
# Start webhook listener
|
||||
start_webhook() {
|
||||
log "Starting webhook listener..."
|
||||
|
||||
if [ -f "***REMOVED***.webhook" ]; then
|
||||
log "Webhook configuration found. You can start the webhook listener with:"
|
||||
echo " source ***REMOVED***.webhook && python3 scripts/webhook-listener.py"
|
||||
echo
|
||||
log "Or run it in the background:"
|
||||
echo " nohup python3 scripts/webhook-listener.py > logs/webhook.log 2>&1 &"
|
||||
else
|
||||
log_error "Webhook configuration not found!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# GitHub webhook instructions
|
||||
github_instructions() {
|
||||
log "GitHub Webhook Setup Instructions:"
|
||||
echo
|
||||
echo "1. Go to your GitHub repository: $REPO_URL"
|
||||
echo "2. Navigate to Settings → Webhooks"
|
||||
echo "3. Click 'Add webhook'"
|
||||
echo "4. Configure:"
|
||||
echo " - Payload URL: http://YOUR_PUBLIC_IP:$WEBHOOK_PORT/webhook"
|
||||
echo " - Content type: application/json"
|
||||
echo " - Secret: $WEBHOOK_SECRET"
|
||||
echo " - Events: Just the push event"
|
||||
echo "5. Click 'Add webhook'"
|
||||
echo
|
||||
log_warning "Make sure port $WEBHOOK_PORT is open on your firewall!"
|
||||
}
|
||||
|
||||
# Main setup flow
|
||||
main() {
|
||||
log "ThrillWiki VM CI/CD Setup"
|
||||
echo "=========================="
|
||||
echo
|
||||
|
||||
# Create logs directory
|
||||
mkdir -p logs
|
||||
|
||||
# Get configuration
|
||||
prompt_config
|
||||
|
||||
# Setup steps
|
||||
setup_ssh
|
||||
create_env_file
|
||||
setup_vm
|
||||
setup_services
|
||||
test_deployment
|
||||
|
||||
# Final instructions
|
||||
echo
|
||||
log_success "Setup completed successfully!"
|
||||
echo
|
||||
start_webhook
|
||||
echo
|
||||
github_instructions
|
||||
|
||||
log "Setup log saved to: logs/setup.log"
|
||||
}
|
||||
|
||||
# Run main function and log output
|
||||
main "$@" 2>&1 | tee logs/setup.log
|
||||
Reference in New Issue
Block a user