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
## 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>
263 lines
6.0 KiB
Markdown
263 lines
6.0 KiB
Markdown
# Basil Deployment Scripts
|
|
|
|
This directory contains scripts for automated deployment of Basil.
|
|
|
|
## Scripts Overview
|
|
|
|
### `deploy.sh`
|
|
|
|
Main deployment script that handles the complete deployment process.
|
|
|
|
**Features:**
|
|
- Pre-deployment backup creation
|
|
- Docker image pulling from registry
|
|
- Container restart with health checks
|
|
- Automatic cleanup of old images
|
|
- Comprehensive logging
|
|
|
|
**Usage:**
|
|
```bash
|
|
# With environment variables
|
|
DOCKER_USERNAME=myuser DOCKER_REGISTRY=docker.io IMAGE_TAG=latest ./deploy.sh
|
|
|
|
# Or source from .env.deploy
|
|
source ../.env.deploy && ./deploy.sh
|
|
```
|
|
|
|
**Environment Variables:**
|
|
- `DOCKER_USERNAME` (required): Docker registry username
|
|
- `DOCKER_REGISTRY` (optional, default: docker.io): Registry URL
|
|
- `IMAGE_TAG` (optional, default: latest): Image tag to pull
|
|
|
|
### `manual-deploy.sh`
|
|
|
|
Interactive wrapper around `deploy.sh` with user prompts.
|
|
|
|
**Features:**
|
|
- Interactive prompts for configuration
|
|
- Saves configuration to `.env.deploy` for future use
|
|
- Confirmation before deployment
|
|
|
|
**Usage:**
|
|
```bash
|
|
./manual-deploy.sh
|
|
```
|
|
|
|
The script will prompt for:
|
|
1. Docker Hub username
|
|
2. Docker registry (default: docker.io)
|
|
3. Image tag (default: latest)
|
|
4. Confirmation to proceed
|
|
|
|
### `webhook-receiver.sh`
|
|
|
|
Webhook server that listens for deployment triggers from CI/CD.
|
|
|
|
**Features:**
|
|
- HTTP webhook endpoint
|
|
- Secret-based authentication
|
|
- Automatic deployment on webhook call
|
|
- Systemd service support
|
|
|
|
**Usage:**
|
|
```bash
|
|
# Manual run (foreground)
|
|
WEBHOOK_PORT=9000 WEBHOOK_SECRET=mysecret ./webhook-receiver.sh
|
|
|
|
# Or install as systemd service (recommended)
|
|
sudo cp basil-webhook.service /etc/systemd/system/
|
|
sudo systemctl enable basil-webhook
|
|
sudo systemctl start basil-webhook
|
|
```
|
|
|
|
**Environment Variables:**
|
|
- `WEBHOOK_PORT` (optional, default: 9000): Port to listen on
|
|
- `WEBHOOK_SECRET` (optional, default: changeme): Authentication secret
|
|
|
|
**Webhook Endpoint:**
|
|
```
|
|
POST http://localhost:9000/hooks/basil-deploy
|
|
Header: X-Webhook-Secret: your-secret
|
|
```
|
|
|
|
### `basil-webhook.service`
|
|
|
|
Systemd service file for running webhook receiver as a system service.
|
|
|
|
**Installation:**
|
|
```bash
|
|
# 1. Copy service file
|
|
sudo cp basil-webhook.service /etc/systemd/system/
|
|
|
|
# 2. Edit environment variables in the file
|
|
sudo nano /etc/systemd/system/basil-webhook.service
|
|
|
|
# 3. Reload systemd
|
|
sudo systemctl daemon-reload
|
|
|
|
# 4. Enable and start service
|
|
sudo systemctl enable basil-webhook
|
|
sudo systemctl start basil-webhook
|
|
|
|
# 5. Check status
|
|
sudo systemctl status basil-webhook
|
|
```
|
|
|
|
**Service Management:**
|
|
```bash
|
|
# Start service
|
|
sudo systemctl start basil-webhook
|
|
|
|
# Stop service
|
|
sudo systemctl stop basil-webhook
|
|
|
|
# Restart service
|
|
sudo systemctl restart basil-webhook
|
|
|
|
# View logs
|
|
sudo journalctl -u basil-webhook -f
|
|
|
|
# Check status
|
|
sudo systemctl status basil-webhook
|
|
```
|
|
|
|
## Deployment Workflow
|
|
|
|
### Automatic Deployment (CI/CD)
|
|
|
|
1. Developer pushes to `main` branch
|
|
2. Gitea Actions runs tests and builds images
|
|
3. Images pushed to Docker registry
|
|
4. Gitea Actions calls webhook endpoint
|
|
5. Webhook server receives call and executes `deploy.sh`
|
|
6. Production server pulls new images and restarts
|
|
|
|
### Manual Deployment
|
|
|
|
1. Run `./manual-deploy.sh`
|
|
2. Enter configuration when prompted
|
|
3. Confirm deployment
|
|
4. Script executes deployment process
|
|
|
|
## Logs
|
|
|
|
All scripts log to the parent directory:
|
|
|
|
- `deploy.log` - Deployment script logs
|
|
- `webhook.log` - Webhook server logs
|
|
- `webhook-error.log` - Webhook server errors
|
|
|
|
**View logs:**
|
|
```bash
|
|
# Deployment logs
|
|
tail -f ../deploy.log
|
|
|
|
# Webhook logs
|
|
tail -f ../webhook.log
|
|
|
|
# Webhook errors
|
|
tail -f ../webhook-error.log
|
|
|
|
# Systemd service logs
|
|
sudo journalctl -u basil-webhook -f
|
|
```
|
|
|
|
## Configuration Files
|
|
|
|
### `.env.deploy` (in parent directory)
|
|
|
|
Stores deployment configuration. Created from `.env.deploy.example`.
|
|
|
|
```bash
|
|
DOCKER_USERNAME=your-dockerhub-username
|
|
DOCKER_REGISTRY=docker.io
|
|
IMAGE_TAG=latest
|
|
WEBHOOK_PORT=9000
|
|
WEBHOOK_SECRET=your-random-secret
|
|
```
|
|
|
|
**Important:** This file is gitignored and should never be committed.
|
|
|
|
### `webhook-config.json` (auto-generated)
|
|
|
|
Generated by `webhook-receiver.sh`. Configures the webhook endpoint.
|
|
|
|
**Location:** Created in scripts directory when webhook-receiver.sh runs.
|
|
|
|
## Troubleshooting
|
|
|
|
### Script Permission Denied
|
|
|
|
```bash
|
|
chmod +x *.sh
|
|
```
|
|
|
|
### Docker Pull Fails
|
|
|
|
```bash
|
|
# Check credentials
|
|
docker login -u $DOCKER_USERNAME
|
|
|
|
# Check image exists
|
|
docker pull $DOCKER_REGISTRY/$DOCKER_USERNAME/basil-api:$IMAGE_TAG
|
|
```
|
|
|
|
### Webhook Not Responding
|
|
|
|
```bash
|
|
# Check service status
|
|
sudo systemctl status basil-webhook
|
|
|
|
# Check if port is listening
|
|
sudo netstat -tlnp | grep 9000
|
|
|
|
# Check firewall
|
|
sudo ufw status
|
|
```
|
|
|
|
### Health Check Fails
|
|
|
|
```bash
|
|
# Check API logs
|
|
docker-compose logs api
|
|
|
|
# Check API manually
|
|
curl http://localhost:3001/health
|
|
|
|
# Check database connection
|
|
docker-compose exec api npx prisma studio
|
|
```
|
|
|
|
## Security Notes
|
|
|
|
1. **Never commit secrets**: `.env.deploy` is gitignored
|
|
2. **Use strong webhook secret**: 32+ character random string
|
|
3. **Firewall webhook port**: Allow only from known IPs if possible
|
|
4. **Use HTTPS**: Configure reverse proxy for webhook in production
|
|
5. **Backup before deploy**: Script creates automatic backups
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
scripts/
|
|
├── README.md # This file
|
|
├── deploy.sh # Main deployment script
|
|
├── manual-deploy.sh # Interactive deployment
|
|
├── webhook-receiver.sh # Webhook server
|
|
├── basil-webhook.service # Systemd service file
|
|
└── webhook-config.json # Generated webhook config (auto-created)
|
|
|
|
Parent directory:
|
|
├── .env.deploy # Deployment config (gitignored)
|
|
├── .env.deploy.example # Example config
|
|
├── deploy.log # Deployment logs (gitignored)
|
|
├── webhook.log # Webhook logs (gitignored)
|
|
└── backups/ # Automatic backups (gitignored)
|
|
```
|
|
|
|
## References
|
|
|
|
- [Full CI/CD Setup Guide](../docs/CI-CD-SETUP.md)
|
|
- [Quick Start Guide](../docs/DEPLOYMENT-QUICK-START.md)
|
|
- [Project Documentation](../CLAUDE.md)
|