#!/bin/bash # Deploy staging environment for cmc-sales # Usage: ./deploy-stg.sh [--no-cache] [--no-sync] USE_CACHE=true RUN_SYNC=true for arg in "$@"; do if [[ "$arg" == "--no-cache" ]]; then USE_CACHE=false echo "No cache flag detected: will rebuild images without cache." fi if [[ "$arg" == "--no-sync" ]]; then RUN_SYNC=false echo "No-sync flag detected: will NOT run sync_prod_to_staging.sh after deployment." fi done if [[ "$USE_CACHE" == "true" ]]; then echo "Using cached layers for docker build." fi echo "Starting staging deployment for cmc-sales..." echo "Setting variables..." SERVER="cmc-sales" REPO="git@code.springupsoftware.com:cmc/cmc-sales.git" BRANCH="stg" STAGING_DIR="cmc-sales-staging" echo "Connecting to server $SERVER via SSH..." # Pass variables into SSH session ssh $SERVER \ "SERVER=$SERVER REPO='$REPO' BRANCH='$BRANCH' STAGING_DIR='$STAGING_DIR' USE_CACHE='$USE_CACHE' RUN_SYNC='$RUN_SYNC' bash -s" << 'ENDSSH' set -e echo "Connected to $SERVER." cd /home/cmc # Clone or update staging branch if [ -d "$STAGING_DIR" ]; then echo "Updating existing staging directory $STAGING_DIR..." cd "$STAGING_DIR" git fetch origin git checkout $BRANCH git pull origin $BRANCH else echo "Cloning repository $REPO to $STAGING_DIR..." git clone -b $BRANCH $REPO $STAGING_DIR cd "$STAGING_DIR" fi # Create .env file for go-app if it doesn't exist ENV_PATH="/home/cmc/$STAGING_DIR/go-app/.env" if [ ! -f "$ENV_PATH" ]; then echo "Creating .env file for go-app..." cat > "$ENV_PATH" <<'ENVEOF' # Environment variables for Go app mail configuration SMTP_HOST="host.docker.internal" SMTP_PORT=1025 SMTP_USER="" SMTP_PASS="" SMTP_FROM="CMC Sales " DB_HOST="172.17.0.1" DB_PORT="3306" DB_USER="cmc" DB_PASSWORD="xVRQI&cA?7AU=hqJ!%au" DB_NAME="cmc" ENVEOF fi if [[ "$USE_CACHE" == "false" ]]; then echo "Building and starting docker compose for staging (no cache)..." docker compose -f docker-compose.stg.yml build --no-cache docker compose -f docker-compose.stg.yml up -d --remove-orphans else echo "Building and starting docker compose for staging (using cache)..." docker compose -f docker-compose.stg.yml build docker compose -f docker-compose.stg.yml up -d --remove-orphans fi echo "Checking running containers..." # Copy migration and restore scripts to server cp /home/cmc/cmc-sales-staging/deploy/scripts/run_all_migrations.sh /home/cmc/run_all_migrations.sh chmod +x /home/cmc/run_all_migrations.sh cp /home/cmc/cmc-sales-staging/deploy/scripts/restore_db_from_backup.sh /home/cmc/restore_db_from_backup.sh chmod +x /home/cmc/restore_db_from_backup.sh echo "Creating sync script for staging directories..." # Create sync script for staging dirs cat > /home/cmc/sync_prod_to_staging.sh <<'EOF' #!/bin/bash # /home/cmc/restore_db_from_backup.sh # echo "Syncing PDF files..." # rsync -av --delete --omit-dir-times --no-perms --progress /mnt/vault/pdf/ /home/cmc/cmc-sales-staging/app/webroot/pdf/ # echo "Syncing attachments files..." # rsync -av --delete --omit-dir-times --no-perms --progress /mnt/vault/attachments_files/ /home/cmc/cmc-sales-staging/app/webroot/attachments_files/ # echo "Syncing emails..." # rsync -av --delete --omit-dir-times --no-perms --progress /mnt/vault/emails/ /home/cmc/cmc-sales-staging/vault/emails/ # echo "Syncing vaultmsgs..." # rsync -av --delete --omit-dir-times --no-perms --progress /mnt/vault/vaultmsgs/ /home/cmc/cmc-sales-staging/vault/vaultmsgs/ # echo "Sync complete." EOF chmod +x /home/cmc/sync_prod_to_staging.sh echo "Ensuring cron job for sync script is present..." # Add cron job if not present (crontab -l 2>/dev/null | grep -q '/home/cmc/sync_prod_to_staging.sh') || \ (crontab -l 2>/dev/null; echo '0 3 * * * /home/cmc/sync_prod_to_staging.sh') | crontab - # if [[ "$RUN_SYNC" == "true" ]]; then # echo "Running sync_prod_to_staging.sh now..." # /home/cmc/sync_prod_to_staging.sh # fi echo "Deployment complete." ENDSSH