fix: replace 'source .env' with safe env loader in all scripts

The raw 'source .env' pattern breaks when values contain special bash
characters like ) in passwords or database URLs. This caused deploy:remote
to fail with 'syntax error near unexpected token )'.

Changes:
- Created shared/scripts/lib/load-env.sh: reads .env line-by-line with
  export instead of source, safely handling special characters
- Updated db-backup.sh, db-restore.sh, deploy-remote.sh, remote.sh to
  use the shared loader
- Reordered deploy-remote.sh: git pull now runs first (step 1) so the
  remote always has the latest scripts before running backup (step 2)
This commit is contained in:
syntaxbullet
2026-02-13 14:46:30 +01:00
parent 878e3306eb
commit 942875e8d0
5 changed files with 60 additions and 33 deletions

View File

@@ -10,12 +10,10 @@
set -e
# Load environment variables
if [ -f .env ]; then
set -a
source .env
set +a
fi
# Load environment variables safely
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib/load-env.sh"
load_env
# Colors
GREEN='\033[0;32m'
@@ -41,22 +39,22 @@ fi
echo -e "${YELLOW}🚀 Deploying to $VPS_USER@$VPS_HOST:$REMOTE_DIR...${NC}"
# Step 1: Database backup (unless skipped)
# Step 1: Pull latest code (always first, so remote has the latest scripts)
echo -e "\n${YELLOW}⬇️ Step 1/4: Pulling latest changes...${NC}"
ssh -t "$VPS_USER@$VPS_HOST" "cd $REMOTE_DIR && git pull"
# Step 2: Database backup (unless skipped)
if [ "$SKIP_BACKUP" = false ]; then
echo -e "\n${YELLOW}💾 Step 1/4: Backing up remote database...${NC}"
echo -e "\n${YELLOW}💾 Step 2/4: Backing up remote database...${NC}"
ssh -t "$VPS_USER@$VPS_HOST" "cd $REMOTE_DIR && bash shared/scripts/db-backup.sh" || {
echo -e "${RED}⚠️ Backup failed. Aborting deployment.${NC}"
echo "Use --skip-backup to deploy without backing up."
exit 1
}
else
echo -e "\n${YELLOW}⏭️ Step 1/4: Skipping database backup (--skip-backup)${NC}"
echo -e "\n${YELLOW}⏭️ Step 2/4: Skipping database backup (--skip-backup)${NC}"
fi
# Step 2: Pull latest code
echo -e "\n${YELLOW}⬇️ Step 2/4: Pulling latest changes...${NC}"
ssh -t "$VPS_USER@$VPS_HOST" "cd $REMOTE_DIR && git pull"
# Step 3: Build production containers
echo -e "\n${YELLOW}🏗️ Step 3/4: Building production containers...${NC}"
ssh -t "$VPS_USER@$VPS_HOST" "cd $REMOTE_DIR && docker compose -f docker-compose.prod.yml build"