You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

83 lines
2.3 KiB

#!/bin/bash
set -e
ENVIRONMENT=${1:-beta}
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
APP_NAME="your-app-name"
# مسیرهای مختلف برای محیطهای مختلف
if [ "$ENVIRONMENT" = "production" ]; then
DEPLOY_PATH="/opt/production/$APP_NAME"
PM2_ECOSYSTEM="ecosystem.config.js"
else
DEPLOY_PATH="/opt/beta/$APP_NAME"
PM2_ECOSYSTEM="ecosystem.beta.config.js"
fi
echo "🚀 Starting deployment to $ENVIRONMENT environment..."
# ایجاد دایرکتوری در صورت عدم وجود
sudo mkdir -p $DEPLOY_PATH
sudo mkdir -p $DEPLOY_PATH/releases
sudo mkdir -p $DEPLOY_PATH/shared/logs
# استخراج آرشیو جدید
RELEASE_DIR="$DEPLOY_PATH/releases/release-$TIMESTAMP"
sudo mkdir -p $RELEASE_DIR
# پیدا کردن آخرین فایل آرشیو
ARCHIVE_FILE=$(ls -t /tmp/deploy-*.tar.gz | head -n1)
sudo tar -xzf $ARCHIVE_FILE -C $RELEASE_DIR
# نصب dependencies
cd $RELEASE_DIR
sudo npm ci --only=production
# کپی فایلهای پیکربندی از shared
if [ -f "$DEPLOY_PATH/shared/.env" ]; then
sudo cp "$DEPLOY_PATH/shared/.env" $RELEASE_DIR/
fi
# ایجاد symlink برای logs
sudo ln -sfn $DEPLOY_PATH/shared/logs $RELEASE_DIR/logs
# تست سریع برای اطمینان از صحت کد
echo "🧪 Running quick tests..."
sudo npm test
# ذخیره کردن لینک فعلی برای rollback
if [ -L "$DEPLOY_PATH/current" ]; then
PREVIOUS_RELEASE=$(readlink $DEPLOY_PATH/current)
echo "Previous release: $PREVIOUS_RELEASE"
fi
# بروزرسانی symlink به نسخه جدید
sudo ln -sfn $RELEASE_DIR $DEPLOY_PATH/current
# تنظیم مالکیت فایلها
sudo chown -R $USER:$USER $DEPLOY_PATH
# راهاندازی/ریاستارت PM2
cd $DEPLOY_PATH/current
if pm2 list | grep -q $APP_NAME; then
echo "🔄 Restarting existing PM2 process..."
pm2 restart $PM2_ECOSYSTEM --env $ENVIRONMENT
else
echo "🆕 Starting new PM2 process..."
pm2 start $PM2_ECOSYSTEM --env $ENVIRONMENT
fi
# ذخیره پیکربندی PM2
pm2 save
echo "✅ Deployment completed successfully!"
# پاکسازی نسخههای قدیمی (نگهداری 5 نسخه اخیر)
sudo find $DEPLOY_PATH/releases -maxdepth 1 -name "release-*" -type d | sort -r | tail -n +6 | xargs sudo rm -rf
# پاکسازی فایل آرشیو
sudo rm -f $ARCHIVE_FILE
echo "🧹 Cleanup completed!"