Add the redacted source file for demo purposes Reviewed-on: https://source.michaeldileo.org/michael_dileo/Keybard-Vagabond-Demo/pulls/1 Co-authored-by: Michael DiLeo <michael_dileo@proton.me> Co-committed-by: Michael DiLeo <michael_dileo@proton.me>
6.5 KiB
6.5 KiB
PieFed - Reddit-like Fediverse Platform
PieFed is a Reddit-like platform that implements the ActivityPub protocol for federation. This deployment provides a complete PieFed instance optimized for the Keyboard Vagabond community.
🎯 Access Information
- URL:
https://piefed.keyboardvagabond.com - Federation: ActivityPub enabled, federated with other fediverse instances
- Estimate User Limit: 200 Monthly Active Users
🏗️ Architecture
Multi-Container Design
- Web Container: Nginx + Django/uWSGI for HTTP requests
- Worker Container: Celery + Beat for background jobs
- Database: PostgreSQL (shared cluster with HA)
- Cache: Redis (shared cluster)
- Storage: Backblaze B2 S3 + Cloudflare CDN
- Mail: SMTP
Resource Allocation
- Web: 2 CPU cores, 4GB RAM with auto-scaling (2-6 replicas)
- Worker: 1 CPU core, 2GB RAM with auto-scaling (1-4 replicas)
- Storage: 10GB app storage + 5GB cache
📁 File Structure
manifests/applications/piefed/
├── namespace.yaml # piefed-application namespace
├── secret.yaml # Environment variables and credentials
├── harbor-pull-secret.yaml # Harbor registry authentication
├── storage.yaml # Persistent volumes for app and cache
├── deployment-web.yaml # Web server deployment with HPA
├── deployment-worker.yaml # Background worker deployment with HPA
├── service.yaml # Internal service for web pods
├── ingress.yaml # External access with SSL
├── cronjobs.yaml # Maintenance CronJobs
├── monitoring.yaml # OpenObserve metrics collection
├── kustomization.yaml # Kustomize configuration
└── README.md # This documentation
🔧 Configuration
Database Configuration
- Primary:
postgresql-shared-rw.postgresql-system.svc.cluster.local - Database:
piefed - User:
piefed_user
Redis Configuration
- Primary:
redis-ha-haproxy.redis-system.svc.cluster.local - Port:
6379 - Usage: Sessions, cache, queues
S3 Media Storage
- Provider: Backblaze B2
- Bucket:
piefed-bucket - CDN:
https://pfm.keyboardvagabond.com - Region:
eu-central-003
SMTP Configuration
- Provider: SMTP
- Host:
<YOUR_SMTP_SERVER> - User:
piefed@mail.keyboardvagabond.com - Encryption: TLS (port 587)
🚀 Deployment
Prerequisites
- Database Setup: ✅ Database and user already created
- Secrets: Update
secret.yamlwith:- Django SECRET_KEY (generate with
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())') - Admin password
- Django SECRET_KEY (generate with
Generate Required Secrets
# Generate Django secret key
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
# Edit the secret with actual values
sops manifests/applications/piefed/secret.yaml
Deploy PieFed
# Add piefed to applications kustomization
# manifests/applications/kustomization.yaml:
# resources:
# - piefed/
# Deploy all manifests
kubectl apply -k manifests/applications/piefed/
# Monitor deployment
kubectl get pods -n piefed-application -w
# Check ingress and certificates
kubectl get ingress,certificates -n piefed-application
Post-Deployment Setup
# Check deployment status
kubectl get pods -n piefed-application
# Check web container logs
kubectl logs -f deployment/piefed-web -n piefed-application
# Check worker container logs
kubectl logs -f deployment/piefed-worker -n piefed-application
# Access admin interface (if configured)
open https://piefed.keyboardvagabond.com/admin/
🔄 Maintenance
Automated CronJobs
- Daily Maintenance: Session cleanup, upload cleanup (2 AM UTC daily)
- Orphan File Removal: Clean up orphaned media files (3 AM UTC Sunday)
- Queue Processing: Send queued notifications (every 10 minutes)
Manual Maintenance
# Access web container for manual tasks
kubectl exec -it deployment/piefed-web -n piefed-application -- /bin/sh
# Run Django management commands
python manage.py migrate
python manage.py collectstatic
python manage.py createsuperuser
🔍 Monitoring & Troubleshooting
Check Application Status
# Pod status
kubectl get pods -n piefed-application
kubectl describe pods -n piefed-application
# Application logs
kubectl logs -f deployment/piefed-web -n piefed-application
kubectl logs -f deployment/piefed-worker -n piefed-application
# Check services and ingress
kubectl get svc,ingress -n piefed-application
# Check auto-scaling
kubectl get hpa -n piefed-application
Check celery queue length
kubectl exec -n redis-system redis-master-0 -- redis-cli -a <redis password> -n 0 llen celery
Database Connectivity
# Test database connection
kubectl exec -it deployment/piefed-web -n piefed-application -- python manage.py dbshell
OpenObserve Integration
- ServiceMonitor: Automatically configures metrics collection
- Dashboards: Available at
https://obs.keyboardvagabond.com - Metrics: Application performance, request rates, error rates
🎯 Federation & Features
ActivityPub Federation
- Compatible with Mastodon, Lemmy, and other ActivityPub platforms
- Automatic content federation and user discovery
- Local and federated timelines
Reddit-like Features
- Communities (similar to subreddits)
- Voting system (upvotes/downvotes)
- Threaded comments
- Moderation tools
📊 Performance Optimization
Auto-Scaling Configuration
- Web HPA: 2-6 replicas based on CPU (70%) and memory (80%)
- Worker HPA: 1-4 replicas based on CPU (75%) and memory (85%)
Storage Optimization
- Longhorn Storage: 2-replica redundancy with S3 backup
- CDN: Cloudflare CDN for static assets and media
🔗 Integration with Infrastructure
Perfect Fit For Your Setup
- ✅ PostgreSQL: Uses your CloudNativePG cluster
- ✅ Redis: Integrates with your Redis cluster
- ✅ S3 Storage: Leverages Backblaze B2 + Cloudflare CDN
- ✅ Monitoring: Ready for OpenObserve metrics collection
- ✅ SSL: Works with your cert-manager + Let's Encrypt setup
- ✅ DNS: Compatible with external-dns + Cloudflare
- ✅ Container Registry: Uses Harbor for private image storage
Built with ❤️ for your sophisticated Kubernetes infrastructure