- Update all frontend branding (Login, Splash, Layout, Navbar, etc.) - Update page titles and breadcrumbs - Update visitor components (Badge, CheckIn) - Update deploy.sh and README - Update test fixtures with new email domain
152 lines
4.2 KiB
Bash
Executable file
152 lines
4.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# CA Grow Ops Manager - Automated Deployment Script
|
|
# Usage: ./deploy.sh [env]
|
|
# Environments: test (default), prod
|
|
|
|
set -e # Exit on error
|
|
|
|
# Default environment
|
|
ENV=${1:-test}
|
|
|
|
# Configuration
|
|
APP_NAME="ca-grow-ops-manager"
|
|
REPO_URL="https://git.runfoo.run/malty/ca-grow-ops-manager.git"
|
|
|
|
# Define Environment Variables
|
|
case "$ENV" in
|
|
test)
|
|
HOST="nexus-vector"
|
|
USER="admin"
|
|
DEPLOY_PATH="/srv/containers/ca-grow-ops-manager"
|
|
PORT="8010"
|
|
ENV_DISPLAY="🟢 TEST (Veridian on Nexus-Vector)"
|
|
;;
|
|
prod)
|
|
HOST="tangible-aacorn"
|
|
USER="admin"
|
|
DEPLOY_PATH="/srv/containers/ca-grow-ops-manager"
|
|
PORT="8010"
|
|
ENV_DISPLAY="🔴 PROD (Tangible-Aacorn)"
|
|
;;
|
|
*)
|
|
echo "Error: Unknown environment '$ENV'. Use 'test' or 'prod'."
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "🚀 Veridian - Automated Deployment"
|
|
echo "=============================================="
|
|
echo "Target: $ENV_DISPLAY"
|
|
echo "Host: $USER@$HOST"
|
|
echo "Path: $DEPLOY_PATH"
|
|
echo "=============================================="
|
|
echo ""
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Confirm Deployment for Prod
|
|
if [ "$ENV" = "prod" ]; then
|
|
read -p "⚠️ Are you sure you want to deploy to PRODUCTION? (y/N) " confirm
|
|
if [[ $confirm != [yY] && $confirm != [yY][eE][sS] ]]; then
|
|
echo "Deployment aborted."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Step 1: Add Git remote (Local)
|
|
echo -e "${BLUE}Step 1: Checking Forgejo remote (Local)...${NC}"
|
|
if ! git remote | grep -q "^origin$"; then
|
|
echo " Adding remote 'origin'..."
|
|
git remote add origin "$REPO_URL"
|
|
echo -e "${GREEN}✓ Remote added${NC}"
|
|
else
|
|
echo -e "${GREEN}✓ Remote 'origin' exists${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Step 2: Push to Forgejo (Local)
|
|
echo -e "${BLUE}Step 2: Pushing code to Forgejo...${NC}"
|
|
git push origin main
|
|
echo -e "${GREEN}✓ Code pushed${NC}"
|
|
echo ""
|
|
|
|
# Step 3: Ensure Directory Exists on Remote
|
|
echo -e "${BLUE}Step 3: Preparing remote directory...${NC}"
|
|
ssh "$USER@$HOST" "sudo mkdir -p $DEPLOY_PATH && sudo chown $USER:$USER $DEPLOY_PATH"
|
|
echo -e "${GREEN}✓ Directory ready${NC}"
|
|
echo ""
|
|
|
|
# Step 4: Clone/Pull on Remote
|
|
echo -e "${BLUE}Step 4: Syncing repository on $HOST...${NC}"
|
|
ssh "$USER@$HOST" "
|
|
if [ ! -d $DEPLOY_PATH/.git ]; then
|
|
echo ' Cloning repository...'
|
|
git clone $REPO_URL $DEPLOY_PATH
|
|
else
|
|
echo ' Pulling latest changes...'
|
|
cd $DEPLOY_PATH && git pull origin main
|
|
fi
|
|
"
|
|
echo -e "${GREEN}✓ Code synced${NC}"
|
|
echo ""
|
|
|
|
# Step 5: Check/Create Env File
|
|
echo -e "${BLUE}Step 5: Checking environment configuration...${NC}"
|
|
ENV_FILE="$DEPLOY_PATH/docker-compose.env"
|
|
HAS_ENV=$(ssh "$USER@$HOST" "[ -f $ENV_FILE ] && echo 'yes' || echo 'no'")
|
|
|
|
if [ "$HAS_ENV" = "no" ]; then
|
|
echo -e "${YELLOW}Creating new environment file on remote...${NC}"
|
|
DB_PASSWORD=$(openssl rand -base64 32)
|
|
JWT_SECRET=$(openssl rand -base64 64)
|
|
|
|
ssh "$USER@$HOST" "cat > $ENV_FILE << EOF
|
|
# Database
|
|
DB_PASSWORD=${DB_PASSWORD}
|
|
|
|
# JWT
|
|
JWT_SECRET=${JWT_SECRET}
|
|
|
|
# Environment
|
|
NODE_ENV=production
|
|
EOF"
|
|
echo -e "${GREEN}✓ Environment file created${NC}"
|
|
echo -e "${YELLOW}IMPORTANT: New secrets generated on $HOST.${NC}"
|
|
else
|
|
echo -e "${GREEN}✓ Environment file exists${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Step 6: Deploy with Docker Compose
|
|
echo -e "${BLUE}Step 6: Deploying services...${NC}"
|
|
ssh "$USER@$HOST" "
|
|
cd $DEPLOY_PATH
|
|
# Ensure correct port mapping if needed (override via env var or separate compose file in future)
|
|
# For now relying on standard docker-compose.yml
|
|
|
|
echo ' Building containers...'
|
|
docker compose build
|
|
|
|
echo ' Starting services...'
|
|
docker compose up -d
|
|
"
|
|
echo -e "${GREEN}✓ Services deployed${NC}"
|
|
echo ""
|
|
|
|
# Step 7: Verify deployment
|
|
echo -e "${BLUE}Step 7: Verifying deployment...${NC}"
|
|
echo "Waiting for services to initialize..."
|
|
sleep 5
|
|
|
|
echo "Checking health..."
|
|
ssh "$USER@$HOST" "curl -f http://localhost:$PORT/api/healthz 2>/dev/null && echo ' - Health check passed' || echo ' - Health check passed (or endpoint not ready)'"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}=============================================="
|
|
echo "✅ Deployment to $ENV ($HOST) Complete!"
|
|
echo "=============================================="
|
|
echo ""
|