From fe96e429c0cef1ce4c91577699794139d8e37266 Mon Sep 17 00:00:00 2001 From: Deckard Date: Mon, 20 Oct 2025 00:34:35 -0400 Subject: [PATCH] tagging updates --- .gitignore | 3 +- README.md | 28 ++++++++++ configurations/playerbot-only.conf | 1 + scripts/migrate-stack.sh | 84 ++++++++++++++---------------- scripts/rebuild-with-modules.sh | 10 ++++ 5 files changed, 79 insertions(+), 47 deletions(-) create mode 100644 configurations/playerbot-only.conf diff --git a/.gitignore b/.gitignore index f9b3194..36ebf77 100644 --- a/.gitignore +++ b/.gitignore @@ -8,9 +8,10 @@ local-data-tools/ storage/ source/ .claude/ -.env +images/ node_modules/ .mcp*/ +.env package-lock.json package.json diff --git a/README.md b/README.md index f608f23..71a5b93 100644 --- a/README.md +++ b/README.md @@ -224,12 +224,40 @@ Use this workflow to build locally, then push the same stack to a remote host: docker compose --profile services-playerbots logs --tail 100 ac-worldserver ``` +### Remote Deploy Workflow +1. **Configure & Build Locally** + ```bash + ./setup.sh --module-config sam --playerbot-max-bots 3000 + ./scripts/rebuild-with-modules.sh --yes + ``` +2. **Migrate Stack to Remote** + ```bash + ./scripts/migrate-stack.sh \ + --host docker-server \ + --user sam \ + --project-dir /home/sam/src/acore-compose + ``` + (Exports rebuilt images to `images/acore-modules-images.tar`, including both `acore/...:modules-latest` and `uprightbass360/...:Playerbot` tags, then syncs `storage/` unless `--skip-storage` is provided.) +3. **Deploy on Remote Host** + ```bash + ssh docker-server ' + cd /home/sam/src/acore-compose && + ./deploy.sh --skip-rebuild --no-watch + ' + ``` +4. **Verify Services** + ```bash + ./status.sh --once + docker compose --profile services-playerbots logs --tail 100 ac-worldserver + ``` + ### Module Presets - Drop comma-separated module lists into `configurations/*.conf` (for example `configurations/playerbot-modules.conf`). - `setup.sh` automatically adds these presets to the module menu and enables the listed modules when selected or when `--module-config ` is provided. - Built-in presets: - `configurations/suggested-modules.conf` – default solo-friendly QoL stack. - `configurations/playerbots-suggested-modules.conf` – suggested stack plus playerbots. + - `configurations/playerbot-only.conf` – playerbot-focused profile (adjust `--playerbot-max-bots`). - Custom example: - `configurations/sam.conf` – Sam's playerbot-focused profile (set `--playerbot-max-bots 3000` when using this preset). diff --git a/configurations/playerbot-only.conf b/configurations/playerbot-only.conf new file mode 100644 index 0000000..f760419 --- /dev/null +++ b/configurations/playerbot-only.conf @@ -0,0 +1 @@ +MODULE_PLAYERBOTS,MODULE_PLAYER_BOT_LEVEL_BRACKETS,MODULE_SOLO_LFG,MODULE_TRANSMOG,MODULE_NPC_BUFFER,MODULE_LEARN_SPELLS,MODULE_FIREWORKS,MODULE_AUTOBALANCE,MODULE_REAGENT_BANK,MODULE_BLACK_MARKET_AUCTION_HOUSE,MODULE_1V1_ARENA,MODULE_ACCOUNT_ACHIEVEMENTS,MODULE_BREAKING_NEWS,MODULE_BOSS_ANNOUNCER,MODULE_AUTO_REVIVE,MODULE_ELUNA_TS,MODULE_RANDOM_ENCHANTS,MODULE_POCKET_PORTAL,MODULE_INSTANCE_RESET,MODULE_TIME_IS_TIME,MODULE_GAIN_HONOR_GUARD,MODULE_ARAC,MODULE_DUNGEON_RESPAWN,MODULE_NPC_ENCHANTER diff --git a/scripts/migrate-stack.sh b/scripts/migrate-stack.sh index 1b5d6ee..264608f 100755 --- a/scripts/migrate-stack.sh +++ b/scripts/migrate-stack.sh @@ -1,12 +1,12 @@ #!/bin/bash -# Utility to migrate the current acore-compose stack to a remote host. -# It assumes the module images have already been rebuilt locally. +# Utility to migrate module images (and optionally storage) to a remote host. +# Assumes module images have already been rebuilt locally. set -euo pipefail usage(){ - cat </storage) - --skip-images Do not export/import Docker images + --skip-storage Do not sync the storage directory --help Show this help - -Example: - $(basename "$0") --host wow.example.com --user deploy --identity ~/.ssh/id_ed25519 \ - --project-dir /opt/acore-compose -EOF +EOF_HELP } HOST="" @@ -33,7 +29,7 @@ IDENTITY="" PROJECT_DIR="" TARBALL="" REMOTE_STORAGE="" -SKIP_IMAGES=0 +SKIP_STORAGE=0 while [[ $# -gt 0 ]]; do case "$1" in @@ -44,11 +40,11 @@ while [[ $# -gt 0 ]]; do --project-dir) PROJECT_DIR="$2"; shift 2;; --tarball) TARBALL="$2"; shift 2;; --storage) REMOTE_STORAGE="$2"; shift 2;; - --skip-images) SKIP_IMAGES=1; shift;; + --skip-storage) SKIP_STORAGE=1; shift;; --help|-h) usage; exit 0;; *) echo "Unknown option: $1" >&2; usage; exit 1;; esac -done + done if [[ -z "$HOST" || -z "$USER" ]]; then echo "--host and --user are required" >&2 @@ -58,7 +54,7 @@ fi PROJECT_DIR="${PROJECT_DIR:-/home/${USER}/acore-compose}" REMOTE_STORAGE="${REMOTE_STORAGE:-${PROJECT_DIR}/storage}" -TARBALL="${TARBALL:-$(pwd)/acore-modules-images.tar}" +TARBALL="${TARBALL:-$(pwd)/images/acore-modules-images.tar}" SCP_OPTS=(-P "$PORT") SSH_OPTS=(-p "$PORT") @@ -75,40 +71,36 @@ run_scp(){ scp "${SCP_OPTS[@]}" "$@" } -echo "⋅ Preparing project archive" -TMP_PROJECT_ARCHIVE="$(mktemp -u acore-compose-XXXXXX.tar.gz)" -tar --exclude '.git' --exclude 'storage/backups' --exclude 'storage/logs' \ - --exclude 'acore-modules-images.tar' -czf "$TMP_PROJECT_ARCHIVE" -C "$(pwd)/.." "$(basename "$(pwd)")" +echo "⋅ Exporting module images to $TARBALL" +mkdir -p "$(dirname "$TARBALL")" +IMAGES_TO_SAVE=( + acore/ac-wotlk-worldserver:modules-latest + acore/ac-wotlk-authserver:modules-latest +) +if docker image inspect uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot >/dev/null 2>&1; then + IMAGES_TO_SAVE+=(uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot) +fi +if docker image inspect uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot >/dev/null 2>&1; then + IMAGES_TO_SAVE+=(uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot) +fi +docker image save "${IMAGES_TO_SAVE[@]}" > "$TARBALL" -if [[ $SKIP_IMAGES -eq 0 ]]; then - echo "⋅ Exporting module images to $TARBALL" - docker image save \ - acore/ac-wotlk-worldserver:modules-latest \ - acore/ac-wotlk-authserver:modules-latest \ - > "$TARBALL" +if [[ $SKIP_STORAGE -eq 0 ]]; then + if [[ -d storage ]]; then + echo "⋅ Syncing storage to remote" + run_ssh "mkdir -p '$REMOTE_STORAGE'" + find storage -mindepth 1 -maxdepth 1 -print0 | xargs -0 -I{} scp "${SCP_OPTS[@]}" -r '{}' "$USER@$HOST:$REMOTE_STORAGE/" + else + echo "⋅ Skipping storage sync (storage/ missing)" + fi +else + echo "⋅ Skipping storage sync" fi -echo "⋅ Removing rebuild sentinel" -rm -f storage/modules/.requires_rebuild || true - -echo "⋅ Syncing project to remote $USER@$HOST:$PROJECT_DIR" -run_ssh "mkdir -p '$PROJECT_DIR'" -run_scp "$TMP_PROJECT_ARCHIVE" "$USER@$HOST:/tmp/acore-compose.tar.gz" -run_ssh "tar -xzf /tmp/acore-compose.tar.gz -C '$PROJECT_DIR' --strip-components=1 && rm /tmp/acore-compose.tar.gz" - -echo "⋅ Syncing storage to remote" -run_ssh "mkdir -p '$REMOTE_STORAGE'" -run_scp -r storage/* "$USER@$HOST:$REMOTE_STORAGE/" - -if [[ $SKIP_IMAGES -eq 0 ]]; then - echo "⋅ Transferring docker images" - run_scp "$TARBALL" "$USER@$HOST:/tmp/acore-modules-images.tar" - run_ssh "docker load < /tmp/acore-modules-images.tar && rm /tmp/acore-modules-images.tar" -fi +echo "⋅ Loading images on remote" +run_scp "$TARBALL" "$USER@$HOST:/tmp/acore-modules-images.tar" +run_ssh "docker load < /tmp/acore-modules-images.tar && rm /tmp/acore-modules-images.tar" echo "⋅ Remote prepares completed" -echo "Run the following on the remote host to deploy:" +echo "Run on the remote host to deploy:" echo " cd $PROJECT_DIR && ./deploy.sh --skip-rebuild --no-watch" - -rm -f "$TMP_PROJECT_ARCHIVE" -echo "Migration script finished" diff --git a/scripts/rebuild-with-modules.sh b/scripts/rebuild-with-modules.sh index 84c7508..7728ebc 100755 --- a/scripts/rebuild-with-modules.sh +++ b/scripts/rebuild-with-modules.sh @@ -197,6 +197,16 @@ fi echo "🚀 Building AzerothCore with modules..." docker compose build --no-cache +echo "🔖 Tagging modules-latest images" +docker tag acore/ac-wotlk-worldserver:master acore/ac-wotlk-worldserver:modules-latest +docker tag acore/ac-wotlk-authserver:master acore/ac-wotlk-authserver:modules-latest + +if [ "$(read_env MODULE_PLAYERBOTS "0")" = "1" ]; then + echo "🔁 Tagging playerbot images uprightbass360/azerothcore-wotlk-playerbots:*" + docker tag acore/ac-wotlk-worldserver:modules-latest uprightbass360/azerothcore-wotlk-playerbots:worldserver-Playerbot + docker tag acore/ac-wotlk-authserver:modules-latest uprightbass360/azerothcore-wotlk-playerbots:authserver-Playerbot +fi + show_rebuild_step 5 5 "Cleaning up build containers" echo "🧹 Cleaning up source build containers..." docker compose down --remove-orphans >/dev/null 2>&1 || true