Files
basil/docs/DEPLOYMENT-QUICK-START.md
Paul R Kartchner d1156833a2
Some checks failed
CI/CD Pipeline / Run Tests (pull_request) Has been cancelled
CI/CD Pipeline / Code Quality (pull_request) Has been cancelled
CI Pipeline / Lint Code (pull_request) Has been cancelled
CI Pipeline / Test API Package (pull_request) Has been cancelled
CI Pipeline / Test Web Package (pull_request) Has been cancelled
CI Pipeline / Test Shared Package (pull_request) Has been cancelled
Docker Build & Deploy / Build Docker Images (pull_request) Has been cancelled
E2E Tests / End-to-End Tests (pull_request) Has been cancelled
E2E Tests / E2E Tests (Mobile) (pull_request) Has been cancelled
Security Scanning / NPM Audit (pull_request) Has been cancelled
Security Scanning / Dependency License Check (pull_request) Has been cancelled
Security Scanning / Code Quality Scan (pull_request) Has been cancelled
Security Scanning / Docker Image Security (pull_request) Has been cancelled
CI/CD Pipeline / Build and Push Docker Images (pull_request) Has been cancelled
CI Pipeline / Build All Packages (pull_request) Has been cancelled
CI Pipeline / Generate Coverage Report (pull_request) Has been cancelled
Docker Build & Deploy / Push Docker Images (pull_request) Has been cancelled
Docker Build & Deploy / Deploy to Staging (pull_request) Has been cancelled
Docker Build & Deploy / Deploy to Production (pull_request) Has been cancelled
Security Scanning / Security Summary (pull_request) Has been cancelled
feat: add CI/CD pipeline, backup system, and deployment automation
## Summary
- Add complete CI/CD pipeline with Gitea Actions for automated testing, building, and deployment
- Implement backup and restore system with full database and file backup to ZIP
- Add deployment automation with webhook receiver and systemd service
- Enhance recipe editing UI with improved ingredient parsing and cooking mode features
- Add comprehensive documentation for CI/CD, deployment, and backup features

## CI/CD Pipeline
- New workflow in .gitea/workflows/ci-cd.yml with test, build, and deploy stages
- Automated Docker image building and pushing to registry
- Webhook-triggered deployments to production servers

## Backup & Restore
- New backup service with ZIP creation including database dump and uploads
- REST API endpoints for create, list, download, restore, and delete operations
- Configurable backup path via BACKUP_PATH environment variable

## Deployment
- Automated deployment scripts (deploy.sh, manual-deploy.sh)
- Webhook receiver with systemd service for deployment triggers
- Environment configuration template (.env.deploy.example)

## Documentation
- docs/CI-CD-SETUP.md - Complete CI/CD pipeline setup guide
- docs/DEPLOYMENT-QUICK-START.md - Quick deployment reference
- docs/BACKUP.md - Backup and restore documentation
- docs/REMOTE_DATABASE.md - Remote database configuration guide
- scripts/README.md - Deployment scripts documentation

## Web Improvements
- Enhanced ingredient parser with better unit and quantity detection
- Improved recipe editing interface with unified edit experience
- Better cooking mode functionality
- Updated dependencies in package.json

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-08 05:04:39 +00:00

4.9 KiB

Basil Deployment Quick Start

Quick reference for deploying Basil with CI/CD.

Initial Setup (One-time)

1. Gitea Secrets Configuration

Add these secrets in Gitea → Settings → Secrets → Actions:

DOCKER_USERNAME=your-dockerhub-username
DOCKER_PASSWORD=dckr_pat_xxxxxxxxxxxxx
DEPLOY_WEBHOOK_URL=http://your-server.com:9000/hooks/basil-deploy

2. Server Setup

# 1. Clone repository
cd /srv/docker-compose
git clone https://your-gitea.com/user/basil.git
cd basil

# 2. Create deployment configuration
cp .env.deploy.example .env.deploy
nano .env.deploy  # Edit with your values

