azerothcore-armory/docker-compose.mythica.yml
Claude cc7ca06182
Some checks failed
Build / build (push) Waiting to run
Lint / eslint (push) Waiting to run
Build / build (pull_request) Has been cancelled
Lint / eslint (pull_request) Has been cancelled
Hide Playerbot accounts from search, character pages and guild rosters
Playerbots are ordinary accounts, not game masters, so hideGameMasters does
not touch them. On a realm running mod-playerbots that means the armory is
almost entirely bots: 1,377 characters listed, of which about 1,350 are bots.

Adds two options, hideBotAccounts (default true) and botAccountPattern
(default "RNDBOT%"), applied the same way the game master filter already
works: left join the accounts we do not want, then require the join to have
missed. A realm without bots matches nothing, so the default is harmless.

Applied in the search listing, guild rosters, and the character lookup, so a
bot's page 404s rather than rendering.

The pattern is spliced into join clauses the query builder emits as raw SQL,
so it cannot be a bound parameter. It comes from the operator's own config
rather than from a request, but Utils.quoteSqlString quotes it so a stray
apostrophe cannot produce a broken query.

Verified against the live realm:

  listed before  1377
  listed after     27
  Spinnaker, Kdog  shown
  Rarzosh (bot)    hidden

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NW2ooBP2KPqQVzdZZDMvZd
2026-09-02 20:08:24 +00:00

86 lines
4.6 KiB
YAML

# Portainer stack for the Mythica armory.
#
# Differs from the upstream docker-compose.yml in three ways, all of them
# because Portainer deploys from a git checkout it manages itself:
#
# 1. Configuration comes from environment variables set in the Portainer
# stack UI, not from a .env file in the repo (upstream uses env_file,
# which Portainer git stacks do not provide).
# 2. Only the four large model-data directories are bind-mounted from the
# host. The DBC .csv files stay in the image so they stay versioned with
# the code, and Portainer re-cloning the repo cannot wipe the 2 GB of
# model data.
# 3. The unused ac-network block is dropped.
#
# See docs/mythica-deploy.md for the full procedure.
services:
armory:
build:
context: .
dockerfile: Dockerfile
container_name: mythica-armory
restart: unless-stopped
environment:
# --- site identity -------------------------------------------------
ACORE_ARMORY_WEBSITE_NAME: ${ARMORY_WEBSITE_NAME:-Mythica}
ACORE_ARMORY_WEBSITE_URL: ${ARMORY_WEBSITE_URL:-http://192.168.1.77:48733}
ACORE_ARMORY_WEBSITE_ROOT: ${ARMORY_WEBSITE_ROOT:-}
# Item tooltips and item icons are loaded from this AoWoW instance.
# The default is a public third-party site: point this at your own
# AoWoW if you do not want that dependency.
ACORE_ARMORY_AOWOW_URL: ${ARMORY_AOWOW_URL:-https://wowgaming.altervista.org/aowow}
# --- embedding -----------------------------------------------------
# Set both when embedding the armory in a page on the main site.
ACORE_ARMORY_IFRAME_MODE__ENABLED: ${ARMORY_IFRAME_ENABLED:-0}
ACORE_ARMORY_IFRAME_MODE__URL: ${ARMORY_IFRAME_URL:-}
# --- behaviour -----------------------------------------------------
ACORE_ARMORY_LOAD_DBCS: ${ARMORY_LOAD_DBCS:-1}
ACORE_ARMORY_HIDE_GAME_MASTERS: ${ARMORY_HIDE_GMS:-1}
# Playerbots are ordinary accounts, not game masters, so the GM
# filter does not touch them. Without this the armory lists ~1350
# bots against ~29 real characters.
ACORE_ARMORY_HIDE_BOT_ACCOUNTS: ${ARMORY_HIDE_BOTS:-1}
ACORE_ARMORY_BOT_ACCOUNT_PATTERN: ${ARMORY_BOT_PATTERN:-RNDBOT%}
ACORE_ARMORY_TRANSMOG_MODULE: ${ARMORY_TRANSMOG:-0}
# 0 = serve 3D model assets from the local data directory.
# Leave it at 0: the upstream fetch tool can no longer rebuild this
# data from the Zam CDN, so the local copy is the only source.
ACORE_ARMORY_USE_ZAM_CDN: ${ARMORY_USE_ZAM_CDN:-0}
# --- realm ---------------------------------------------------------
ACORE_ARMORY_REALMS__0__NAME: ${ARMORY_REALM_NAME:-Mythica}
ACORE_ARMORY_REALMS__0__REALM_ID: ${ARMORY_REALM_ID:-1}
ACORE_ARMORY_REALMS__0__AUTH_DATABASE: ${ARMORY_AUTH_DB:-acore_auth}
ACORE_ARMORY_REALMS__0__CHARACTERS_DATABASE__HOST: ${ARMORY_DB_HOST:-192.168.1.60}
ACORE_ARMORY_REALMS__0__CHARACTERS_DATABASE__PORT: ${ARMORY_DB_PORT:-3306}
ACORE_ARMORY_REALMS__0__CHARACTERS_DATABASE__USER: ${ARMORY_DB_USER:?set ARMORY_DB_USER}
ACORE_ARMORY_REALMS__0__CHARACTERS_DATABASE__PASSWORD: ${ARMORY_DB_PASS:?set ARMORY_DB_PASS}
ACORE_ARMORY_REALMS__0__CHARACTERS_DATABASE__DATABASE: ${ARMORY_CHARACTERS_DB:-acore_characters}
# --- world database -------------------------------------------------
ACORE_ARMORY_WORLD_DATABASE__HOST: ${ARMORY_DB_HOST:-192.168.1.60}
ACORE_ARMORY_WORLD_DATABASE__PORT: ${ARMORY_DB_PORT:-3306}
ACORE_ARMORY_WORLD_DATABASE__USER: ${ARMORY_DB_USER:?set ARMORY_DB_USER}
ACORE_ARMORY_WORLD_DATABASE__PASSWORD: ${ARMORY_DB_PASS:?set ARMORY_DB_PASS}
ACORE_ARMORY_WORLD_DATABASE__DATABASE: ${ARMORY_WORLD_DB:-acore_world}
ACORE_ARMORY_DB_QUERY_TIMEOUT: ${ARMORY_DB_TIMEOUT:-10000}
volumes:
# The 3D model payload, extracted from the release archive. These
# four directories are exactly the top level of data.tar.gz.
- ${ARMORY_DATA_DIR:-/opt/mythica-armory/data}/meta:/data/meta
- ${ARMORY_DATA_DIR:-/opt/mythica-armory/data}/bone:/data/bone
- ${ARMORY_DATA_DIR:-/opt/mythica-armory/data}/mo3:/data/mo3
- ${ARMORY_DATA_DIR:-/opt/mythica-armory/data}/textures:/data/textures
- ${ARMORY_LOG_DIR:-/opt/mythica-armory/logs}:/logs
ports:
- "${ARMORY_PORT:-48733}:48733"