# Sankofa & Phoenix Deployment Guide for r630-01 **Target Server:** r630-01 (192.168.11.11) **Deployment Date:** $(date +%Y-%m-%d) **Status:** Ready for Deployment --- ## Overview This guide provides step-by-step instructions for deploying Sankofa and Phoenix control plane services to r630-01 Proxmox node. ### Architecture ``` r630-01 (192.168.11.11) ├── VMID 7803: PostgreSQL (10.160.0.13) ├── VMID 7802: Keycloak (10.160.0.12) ├── VMID 7800: Sankofa API (10.160.0.10) └── VMID 7801: Sankofa Portal (10.160.0.11) ``` ### Network Configuration - **VLAN:** 160 - **Subnet:** 10.160.0.0/22 - **Gateway:** 10.160.0.1 - **Storage:** thin1 (208GB available) --- ## Prerequisites 1. **SSH Access to r630-01** ```bash ssh root@192.168.11.11 ``` 2. **Sankofa Project Available** - Location: `/home/intlc/projects/Sankofa` - Must contain `api/` and `portal/` directories 3. **Proxmox Storage** - Verify `thin1` storage is available - Check available space: `pvesm status` 4. **Network Configuration** - Verify VLAN 160 is configured - Verify gateway (10.160.0.1) is accessible --- ## Deployment Steps ### Step 1: Prepare Configuration 1. Copy environment template: ```bash cd /home/intlc/projects/proxmox/scripts cp env.r630-01.example .env.r630-01 ``` 2. Edit `.env.r630-01` and update: - Database passwords - Keycloak admin password - Client secrets - JWT secrets - Any other production values ### Step 2: Deploy Containers Deploy all LXC containers: ```bash cd /home/intlc/projects/proxmox/scripts ./deploy-sankofa-r630-01.sh ``` This will create: - PostgreSQL container (VMID 7803) - Keycloak container (VMID 7802) - API container (VMID 7800) - Portal container (VMID 7801) ### Step 3: Setup PostgreSQL Configure PostgreSQL database: ```bash ./setup-postgresql-r630-01.sh ``` This will: - Install PostgreSQL 16 - Create `sankofa` database - Create `sankofa` user - Configure network access - Enable required extensions **Note:** The script will generate a random password. Update `.env.r630-01` with the actual password. ### Step 4: Setup Keycloak Configure Keycloak identity service: ```bash ./setup-keycloak-r630-01.sh ``` This will: - Install Java 21 - Download and install Keycloak 24.0.0 - Create Keycloak database - Configure PostgreSQL connection - Create admin user - Create API and Portal clients **Note:** The script will generate random passwords and secrets. Update `.env.r630-01` with the actual values. ### Step 5: Deploy API Deploy Sankofa API service: ```bash ./deploy-api-r630-01.sh ``` This will: - Install Node.js 18 - Install pnpm - Copy API project files - Install dependencies - Configure environment - Run database migrations - Build API - Create systemd service - Start API service ### Step 6: Run Database Migrations If migrations weren't run during API deployment: ```bash ./run-migrations-r630-01.sh ``` ### Step 7: Deploy Portal Deploy Sankofa Portal: ```bash ./deploy-portal-r630-01.sh ``` This will: - Install Node.js 18 - Install pnpm - Copy Portal project files - Install dependencies - Configure environment - Build Portal (Next.js) - Create systemd service - Start Portal service --- ## Verification ### Check Container Status ```bash ssh root@192.168.11.11 "pct list | grep -E '780[0-3]'" ``` ### Check Service Status **PostgreSQL:** ```bash ssh root@192.168.11.11 "pct exec 7803 -- systemctl status postgresql" ``` **Keycloak:** ```bash ssh root@192.168.11.11 "pct exec 7802 -- systemctl status keycloak" curl http://10.160.0.12:8080/health/ready ``` **API:** ```bash ssh root@192.168.11.11 "pct exec 7800 -- systemctl status sankofa-api" curl http://10.160.0.10:4000/health ``` **Portal:** ```bash ssh root@192.168.11.11 "pct exec 7801 -- systemctl status sankofa-portal" curl http://10.160.0.11:3000 ``` ### Test GraphQL Endpoint ```bash curl -X POST http://10.160.0.10:4000/graphql \ -H "Content-Type: application/json" \ -d '{"query": "{ __typename }"}' ``` --- ## Service URLs | Service | URL | Description | |---------|-----|-------------| | PostgreSQL | `10.160.0.13:5432` | Database | | Keycloak | `http://10.160.0.12:8080` | Identity Provider | | Keycloak Admin | `http://10.160.0.12:8080/admin` | Admin Console | | API | `http://10.160.0.10:4000` | GraphQL API | | API GraphQL | `http://10.160.0.10:4000/graphql` | GraphQL Endpoint | | API Health | `http://10.160.0.10:4000/health` | Health Check | | Portal | `http://10.160.0.11:3000` | Web Portal | --- ## Troubleshooting ### Container Won't Start ```bash # Check container status ssh root@192.168.11.11 "pct status 7800" # Check container logs ssh root@192.168.11.11 "pct exec 7800 -- journalctl -n 50" ``` ### Database Connection Issues ```bash # Test database connection from API container ssh root@192.168.11.11 "pct exec 7800 -- bash -c 'PGPASSWORD=your_password psql -h 10.160.0.13 -U sankofa -d sankofa -c \"SELECT 1;\"'" ``` ### Keycloak Not Starting ```bash # Check Keycloak logs ssh root@192.168.11.11 "pct exec 7802 -- journalctl -u keycloak -n 100" # Check Keycloak process ssh root@192.168.11.11 "pct exec 7802 -- ps aux | grep keycloak" ``` ### API Service Issues ```bash # Check API logs ssh root@192.168.11.11 "pct exec 7800 -- journalctl -u sankofa-api -n 100" # Restart API service ssh root@192.168.11.11 "pct exec 7800 -- systemctl restart sankofa-api" ``` ### Portal Build Failures ```bash # Check build logs ssh root@192.168.11.11 "pct exec 7801 -- journalctl -u sankofa-portal -n 100" # Rebuild Portal ssh root@192.168.11.11 "pct exec 7801 -- bash -c 'cd /opt/sankofa-portal && pnpm build'" ``` --- ## Post-Deployment Tasks 1. **Update Environment Variables** - Update `.env.r630-01` with actual passwords and secrets - Update service configurations if needed 2. **Configure Firewall Rules** - Allow access to service ports - Configure VLAN 160 routing if needed 3. **Set Up Cloudflare Tunnels** - Configure tunnels for external access - Set up DNS records 4. **Configure Monitoring** - Set up Prometheus exporters - Configure Grafana dashboards - Set up alerting 5. **Backup Configuration** - Document all passwords and secrets - Create backup procedures - Test restore procedures --- ## Maintenance ### Update Services **Update API:** ```bash ssh root@192.168.11.11 "pct exec 7800 -- bash -c 'cd /opt/sankofa-api && git pull && pnpm install && pnpm build && systemctl restart sankofa-api'" ``` **Update Portal:** ```bash ssh root@192.168.11.11 "pct exec 7801 -- bash -c 'cd /opt/sankofa-portal && git pull && pnpm install && pnpm build && systemctl restart sankofa-portal'" ``` ### Backup Database ```bash ssh root@192.168.11.11 "pct exec 7803 -- bash -c 'PGPASSWORD=your_password pg_dump -h localhost -U sankofa sankofa > /tmp/sankofa_backup_$(date +%Y%m%d).sql'" ``` ### View Logs **API Logs:** ```bash ssh root@192.168.11.11 "pct exec 7800 -- journalctl -u sankofa-api -f" ``` **Portal Logs:** ```bash ssh root@192.168.11.11 "pct exec 7801 -- journalctl -u sankofa-portal -f" ``` --- ## Support For issues or questions: 1. Check logs using troubleshooting commands above 2. Review deployment scripts for configuration 3. Verify network connectivity between containers 4. Check Proxmox storage and resource availability --- **Last Updated:** $(date +%Y-%m-%d)