# 3. Install webhook (Ubuntu/Debian)
sudo apt-get install webhook

# 4. Install systemd service
sudo cp scripts/basil-webhook.service /etc/systemd/system/
sudo nano /etc/systemd/system/basil-webhook.service  # Edit paths and env vars
sudo systemctl enable basil-webhook
sudo systemctl start basil-webhook

# 5. Configure firewall
sudo ufw allow 9000/tcp

Daily Usage

Just push to main branch:

git add .
git commit -m "feat: add new feature"
git push origin main

The CI/CD pipeline will:

  1. ✓ Run all tests
  2. ✓ Build Docker images
  3. ✓ Push to registry
  4. ✓ Trigger webhook
  5. ✓ Deploy automatically

Manual Deployment

cd /srv/docker-compose/basil
./scripts/manual-deploy.sh

Quick Commands

# View deployment logs
tail -f deploy.log

# View container logs
docker-compose logs -f api
docker-compose logs -f web

# Check deployment status
docker-compose ps

# Restart services
docker-compose restart

# Pull latest code and rebuild (without registry)
git pull
docker-compose up -d --build

# Create manual backup
curl -X POST http://localhost:3001/api/backup -o backup.zip

# Check webhook status
sudo systemctl status basil-webhook

# Test webhook manually
curl -X POST http://localhost:9000/hooks/basil-deploy \
  -H "X-Webhook-Secret: your-secret" \
  -H "Content-Type: application/json" \
  -d '{"branch": "main"}'

Rollback

# Deploy specific version
DOCKER_USERNAME=myuser IMAGE_TAG=main-abc123 ./scripts/deploy.sh

# Or restore from backup
cd backups
ls -lt  # Find backup file
curl -X POST http://localhost:3001/api/backup/restore \
  -F "file=@pre-deploy-20250101-020000.zip"

Troubleshooting One-Liners

# Deployment failed? Check logs
tail -50 deploy.log

# Webhook not working? Check service
sudo journalctl -u basil-webhook -n 50

# Containers not starting? Check Docker logs
docker-compose logs --tail=50

# Out of disk space?
docker system prune -a
df -h

# Database issues?
docker-compose exec api npx prisma studio

# Pull images manually
docker pull docker.io/$DOCKER_USERNAME/basil-api:latest
docker pull docker.io/$DOCKER_USERNAME/basil-web:latest

Workflow Diagram

┌──────────────┐
│  Developer   │
│  git push    │
└──────┬───────┘
       │
       ▼
┌──────────────────────────────┐
│     Gitea Actions            │
│  1. Run tests (unit + E2E)   │
│  2. Build Docker images      │
│  3. Push to Docker Hub       │
│  4. Call webhook             │
└──────┬───────────────────────┘
       │
       ▼
┌──────────────────────────────┐
│  Production Server           │
│  1. Webhook receives call    │
│  2. Run deploy.sh script     │
│     - Create backup          │
│     - Pull new images        │
│     - Restart containers     │
│     - Health check           │
└──────────────────────────────┘

File Locations

/srv/docker-compose/basil/
├── .gitea/workflows/ci-cd.yml          # CI/CD workflow
├── scripts/
│   ├── deploy.sh                       # Main deployment script
│   ├── manual-deploy.sh                # Interactive deployment
│   ├── webhook-receiver.sh             # Webhook server
│   └── basil-webhook.service           # Systemd service file
├── .env.deploy                         # Deployment config (gitignored)
├── deploy.log                          # Deployment logs
├── webhook.log                         # Webhook logs
└── backups/                            # Automatic backups
    └── pre-deploy-*.zip

Environment Variables

Required:

  • DOCKER_USERNAME - Your Docker Hub username

Optional:

  • DOCKER_REGISTRY - Default: docker.io
  • IMAGE_TAG - Default: latest
  • WEBHOOK_PORT - Default: 9000
  • WEBHOOK_SECRET - Default: changeme (change this!)

Support

For detailed documentation, see: