Changes: - Uncomment S3 storage configuration (lines 58-66) - Set S3 endpoint to http://minio:9000 (internal Docker network) - Configure S3 force path style for MinIO compatibility This replaces the external endpoint (https://s3.b28.dev) with direct container communication, avoiding Cloudflare Tunnel latency and SSL/redirect issues. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Portfolio Infrastructure - Directus CMS
Shared infrastructure providing CMS and API services for all portfolio demos.
Purpose
This repository contains the infrastructure layer for the portfolio platform:
- Directus CMS: Content management and API
- PostgreSQL: Database backend
This is deployed once and provides services to multiple demo applications.
Architecture
┌─────────────────────────────────────┐
│ Portfolio Infrastructure │
│ Domain: directus.b28.dev │
├─────────────────────────────────────┤
│ ┌──────────────┐ ┌─────────────┐ │
│ │ Directus │──│ PostgreSQL │ │
│ │ CMS/API │ │ Database │ │
│ └──────────────┘ └─────────────┘ │
└─────────────────────────────────────┘
│
│ (consumed by demos)
▼
Demo Applications
├─ portfolio-site
├─ hackathon-project-1
└─ hackathon-project-2
Directus Collections
Core Collections
- profile: Personal information (name, bio, etc.)
- skills: Technical skills and proficiencies
- social_links: Social media and contact links
- posts: Blog posts
- work_projects: Portfolio work items
Demo Registry
- demos: Catalog of all live demos
- name, description, tech_stack
- repo_url, live_url
- thumbnail, category
- built_at, is_featured
Quick Start
Local Development
-
Copy environment file:
cp .env.example .env -
Edit .env with your values:
# Generate secure keys openssl rand -base64 32 # for DIRECTUS_KEY openssl rand -base64 32 # for DIRECTUS_SECRET -
Start services:
docker compose up -d -
Access Directus:
- URL: http://localhost:8055
- Email: (from ADMIN_EMAIL in .env)
- Password: (from ADMIN_PASSWORD in .env)
Coolify Deployment
-
Create new resource in Coolify
- Type: Docker Compose
- Source: Git repository (this repo)
-
Set environment variables in Coolify:
DB_PASSWORD: Secure database passwordADMIN_EMAIL: Your admin emailADMIN_PASSWORD: Secure admin passwordDIRECTUS_KEY: Generated keyDIRECTUS_SECRET: Generated secretPUBLIC_URL:https://directus.b28.dev
-
Configure domain:
- Domain:
directus.b28.dev - Coolify handles SSL/TLS automatically
- Domain:
-
Deploy
Database Setup
The database is initialized from database/init.sql on first run. This includes:
- Schema definition (tables, relationships)
- Initial collections setup
- Sample data (optional)
Backup Database
docker compose exec postgres pg_dump -U directus directus > backup_$(date +%Y%m%d).sql
Restore Database
docker compose exec -T postgres psql -U directus directus < backup.sql
Adding New Collections
- Access Directus admin UI
- Navigate to Settings → Data Model
- Create new collection
- Define fields and relationships
- Set permissions
Collections are stored in PostgreSQL and persist across restarts.
Connecting Demos
Demo applications connect to this infrastructure via environment variable:
# In demo's docker-compose.yml
environment:
DIRECTUS_URL: https://directus.b28.dev
API Access
Directus provides a REST API at:
https://directus.b28.dev/items/{collection}
Example endpoints:
GET /items/posts- List all postsGET /items/demos?filter[is_featured][_eq]=true- Featured demosGET /items/profile- Profile data
See Directus API docs for full reference.
Maintenance
Update Directus
docker compose pull directus
docker compose up -d directus
View Logs
docker compose logs -f directus
docker compose logs -f postgres
Restart Services
docker compose restart
Security Notes
- Never commit .env files - they contain secrets
- Database backups may contain PII - handle carefully
- Use strong passwords for admin and database
- Rotate keys periodically (DIRECTUS_KEY, DIRECTUS_SECRET)
Troubleshooting
Directus won't start
# Check PostgreSQL is healthy
docker compose ps postgres
# Check logs
docker compose logs directus
# Verify environment variables
docker compose exec directus env | grep DB_
Can't access Directus UI
- Check service is running:
docker compose ps - Verify health check:
docker compose exec directus wget -O- http://localhost:8055/server/health - Check Coolify domain configuration
Database connection issues
# Test PostgreSQL connection
docker compose exec postgres psql -U directus -d directus -c "SELECT 1;"
# Check database exists
docker compose exec postgres psql -U directus -l
License
This infrastructure is for personal portfolio use.
Related Repositories
- demo-portfolio-site - Main portfolio website
- (Other demo repositories as they're created)