Files
2026-09-23 15:41:46 +08:00

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