#!/bin/bash # Run once on a fresh Hetzner VPS (as root). # hetzner-infra のみブートストラップとして作成する。 # 他のリポジトリは最初の push 後に install.sh が作成する。 set -e REPO_DIR=/var/git/hetzner-infra.git APP_DIR=/app/infra # Install Docker curl -fsSL https://get.docker.com | sh # Create shared Docker network docker network create web || true # hetzner-infra bare repo をブートストラップ mkdir -p "$REPO_DIR" "$APP_DIR" git init --bare "$REPO_DIR" # 最初の push を受け取るための最小限のフック(install.sh 実行後に上書きされる) cat > "$REPO_DIR/hooks/post-receive" << 'HOOK' #!/bin/bash set -e APP_DIR=/app/infra GIT_WORK_TREE=$APP_DIR git checkout -f cd $APP_DIR docker network create web 2>/dev/null || true docker compose up -d docker compose exec -T caddy caddy reload --config /etc/caddy/Caddyfile 2>/dev/null || true echo "Deploy complete: hetzner-infra" if [ -f "$APP_DIR/scripts/sync-claude-services.sh" ]; then bash "$APP_DIR/scripts/sync-claude-services.sh" fi HOOK chmod +x "$REPO_DIR/hooks/post-receive" echo "" echo "Next steps:" echo " 1. git remote add origin root@:$REPO_DIR" echo " 2. git push origin master" echo " 3. ssh root@ 'bash $APP_DIR/scripts/install.sh'" echo " (他のリポジトリ作成 + 全フックの正式インストール)"