# Migration Guide: Dev Mac → Production Mac ## Overview Migrate the entire Studio EinsZwoVier web application from development Mac (`einszwovier.local`) to production Mac (`admin@124.local`) using SCP carbon copy method. ## Prerequisites - SSH access to production Mac: Configure SSH shortcut for easy access - Both Macs on same network - Docker Desktop installed on production Mac (124.local) - Git configured on production Mac ### Configure SSH Access (Recommended) Add to `~/.ssh/config` on dev Mac: ```ssh-config Host 124 HostName 124.local User admin ForwardAgent yes ``` Then test: `ssh 124 "echo 'Connection works!'"` ## Migration Steps ### 1. Push Latest Changes (on dev Mac) ```bash cd /Users/aron124/webapp_124 git push forgejo main git push origin main # optional: backup to GitHub ``` ### 2. Stop All Services (on dev Mac) ```bash cd /Users/aron124/webapp_124 docker compose down ``` **Verify all stopped:** ```bash docker compose ps # should show nothing running ``` ### 3. Copy Everything to Production Mac **On production Mac (124.local), run:** ```bash # Create parent directory if needed mkdir -p /Users/admin # SCP entire project (this will take a while - includes all Docker volumes) scp -r aron124@einszwovier.local:/Users/aron124/webapp_124 /Users/admin/ # Estimated transfer time: 5-30 minutes depending on: # - Ollama models size (~several GB) # - Matrix message history # - BookStack content # - LLM cache ``` **What gets copied:** - ✅ All source code and git history - ✅ `.env` file with credentials - ✅ Matrix database & message history (`matrix/data/`) - ✅ Ollama LLM models (`ollama/`) - ✅ Open WebUI data (`open-webui/`) - ✅ BookStack content & database (`bookstack/`) - ✅ Docmost database (`docmost/`) - ✅ User uploads (`data/uploads/`) - ✅ Docker Compose configuration ### 4. Fix File Permissions (on production Mac) ```bash cd /Users/admin/webapp_124 # Ensure you own all files sudo chown -R $(whoami):staff . # Fix Docker volume permissions if needed chmod -R 755 matrix/ ollama/ open-webui/ bookstack/ docmost/ data/ ``` ### 5. Start Services (on production Mac) ```bash cd /Users/admin/webapp_124 docker compose up -d ``` ### 6. Verify Everything Works ```bash # Check all services are running docker compose ps # Check health status (wait ~30 seconds for health checks) docker compose ps | grep -i healthy # Check logs for errors docker compose logs --tail=50 # Test web interface open http://localhost # or http://einszwovier.local (if DNS is set up) ``` ### 7. Restart Dev Mac Services (optional) If you want to keep dev Mac running alongside: ```bash # On dev Mac cd /Users/aron124/webapp_124 docker compose up -d ``` **Note:** Both will share same Matrix homeserver name - you may need to: - Change `server_name` in `matrix/data/homeserver.yaml` on one instance - Use different external ports in `docker-compose.yml` ## Verification Checklist - [ ] All 11 services show as "healthy" in `docker compose ps` - [ ] Web interface accessible at or - [ ] Cost calculator can analyze PDFs - [ ] Matrix integration works (submit test order) - [ ] BookStack accessible at configured port - [ ] Open WebUI (LLM chat) accessible - [ ] JupyterHub accessible and courses load - [ ] Forgejo instance accessible - [ ] Element Web (Matrix client) accessible ## Troubleshooting ### Services won't start ```bash # Check logs docker compose logs [service-name] # Common issues: # - Port conflicts: Change ports in docker-compose.yml # - Permission errors: Run chown command again # - Volume corruption: May need to delete and recreate volumes ``` ### Matrix won't connect ```bash # Check Matrix logs docker compose logs synapse # Verify environment variables cat .env | grep MATRIX # Test Matrix health endpoint curl http://localhost:8008/_matrix/client/versions ``` ### Git issues ```bash # Verify remotes still work git remote -v git fetch forgejo # If needed, reconfigure git remote set-url forgejo https://forgejo.petau.net/aron/124-webapp.git ``` ## Rollback Plan If migration fails, dev Mac (`einszwovier.local`) still has everything: 1. Stop services on production Mac: `docker compose down` 2. Restart on dev Mac: `docker compose up -d` 3. Debug issue before retrying migration ## Post-Migration Cleanup (optional) After confirming production Mac works for 1-2 weeks: **On dev Mac:** ```bash cd /Users/aron124/webapp_124 docker compose down -v # removes volumes too cd .. rm -rf webapp_124 # or keep as backup ``` ## Network Configuration Both Macs are on `einszwovier.local` domain. You may want to: - Update DNS to point `einszwovier.local` → production Mac IP - Configure nginx reverse proxy for external access - Set up SSL certificates for HTTPS - Configure firewall rules ## Data That Won't Transfer (if using git clone method) If you later need to do a clean migration via git clone instead: - Matrix message history (excluded in `.gitignore`) - Matrix signing keys (will regenerate) - Ollama models (need to re-download) - BookStack uploads/database (excluded in `.gitignore`) - User uploaded PDFs (excluded in `.gitignore`) **But with SCP method, ALL of this transfers! ✅**