- Remove Directus CMS infrastructure (docker-compose.infrastructure.yml) - Simplify to Astro-only deployment using existing Supabase backend - Clean up docker-compose.override.yml to focus on local development - Update NGINX config to proxy only to Astro app - Remove Directus-related npm scripts and database management tools - Streamline deployment guide for Supabase + Astro architecture Deployment workflow: - Local: npm run docker:dev (Astro + Supabase hosted) - Production: npm run docker:astro:up (Astro only) Benefits: - Simpler architecture with proven Supabase backend - Faster deployments (Astro only) - Zero database downtime - Reduced operational complexity 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
301 lines
6.1 KiB
Markdown
301 lines
6.1 KiB
Markdown
# Docker Deployment Guide
|
|
|
|
This guide covers setting up Black Canyon Tickets with optimized Docker deployment for your Astro application.
|
|
|
|
## Overview
|
|
|
|
- **Astro App**: Rebuilt on each Git deployment using existing Supabase backend
|
|
- **Database**: Uses your existing hosted Supabase PostgreSQL + Auth
|
|
- **NGINX**: Reverse proxy to Astro application
|
|
- **Certbot**: SSL certificates (existing setup)
|
|
|
|
## Server Setup (One-Time)
|
|
|
|
### 1. Install Dependencies
|
|
|
|
```bash
|
|
# Update system
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Install Docker & Docker Compose
|
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
|
sudo sh get-docker.sh
|
|
sudo usermod -aG docker $USER
|
|
|
|
# Log out and back in for Docker group to take effect
|
|
```
|
|
|
|
### 2. Clone Repository
|
|
|
|
```bash
|
|
cd /var/www
|
|
sudo git clone https://github.com/your-org/bct-whitelabel.git
|
|
sudo chown -R $USER:$USER bct-whitelabel
|
|
cd bct-whitelabel
|
|
```
|
|
|
|
### 3. Configure Environment
|
|
|
|
Your application uses Supabase (hosted) so just ensure your `.env` file has:
|
|
|
|
```bash
|
|
# Supabase (your existing hosted database)
|
|
PUBLIC_SUPABASE_URL=https://zctjaivtfyfxokfaemek.supabase.co
|
|
PUBLIC_SUPABASE_ANON_KEY=your-anon-key
|
|
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
|
|
|
|
# Stripe
|
|
STRIPE_PUBLISHABLE_KEY=pk_...
|
|
STRIPE_SECRET_KEY=sk_...
|
|
STRIPE_WEBHOOK_SECRET=whsec_...
|
|
|
|
# Email
|
|
RESEND_API_KEY=re_...
|
|
|
|
# Monitoring
|
|
SENTRY_DSN=https://...
|
|
SENTRY_RELEASE=production
|
|
```
|
|
|
|
### 4. Configure NGINX
|
|
|
|
```bash
|
|
# Copy example configuration
|
|
sudo cp nginx-example.conf /etc/nginx/sites-available/blackcanyontickets
|
|
|
|
# Enable site
|
|
sudo ln -s /etc/nginx/sites-available/blackcanyontickets /etc/nginx/sites-enabled/
|
|
|
|
# Test configuration
|
|
sudo nginx -t
|
|
```
|
|
|
|
### 5. Setup SSL with Certbot
|
|
|
|
```bash
|
|
# Get SSL certificate (Certbot handles NGINX config automatically)
|
|
sudo certbot --nginx -d portal.blackcanyontickets.com
|
|
|
|
# Reload NGINX with SSL
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
### 6. Set Up Log Rotation
|
|
|
|
```bash
|
|
# Install log rotation
|
|
sudo cp logrotate-bct /etc/logrotate.d/bct
|
|
|
|
# Test log rotation
|
|
sudo logrotate -d /etc/logrotate.d/bct
|
|
```
|
|
|
|
## Git Deployment Script
|
|
|
|
Update your deployment script to rebuild only the Astro app:
|
|
|
|
### Simple Deploy Script
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
echo "Deploying BCT Astro app..."
|
|
|
|
# Navigate to project directory
|
|
cd /var/www/bct-whitelabel
|
|
|
|
# Pull latest changes
|
|
git pull origin main
|
|
|
|
# Rebuild Astro app
|
|
npm run docker:astro:up
|
|
|
|
echo "Deployment complete!"
|
|
```
|
|
|
|
**Your Supabase database stays online** - no downtime for deployments!
|
|
|
|
## Daily Operations
|
|
|
|
### Check Service Status
|
|
|
|
```bash
|
|
# View running containers
|
|
docker ps
|
|
|
|
# Check logs
|
|
npm run docker:astro:logs
|
|
|
|
# Health checks
|
|
curl http://localhost:3000/api/health
|
|
```
|
|
|
|
### Restart Services
|
|
|
|
```bash
|
|
# Restart Astro app
|
|
npm run docker:astro:down
|
|
npm run docker:astro:up
|
|
```
|
|
|
|
### Service URLs
|
|
|
|
- **Main App**: https://portal.blackcanyontickets.com
|
|
- **Admin Panel**: https://portal.blackcanyontickets.com/admin
|
|
- **Health Check**: https://portal.blackcanyontickets.com/api/health
|
|
|
|
## Available Commands
|
|
|
|
### Docker Commands
|
|
```bash
|
|
# Production deployment (Astro only)
|
|
npm run docker:astro:up # Deploy Astro app
|
|
npm run docker:astro:down # Stop Astro app
|
|
npm run docker:astro:logs # View Astro logs
|
|
|
|
# Production (pre-built image)
|
|
npm run docker:prod:up # Deploy pre-built image
|
|
npm run docker:prod:down # Stop production image
|
|
|
|
# Local development
|
|
npm run docker:dev # Start development container
|
|
npm run docker:dev:build # Start with rebuild
|
|
```
|
|
|
|
## Backup Strategy
|
|
|
|
### Supabase Backups
|
|
|
|
Since you're using hosted Supabase:
|
|
- **Automatic backups** are handled by Supabase
|
|
- **Point-in-time recovery** available through Supabase dashboard
|
|
- **Manual exports** can be done through Supabase SQL editor
|
|
|
|
### Application Backups
|
|
|
|
```bash
|
|
# Create backup script for logs and uploads
|
|
cat > backup-app.sh << 'EOF'
|
|
#!/bin/bash
|
|
BACKUP_DIR="/var/backups/bct"
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
|
|
mkdir -p $BACKUP_DIR
|
|
|
|
# Backup logs
|
|
tar -czf $BACKUP_DIR/logs_$DATE.tar.gz logs/
|
|
|
|
# Keep only last 7 days
|
|
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
|
|
|
|
echo "Backup completed: $BACKUP_DIR"
|
|
EOF
|
|
|
|
chmod +x backup-app.sh
|
|
|
|
# Add to crontab for daily backups
|
|
echo "0 2 * * * /var/www/bct-whitelabel/backup-app.sh" | crontab -
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Container won't start**
|
|
```bash
|
|
# Check logs
|
|
docker logs bct-astro
|
|
|
|
# Check environment variables
|
|
env | grep SUPABASE
|
|
```
|
|
|
|
2. **NGINX proxy errors**
|
|
```bash
|
|
# Test NGINX config
|
|
sudo nginx -t
|
|
|
|
# Check upstream connectivity
|
|
curl http://localhost:3000/api/health
|
|
```
|
|
|
|
3. **SSL certificate issues**
|
|
```bash
|
|
# Renew certificate
|
|
sudo certbot renew
|
|
|
|
# Check certificate status
|
|
sudo certbot certificates
|
|
```
|
|
|
|
## Auto-Start Services on Boot
|
|
|
|
### Configure Docker Services to Auto-Start
|
|
|
|
```bash
|
|
# Create systemd service for Astro app
|
|
sudo tee /etc/systemd/system/bct-astro.service > /dev/null << 'EOF'
|
|
[Unit]
|
|
Description=BCT Astro Application
|
|
Requires=docker.service
|
|
After=docker.service
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
RemainAfterExit=yes
|
|
WorkingDirectory=/var/www/bct-whitelabel
|
|
ExecStart=/usr/bin/docker-compose -f docker-compose.astro.yml up -d
|
|
ExecStop=/usr/bin/docker-compose -f docker-compose.astro.yml down
|
|
TimeoutStartSec=0
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
# Enable and start the service
|
|
sudo systemctl enable bct-astro.service
|
|
sudo systemctl start bct-astro.service
|
|
```
|
|
|
|
### One-Command Deployment
|
|
|
|
Add this to your server for quick deployments:
|
|
|
|
```bash
|
|
# Create deployment alias
|
|
echo 'alias redeploy-bct="cd /var/www/bct-whitelabel && git pull && npm run docker:astro:up"' >> ~/.bashrc
|
|
source ~/.bashrc
|
|
|
|
# Now you can simply run:
|
|
redeploy-bct
|
|
```
|
|
|
|
## Monitoring
|
|
|
|
### Log Monitoring
|
|
|
|
```bash
|
|
# Real-time logs
|
|
tail -f /var/log/nginx/access.log
|
|
npm run docker:astro:logs -f
|
|
|
|
# Container stats
|
|
docker stats bct-astro
|
|
|
|
# Disk usage
|
|
docker system df
|
|
```
|
|
|
|
### Resource Monitoring
|
|
|
|
```bash
|
|
# Container resource usage
|
|
docker stats
|
|
|
|
# System resources
|
|
htop
|
|
df -h
|
|
```
|
|
|
|
This setup provides a robust, maintainable deployment pipeline where your Astro app can be updated frequently while your Supabase database remains stable and always available. |