Rocky_Mountain_Vending/workers/README.md

239 lines
5.4 KiB
Markdown

# Cloudflare Workers for Rocky Mountain Vending
This directory contains Cloudflare Workers for handling API endpoints and serving content from R2 buckets.
## Account Information
- **Account ID**: `bd6f76304a840ba11b75f9ced84264f4`
- **Temp Subdomain**: `matt-bd6.workers.dev`
## Workers
### API Worker (`api-worker`)
Main worker that handles all API endpoints:
- `/api/manuals/*` - Serve PDF manuals from R2 bucket
- `/api/thumbnails/*` - Serve thumbnail images from R2 bucket
- `/api/sitemap-submit` - Submit sitemap to Google Search Console
- `/api/request-indexing` - Request URL indexing in Google Search Console
- `/health` - Health check endpoint
## Prerequisites
1. **R2 Buckets**: Create the following buckets in Cloudflare Dashboard:
- `vending-vm-manuals` - For PDF manuals
- `vending-vm-thumbnails` - For thumbnail images
2. **Wrangler CLI**: Install Wrangler if not already installed:
```bash
npm install -g wrangler
```
3. **Authentication**: Login to Cloudflare:
```bash
wrangler login
```
## Setup
### 1. Create R2 Buckets
```bash
# Create manuals bucket
wrangler r2 bucket create vending-vm-manuals
# Create thumbnails bucket
wrangler r2 bucket create vending-vm-thumbnails
```
### 2. Configure R2 Bucket Access
In Cloudflare Dashboard:
1. Go to R2 → Select bucket → Settings
2. Enable public access if you want public URLs
3. Configure CORS if accessing from different domains
### 3. Set Environment Variables (Optional)
For Google Search Console integration:
```bash
# Set Google service account email
wrangler secret put GOOGLE_SERVICE_ACCOUNT_EMAIL
# Set Google private key (paste the full key including \n)
wrangler secret put GOOGLE_PRIVATE_KEY
# Set site URL
wrangler secret put GOOGLE_SITE_URL
# Enter: https://rockymountainvending.com
# Set main site URL
wrangler secret put SITE_URL
# Enter: https://rockymountainvending.com
```
### 4. Deploy the Worker
From the `code` directory:
```bash
# Deploy to production
wrangler deploy
# Deploy to development environment
wrangler deploy --env development
```
The worker will be available at:
- Production: `https://rocky-mountain-vending-api.matt-bd6.workers.dev`
- Development: `https://rocky-mountain-vending-api-dev.matt-bd6.workers.dev`
## Usage
### Serve Manuals
```
GET https://rocky-mountain-vending-api.matt-bd6.workers.dev/api/manuals/Crane/manual.pdf
```
### Serve Thumbnails
```
GET https://rocky-mountain-vending-api.matt-bd6.workers.dev/api/thumbnails/Crane/manual.jpg
```
### Submit Sitemap
```bash
curl -X POST https://rocky-mountain-vending-api.matt-bd6.workers.dev/api/sitemap-submit \
-H "Content-Type: application/json" \
-d '{"sitemapUrl": "https://rockymountainvending.com/sitemap.xml"}'
```
### Request Indexing
```bash
curl -X POST https://rocky-mountain-vending-api.matt-bd6.workers.dev/api/request-indexing \
-H "Content-Type: application/json" \
-d '{"url": "https://rockymountainvending.com/manuals"}'
```
### Health Check
```
GET https://rocky-mountain-vending-api.matt-bd6.workers.dev/health
```
## Custom Domain Setup
To use a custom domain instead of the workers.dev subdomain:
1. Go to Cloudflare Dashboard → Workers & Pages
2. Select your worker
3. Go to Settings → Triggers
4. Add a custom domain or route
Example routes:
- `api.rockymountainvending.com/*` - Route all API requests
- `rockymountainvending.com/api/*` - Route API requests from main domain
## R2 Bucket Structure
### Manuals Bucket (`vending-vm-manuals`)
Store PDF files with manufacturer folders:
```
Crane/
manual1.pdf
manual2.pdf
Royal Vendors/
manual1.pdf
...
```
### Thumbnails Bucket (`vending-vm-thumbnails`)
Store thumbnail images matching manual structure:
```
Crane/
manual1.jpg
manual2.jpg
Royal Vendors/
manual1.jpg
...
```
## Development
### Local Development
```bash
# Start local development server
wrangler dev
# Start with specific environment
wrangler dev --env development
```
### Testing
```bash
# Test health endpoint
curl https://rocky-mountain-vending-api.matt-bd6.workers.dev/health
# Test manual endpoint (requires file in R2)
curl https://rocky-mountain-vending-api.matt-bd6.workers.dev/api/manuals/Crane/manual.pdf
```
## Troubleshooting
### Worker Not Found
- Verify account ID in `wrangler.toml` matches your Cloudflare account
- Check that you're logged in: `wrangler whoami`
### R2 Bucket Not Found
- Verify bucket names match in `wrangler.toml`
- Check buckets exist: `wrangler r2 bucket list`
- Ensure buckets are in the same account
### CORS Errors
- Add CORS headers in worker response
- Configure CORS in R2 bucket settings if using public URLs
- Check allowed origins in worker code
### Google Search Console API
The Google Search Console integration requires additional setup:
1. Enable Google Search Console API in Google Cloud Console
2. Create service account and download credentials
3. Grant service account access in Google Search Console
4. Install `googleapis` library (may require bundling for Workers)
See `docs/operations/SEO_SETUP.md` for detailed instructions.
## Monitoring
View worker logs and metrics in Cloudflare Dashboard:
- Workers & Pages → Your Worker → Logs
- Workers & Pages → Your Worker → Metrics
## Cost Considerations
- **Workers**: Free tier includes 100,000 requests/day
- **R2**: Pay-as-you-go storage and egress
- **Custom Domains**: Included with Workers
Monitor usage in Cloudflare Dashboard → Billing.