52 lines
1.3 KiB
Bash
Executable File
52 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 部署 dev 到本机 Docker Compose(可由 Gitea Actions 或 Webhook 调用)
|
|
set -euo pipefail
|
|
|
|
APP_DIR="${APP_DIR:-/opt/AirShelf}"
|
|
BRANCH="${BRANCH:-dev}"
|
|
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}"
|
|
ENV_FILE="${ENV_FILE:-core/backend/.env}"
|
|
LOG_DIR="${LOG_DIR:-/var/log/airshelf}"
|
|
LOCK_FILE="${LOCK_FILE:-/tmp/airshelf-deploy-dev.lock}"
|
|
|
|
mkdir -p "$LOG_DIR"
|
|
LOG_FILE="${LOG_DIR}/deploy-dev.log"
|
|
|
|
exec 9>"$LOCK_FILE"
|
|
if ! flock -n 9; then
|
|
echo "$(date '+%F %T') another deploy is running, skip" | tee -a "$LOG_FILE"
|
|
exit 0
|
|
fi
|
|
|
|
{
|
|
echo "======== $(date '+%F %T') deploy start ========"
|
|
cd "$APP_DIR"
|
|
|
|
if [[ ! -d .git ]]; then
|
|
echo "ERROR: $APP_DIR is not a git repo. Clone from your Gitea first."
|
|
exit 1
|
|
fi
|
|
|
|
# .env 在仓库里被跟踪,pull 会覆盖服务器生产配置;先备份再还原
|
|
ENV_BACKUP=""
|
|
if [[ -f "$ENV_FILE" ]]; then
|
|
ENV_BACKUP="$(mktemp)"
|
|
cp -a "$ENV_FILE" "$ENV_BACKUP"
|
|
echo "backed up $ENV_FILE"
|
|
fi
|
|
|
|
git fetch --prune origin
|
|
git checkout "$BRANCH"
|
|
git reset --hard "origin/$BRANCH"
|
|
|
|
if [[ -n "$ENV_BACKUP" ]]; then
|
|
cp -a "$ENV_BACKUP" "$ENV_FILE"
|
|
rm -f "$ENV_BACKUP"
|
|
echo "restored $ENV_FILE"
|
|
fi
|
|
|
|
docker compose -f "$COMPOSE_FILE" up -d --build
|
|
|
|
echo "======== $(date '+%F %T') deploy ok ========"
|
|
} >>"$LOG_FILE" 2>&1
|