This repository has been archived on 2026-03-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
kb-web/deploy/deploy.sh
T
starmen1265 7eba30ee46 添加自动部署配置
- 服务器一键配置脚本
- 部署脚本 (支持测试/正式环境)
- Webhook 接收器
- 完整使用文档
2026-02-15 02:34:58 +08:00

81 lines
2.1 KiB
Bash

#!/bin/bash
# kb-web 自动部署脚本
# 用法: ./deploy.sh [test|prod] [branch]
set -e
DEPLOY_ENV=${1:-test}
BRANCH=${2:-main}
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
# 配置
case $DEPLOY_ENV in
test)
DEPLOY_DIR="/var/www/kb-web-test"
BACKUP_DIR="/var/www/kb-web-test-backups"
;;
prod)
DEPLOY_DIR="/var/www/kb-web-prod"
BACKUP_DIR="/var/www/kb-web-prod-backups"
;;
*)
echo "用法: $0 [test|prod] [branch]"
exit 1
;;
esac
REPO_URL="ssh://sc-gitea@192.168.1.22:2223/starmen1265/kb-web.git"
LOG_FILE="/var/log/kb-web-deploy.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "========== 开始部署 $DEPLOY_ENV 环境 =========="
log "分支: $BRANCH"
log "目标目录: $DEPLOY_DIR"
# 创建目录
mkdir -p "$DEPLOY_DIR" "$BACKUP_DIR" "$(dirname "$LOG_FILE")"
# 备份当前版本
if [ -d "$DEPLOY_DIR/.git" ]; then
log "备份当前版本..."
CURRENT_COMMIT=$(cd "$DEPLOY_DIR" && git rev-parse --short HEAD 2>/dev/null || echo "unknown")
tar -czf "$BACKUP_DIR/backup_${CURRENT_COMMIT}_${TIMESTAMP}.tar.gz" -C "$DEPLOY_DIR" . 2>/dev/null || true
# 只保留最近5个备份
cd "$BACKUP_DIR" && ls -t | tail -n +6 | xargs -r rm -f
fi
# 拉取代码
if [ -d "$DEPLOY_DIR/.git" ]; then
log "更新代码..."
cd "$DEPLOY_DIR"
git fetch origin
git reset --hard "origin/$BRANCH"
else
log "克隆代码..."
git clone -b "$BRANCH" "$REPO_URL" "$DEPLOY_DIR"
cd "$DEPLOY_DIR"
fi
# 设置权限
log "设置权限..."
chown -R www-data:www-data "$DEPLOY_DIR" 2>/dev/null || chown -R nginx:nginx "$DEPLOY_DIR" 2>/dev/null || true
find "$DEPLOY_DIR" -type d -exec chmod 755 {} \;
find "$DEPLOY_DIR" -type f -exec chmod 644 {} \;
# 记录部署信息
DEPLOY_INFO="$DEPLOY_DIR/.deploy_info"
cat > "$DEPLOY_INFO" << EOF
环境: $DEPLOY_ENV
分支: $BRANCH
提交: $(git rev-parse HEAD)
时间: $(date '+%Y-%m-%d %H:%M:%S')
部署者: webhook
EOF
log "部署完成!"
log "提交: $(git log -1 --oneline)"
log "=========================================="