238 lines
5.1 KiB
Markdown
238 lines
5.1 KiB
Markdown
# Gitea Actions Configuration for RxMinder
|
|
|
|
## Environment Variables
|
|
|
|
### Required Secrets (Configure in Gitea Repository Settings)
|
|
|
|
```
|
|
GITEA_TOKEN # Gitea access token for registry access
|
|
VITE_COUCHDB_PASSWORD # CouchDB password (sensitive)
|
|
DEPLOYMENT_WEBHOOK_URL # Optional: webhook for deployment notifications
|
|
```
|
|
|
|
### Repository Variables (Configure in Gitea Repository Settings)
|
|
|
|
```
|
|
VITE_COUCHDB_URL # Default: http://localhost:5984
|
|
VITE_COUCHDB_USER # Default: admin
|
|
APP_BASE_URL # Default: http://localhost:8080
|
|
VITE_GOOGLE_CLIENT_ID # Optional: Google OAuth client ID
|
|
VITE_GITHUB_CLIENT_ID # Optional: GitHub OAuth client ID
|
|
GITEA_REGISTRY # Container registry URL (e.g., gitea.yourdomain.com)
|
|
GITEA_REPOSITORY # Repository name (e.g., username/rxminder)
|
|
```
|
|
|
|
### Environment Variables (.env file)
|
|
|
|
The scripts will automatically load configuration from your `.env` file. Copy `.env.example` to `.env` and customize:
|
|
|
|
```bash
|
|
# Copy example and customize
|
|
cp .env.example .env
|
|
|
|
# Key variables for container registry:
|
|
CONTAINER_REGISTRY=gitea.yourdomain.com
|
|
CONTAINER_REPOSITORY=username/rxminder
|
|
GITEA_REGISTRY=gitea.yourdomain.com # Alternative to CONTAINER_REGISTRY
|
|
GITEA_REPOSITORY=username/rxminder # Alternative to CONTAINER_REPOSITORY
|
|
```
|
|
|
|
## Gitea Actions Features
|
|
|
|
### Workflows
|
|
|
|
- **Build & Test**: Multi-platform Docker builds with buildx
|
|
- **Security Scanning**: Trivy vulnerability scanning
|
|
- **Deployment**: Automated deployment to production
|
|
- **Cleanup**: Registry and image cleanup
|
|
|
|
### Multi-Platform Support
|
|
|
|
- linux/amd64 (Intel/AMD)
|
|
- linux/arm64 (ARM64/Apple Silicon)
|
|
|
|
### Caching Strategy
|
|
|
|
- Registry-based caching for faster builds
|
|
- Layer caching between builds
|
|
- Dependency caching for Node.js/Bun
|
|
|
|
## Setup Instructions
|
|
|
|
### 1. Gitea Server Requirements
|
|
|
|
```bash
|
|
# Minimum Gitea version
|
|
Gitea >= 1.20.0 with Actions enabled
|
|
|
|
# Required Gitea features
|
|
- Gitea Actions enabled
|
|
- Container Registry enabled
|
|
- Runners configured
|
|
```
|
|
|
|
### 2. Configure Gitea Runner
|
|
|
|
```yaml
|
|
# .gitea/runners/config.yml (on runner machine)
|
|
name: 'rxminder-runner'
|
|
labels:
|
|
- 'ubuntu-latest'
|
|
- 'self-hosted'
|
|
capabilities:
|
|
- docker
|
|
- buildx
|
|
```
|
|
|
|
### 3. Repository Configuration
|
|
|
|
```bash
|
|
# 1. Go to Repository Settings → Actions → Secrets
|
|
# Add required secrets and variables
|
|
|
|
# 2. Go to Repository Settings → Packages
|
|
# Enable container registry
|
|
|
|
# 3. Configure runner labels in workflow files if needed
|
|
```
|
|
|
|
### 4. Local Testing
|
|
|
|
```bash
|
|
# Test Gitea Actions locally with act
|
|
# Install: https://github.com/nektos/act
|
|
|
|
# Test the workflow
|
|
act -P ubuntu-latest=catthehacker/ubuntu:act-latest
|
|
|
|
# Test specific job
|
|
act -P ubuntu-latest=catthehacker/ubuntu:act-latest -j build
|
|
```
|
|
|
|
## Deployment Targets
|
|
|
|
### Docker Compose (Default)
|
|
|
|
```bash
|
|
# Deploys using docker-compose.yml
|
|
# Suitable for single-server deployments
|
|
./scripts/gitea-deploy.sh production
|
|
```
|
|
|
|
### Kubernetes
|
|
|
|
```bash
|
|
# Deploys to Kubernetes cluster
|
|
# Requires kubectl configured
|
|
./scripts/gitea-deploy.sh kubernetes
|
|
```
|
|
|
|
### Staging Environment
|
|
|
|
```bash
|
|
# Deploys to staging with different configs
|
|
./scripts/gitea-deploy.sh staging
|
|
```
|
|
|
|
## Monitoring & Notifications
|
|
|
|
### Health Checks
|
|
|
|
- Frontend: `http://localhost:8080/health`
|
|
- CouchDB: `http://localhost:5984/_up`
|
|
|
|
### Deployment Notifications
|
|
|
|
Configure `DEPLOYMENT_WEBHOOK_URL` to receive notifications:
|
|
|
|
```json
|
|
{
|
|
"text": "✅ RxMinder deployed to production",
|
|
"environment": "production",
|
|
"image": "gitea.example.com/user/rxminder:abc123"
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Build Fails - Buildx Not Available**
|
|
|
|
```bash
|
|
# Ensure Docker Buildx is installed on runner
|
|
docker buildx version
|
|
```
|
|
|
|
2. **Registry Push Fails**
|
|
|
|
```bash
|
|
# Check GITEA_TOKEN has package write permissions
|
|
# Verify registry URL is correct
|
|
```
|
|
|
|
3. **Deployment Fails**
|
|
|
|
```bash
|
|
# Check environment variables are set
|
|
# Verify server has Docker/Kubernetes access
|
|
```
|
|
|
|
### Debug Commands
|
|
|
|
```bash
|
|
# Check workflow logs in Gitea UI
|
|
# Repository → Actions → [Workflow Run]
|
|
|
|
# Test deployment script locally
|
|
./scripts/gitea-deploy.sh production --debug
|
|
|
|
# Check service status
|
|
docker-compose -f docker/docker-compose.yaml ps
|
|
docker-compose -f docker/docker-compose.yaml logs
|
|
```
|
|
|
|
## Security Considerations
|
|
|
|
### Image Scanning
|
|
|
|
- Trivy vulnerability scanning in CI
|
|
- Base image security updates
|
|
- Dependency audit checks
|
|
|
|
### Secrets Management
|
|
|
|
- Use Gitea secrets for sensitive data
|
|
- Rotate access tokens regularly
|
|
- Limit token permissions
|
|
|
|
### Registry Security
|
|
|
|
- Private registry recommended
|
|
- Image signing (optional)
|
|
- Regular image cleanup
|
|
|
|
## Performance Optimization
|
|
|
|
### Build Optimization
|
|
|
|
- Multi-stage Dockerfile
|
|
- Layer caching
|
|
- Minimal base images
|
|
|
|
### Deployment Optimization
|
|
|
|
- Health checks
|
|
- Rolling updates
|
|
- Resource limits
|
|
|
|
## Migration from GitHub Actions
|
|
|
|
If migrating from GitHub Actions:
|
|
|
|
1. **Copy workflow structure** (already compatible)
|
|
2. **Update variable references**: `github.` → `gitea.`
|
|
3. **Configure secrets** in Gitea repository settings
|
|
4. **Test locally** with act before pushing
|
|
5. **Update registry URLs** if different
|