Add VPS deployment workflow
This commit is contained in:
parent
280247e1e5
commit
df7e4de7f9
5 changed files with 238 additions and 4 deletions
65
scripts/deploy_vps.sh
Executable file
65
scripts/deploy_vps.sh
Executable file
|
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
DEPLOY_BRANCH="${DEPLOY_BRANCH:-feature/api-for-subagent}"
|
||||
HEALTH_URL="${HEALTH_URL:-http://127.0.0.1:8088/health}"
|
||||
COMPOSE_FILES="${COMPOSE_FILES:-docker-compose.yml:docker-compose.vps.yml}"
|
||||
|
||||
log() {
|
||||
printf '[deploy] %s\n' "$*"
|
||||
}
|
||||
|
||||
fail() {
|
||||
printf '[deploy] fatal: %s\n' "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
command -v git >/dev/null 2>&1 || fail "git is not installed"
|
||||
command -v docker >/dev/null 2>&1 || fail "docker is not installed"
|
||||
command -v curl >/dev/null 2>&1 || fail "curl is not installed"
|
||||
docker compose version >/dev/null 2>&1 || fail "docker compose plugin is not available"
|
||||
|
||||
[ -d .git ] || fail "current directory is not a git checkout"
|
||||
[ -f docker-compose.yml ] || fail "docker-compose.yml not found in current directory"
|
||||
[ -f .env ] || fail ".env is missing; create it on the VPS with OPENAI_API_KEY and related runtime settings"
|
||||
|
||||
compose_args=()
|
||||
IFS=':' read -r -a compose_files <<< "$COMPOSE_FILES"
|
||||
for compose_file in "${compose_files[@]}"; do
|
||||
if [ -f "$compose_file" ]; then
|
||||
compose_args+=("-f" "$compose_file")
|
||||
else
|
||||
fail "compose file not found: ${compose_file}"
|
||||
fi
|
||||
done
|
||||
|
||||
log "fetching origin/${DEPLOY_BRANCH}"
|
||||
git fetch --prune origin "+refs/heads/${DEPLOY_BRANCH}:refs/remotes/origin/${DEPLOY_BRANCH}"
|
||||
|
||||
log "checking out ${DEPLOY_BRANCH}"
|
||||
git checkout -B "$DEPLOY_BRANCH" "origin/$DEPLOY_BRANCH"
|
||||
git reset --hard "origin/$DEPLOY_BRANCH"
|
||||
|
||||
log "building Docker Compose services"
|
||||
docker compose "${compose_args[@]}" build
|
||||
|
||||
log "starting Docker Compose stack"
|
||||
docker compose "${compose_args[@]}" up -d --remove-orphans
|
||||
|
||||
log "current service state"
|
||||
docker compose "${compose_args[@]}" ps
|
||||
|
||||
log "waiting for API health at ${HEALTH_URL}"
|
||||
for attempt in {1..30}; do
|
||||
if curl -fsS "$HEALTH_URL" >/dev/null; then
|
||||
log "API is healthy"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
log "health check failed, retry ${attempt}/30"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
log "API did not become healthy; browser-api logs follow"
|
||||
docker compose "${compose_args[@]}" logs --tail=120 browser-api || true
|
||||
fail "health check failed: ${HEALTH_URL}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue