#!/bin/bash # Deploy script - Creates R2 bucket, configures CORS, and deploys worker set -e # Exit on error echo "==================================================" echo "OBS R2 Uploader - Deployment Script" echo "==================================================" echo "" # Get the directory where this script is located SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" cd "$PROJECT_DIR" # Check if wrangler is authenticated echo "Checking Wrangler authentication..." if ! wrangler whoami &> /dev/null; then echo "✗ Wrangler is not authenticated" echo "Run 'wrangler login' first" exit 1 fi echo "✓ Wrangler is authenticated" echo "" # Create R2 bucket echo "Creating R2 bucket 'obs-videos'..." if wrangler r2 bucket create obs-videos 2>&1 | grep -q "already exists"; then echo "✓ Bucket 'obs-videos' already exists" else echo "✓ Bucket 'obs-videos' created" fi echo "" # Configure CORS echo "Configuring CORS for bucket..." # Load R2 credentials from .env if [ -f .env ]; then export $(grep -v '^#' .env | xargs) fi # Check if credentials are available if [ -z "$R2_ACCOUNT_ID" ] || [ -z "$R2_ACCESS_KEY_ID" ] || [ -z "$R2_SECRET_ACCESS_KEY" ]; then echo "⚠ CORS configuration skipped - R2 credentials not found in .env" echo " You can configure CORS manually in Cloudflare dashboard" else # Apply CORS configuration using AWS CLI-compatible API # Check for AWS CLI in venv or system if [ -f "venv/bin/aws" ]; then AWS_CMD="venv/bin/aws" elif command -v aws &> /dev/null; then AWS_CMD="aws" else AWS_CMD="" fi if [ -n "$AWS_CMD" ]; then echo "Applying CORS configuration..." AWS_ACCESS_KEY_ID="$R2_ACCESS_KEY_ID" \ AWS_SECRET_ACCESS_KEY="$R2_SECRET_ACCESS_KEY" \ $AWS_CMD s3api put-bucket-cors \ --bucket obs-videos \ --cors-configuration file://cors-config.json \ --endpoint-url "https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com" if [ $? -eq 0 ]; then echo "✓ CORS configured successfully" else echo "⚠ CORS configuration failed - you may need to configure it manually" echo " Go to R2 > obs-videos > Settings > CORS Policy in Cloudflare dashboard" fi else echo "⚠ AWS CLI not found - skipping automatic CORS configuration" echo " Run: venv/bin/pip install awscli" echo " Or configure CORS manually in Cloudflare dashboard" echo " Go to R2 > obs-videos > Settings > CORS Policy" fi fi echo "" # List buckets to verify echo "Verifying bucket creation..." wrangler r2 bucket list echo "" # Deploy worker echo "Deploying Cloudflare Worker..." cd worker wrangler deploy cd .. echo "" echo "==================================================" echo "Deployment complete!" echo "==================================================" echo "" echo "Next steps:" echo "1. Configure CORS in Cloudflare dashboard (see above)" echo "2. Set up custom domain (videos.jeffemmett.com) in Cloudflare dashboard:" echo " - Go to Workers & Pages > obs-video-server > Settings > Domains" echo " - Add custom domain: videos.jeffemmett.com" echo "3. Update .env with your R2 credentials:" echo " - Go to R2 > obs-videos > Settings > R2 API Tokens" echo " - Create a new API token with read/write access" echo "4. Test upload: ./scripts/upload.sh /path/to/video.mp4" echo ""