# Deployment Guide — Multi-Environment **Project**: CA Grow Ops Manager **Targets**: - **Test**: `veridian.runfoo.run` (Staff/Test Area) - Hosted on `nexus-vector` - **Prod**: `tangible-aacorn` (Client Production) **Created**: 2025-12-08 **Last Updated**: 2025-12-26 --- ## Overview This guide explains how to deploy CA Grow Ops Manager to various environments. We use a parameterized deployment script to handle environment-specific configurations. --- ## Prerequisites ### On Local Machine - Git with SSH keys configured - Access to servers via SSH (`admin@nexus-vector`, `admin@tangible-aacorn`) - Forgejo account with SSH key added ### On Servers - Docker and Docker Compose installed ✅ - PostgreSQL 15 available (via Docker) - Redis available (via Docker) - Port 8010 available (default) --- ## Deployment Script We use `deploy.sh` for automated deployment. ### Usage ```bash ./deploy.sh [test|prod] ``` - **test** (Default): Deploys to `veridian.runfoo.run` (Host: `nexus-vector`, Path: `/srv/containers/ca-grow-ops-manager`) - **prod**: Deploys to `tangible-aacorn` (Host: `tangible-aacorn`, Path: `/srv/containers/ca-grow-ops-manager`) --- ## Step 1: Initial Deployment To set up a new environment for the first time: 1. **Run the deploy script**: ```bash ./deploy.sh test # or prod ``` 2. **Follow the prompts**: - The script will set up the remote directory. - It will clone the repository. - It will generate secure credentials (`docker-compose.env`) if missing. - It will build and start the containers. --- ## Step 2: Verify Deployment ### 2.1 Check Health The script attempts a health check automatically. You can also manually check: ```bash curl http://:8010/api/healthz ``` ### 2.2 View Logs ssh into the target server: ```bash ssh admin@ cd /srv/containers/ca-grow-ops-manager-test # Adjust path based on env docker compose logs -f ``` --- ## Configuration ### Environment Variables Located in `docker-compose.env` on the server: ```bash # Database DB_PASSWORD=... # JWT JWT_SECRET=... # Environment NODE_ENV=production ``` --- ## CI/CD (Optional) You can still use Forgejo Actions for CI/CD. Ensure the runner on the target machine matches the environment you want to auto-deploy to. --- ## Troubleshooting ### Deployment Fails 1. **Permission Denied**: Check SSH keys. 2. **Port Conflict**: Ensure port 8010 is free on the target. 3. **Database Error**: Check `docker compose logs db`. --- ## Security Checklist - [ ] Changed default DB_PASSWORD (Done automatically by script) - [ ] Changed default JWT_SECRET (Done automatically by script) - [ ] Configured firewall rules (UFW) - [ ] Set up HTTPS/SSL (Recommended for Prod) ---