diff --git a/README.md b/README.md
index f4d2946..ba5e96c 100644
--- a/README.md
+++ b/README.md
@@ -18,9 +18,8 @@ graph TD
TS --> LB[london-b
Storage, media
Docker + systemd]
TS --> LA[london-a
Proxmox VE hypervisor]
TS --> LC[london-c
Raspberry Pi
Octopus Energy exporter]
- TS --> CA[copenhagen-a
Gaming
Minecraft, WoW MaNGOS]
+ TS --> CA[copenhagen-a
Proxmox VE hypervisor]
TS --> NUR[nuremberg-a
Mail, poste.io]
- TS --> CC[copenhagen-c
Raspberry Pi
cloudflared, idle]
TS -.-> GC[Grafana Cloud
metrics, logs, traces]
```
@@ -35,8 +34,7 @@ DNS (Hetzner DNS for `pez.sh`, managed via Terraform) points directly at a Caddy
| london-a | London | Debian 13 / Proxmox VE | Hypervisor (currently runs a Mac VM; platform for future VMs) |
| london-c | London | Debian 13 (Raspberry Pi) | Octopus Energy exporter, edge utility box |
| nuremberg-a | Hetzner Cloud (Nuremberg) | Debian 13 | Mail server (poste.io) |
-| copenhagen-a | Copenhagen | Ubuntu 22.04 | Gaming servers (Minecraft, WoW/MaNGOS) |
-| copenhagen-c | Copenhagen | Debian 12 (Raspberry Pi) | cloudflared tunnel, idle/available |
+| copenhagen-a | Copenhagen | Debian 12 (Bookworm) / Proxmox VE | Hypervisor (platform for future VMs) |
## Directory Structure
diff --git a/ansible/Makefile b/ansible/Makefile
index dd3ce8e..4e1bfb4 100644
--- a/ansible/Makefile
+++ b/ansible/Makefile
@@ -24,7 +24,7 @@ update-linux:
docker-status:
ansible-playbook playbooks/docker-status.yml
-# Reboot a specific host: make reboot HOST=copenhagen-c
+# Reboot a specific host: make reboot HOST=london-c
reboot:
ansible-playbook playbooks/reboot.yml --limit $(HOST)
diff --git a/ansible/README.md b/ansible/README.md
index 8031b42..d1e133b 100644
--- a/ansible/README.md
+++ b/ansible/README.md
@@ -42,8 +42,7 @@ The deploy playbook runs in stages, each independently taggable (see `deploy.yml
- `docker_hosts`: Docker Compose stacks from `services/`
- `nuremberg-a`: poste.io mail (Docker)
- `london-b`: `media_stack` + `backup` (rclone to B2)
- - `copenhagen-a`: MaNGOS systemd units + MariaDB
- - `london-a`: `proxmox_ve` (apt repo, nag patch, CIFS storage)
+ - `proxmox_hosts` (`london-a`, `copenhagen-a`): `proxmox_ve` (apt repo, nag patch, CIFS storage)
- `zfs_hosts`: ZFS scrub scheduling
Observability (node_exporter, systemd_exporter, Grafana Alloy) is part of the `common` baseline — every host gets it.
@@ -63,7 +62,6 @@ Run a single stage: `ansible-playbook deploy.yml --tags docker`
| `systemd_services` | Custom systemd units from `services/` |
| `media_stack` | *Arr stack, Plex/Jellyfin, Samba, Syncthing on london-b |
| `backup` | rclone-to-B2 cron job on london-b |
-| `mariadb` | Native MariaDB (used by MaNGOS on copenhagen-a) |
| `proxmox_ve` | PVE no-subscription repo, UI lockdown, CIFS storage |
| `zfs` | Weekly scrub cron on ZFS hosts |
@@ -75,6 +73,5 @@ Per-host variables in `inventory/host_vars/.yml`.
## Safety Notes
- **london-b**: Reboot playbook requires interactive confirmation (critical storage)
-- **copenhagen-a**: Reboot includes netplan pre-flight check (static IP verification)
- All playbooks use `ignore_unreachable: true` for fleet operations
- `--check --diff` is your friend — always dry-run first on production
diff --git a/ansible/deploy.yml b/ansible/deploy.yml
index 7a5b6c9..5420024 100644
--- a/ansible/deploy.yml
+++ b/ansible/deploy.yml
@@ -55,15 +55,8 @@
- role: media_stack
- role: backup
-- name: Gaming servers (copenhagen-a)
- hosts: copenhagen-a
- tags: [services, gaming]
- roles:
- - role: systemd_services
- - role: mariadb
-
-- name: Proxmox VE (london-a)
- hosts: london-a
+- name: Proxmox VE (london-a, copenhagen-a)
+ hosts: proxmox_hosts
tags: [services, proxmox]
roles:
- role: proxmox_ve
diff --git a/ansible/dotfiles/README.md b/ansible/dotfiles/README.md
index dbeaaca..073da5f 100644
--- a/ansible/dotfiles/README.md
+++ b/ansible/dotfiles/README.md
@@ -62,8 +62,7 @@ Most servers run Fish as root shell. Current state captured from live fleet (202
| london-b | fish | Yes (pez@pez.sh) | Partial (fish default, tmux custom) |
| nuremberg-a | fish | No | No |
| london-a | sh (FreeBSD) | No | No |
-| copenhagen-a | fish | No (SpigotMC default) | No |
-| copenhagen-c | fish | No | No |
+| copenhagen-a | bash (fresh PVE install) | No | No |
## Relationship to upstream
diff --git a/ansible/inventory/host_vars/copenhagen-a.yml b/ansible/inventory/host_vars/copenhagen-a.yml
index ffe084c..5eb68bf 100644
--- a/ansible/inventory/host_vars/copenhagen-a.yml
+++ b/ansible/inventory/host_vars/copenhagen-a.yml
@@ -1,24 +1,5 @@
---
-host_role: gaming
-host_description: "Gaming servers (Minecraft, WoW/MaNGOS)"
+host_role: proxmox-ve
+host_description: "Proxmox VE hypervisor"
host_location: "Copenhagen"
-prometheus_location: copenhagen
-
-# MaNGOS runs as systemd services, not Docker
-# MariaDB is the MaNGOS database backend (character, world, auth DBs)
-systemd_services:
- - mangos-realmd
- - mangos-world
-
-# Docker Compose services deployed by docker_services role
-docker_services:
- - minecraft
- - smartctl-exporter
-
-# MaNGOS database backend — installed by apt; config managed by mariadb role
-system_packages_services:
- - mariadb
-
-common_ufw_allowed_ports:
- - {port: 3724, proto: tcp, comment: "MaNGOS Realmd"}
- - {port: 8085, proto: tcp, comment: "MaNGOS World Server"}
+ansible_python_interpreter: /usr/bin/python3
diff --git a/ansible/inventory/host_vars/copenhagen-c.yml b/ansible/inventory/host_vars/copenhagen-c.yml
deleted file mode 100644
index c9d83ad..0000000
--- a/ansible/inventory/host_vars/copenhagen-c.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-host_role: idle
-host_description: "Idle/available"
-host_location: "Copenhagen"
-prometheus_location: copenhagen
diff --git a/ansible/inventory/hosts.ini b/ansible/inventory/hosts.ini
index 92e6d0d..f0467b1 100644
--- a/ansible/inventory/hosts.ini
+++ b/ansible/inventory/hosts.ini
@@ -6,8 +6,7 @@ helsinki-a ansible_host=100.67.6.27
london-a ansible_host=100.122.180.98
london-b ansible_host=100.84.65.101
london-c ansible_host=100.123.72.87
-copenhagen-a ansible_host=100.89.206.60
-copenhagen-c ansible_host=100.115.45.53
+copenhagen-a ansible_host=100.91.240.29
nuremberg-a ansible_host=100.70.180.24
[zfs_hosts]
@@ -18,6 +17,9 @@ helsinki-a
london-b
london-c
nuremberg-a
+
+[proxmox_hosts]
+london-a
copenhagen-a
[all:vars]
diff --git a/ansible/playbooks/reboot.yml b/ansible/playbooks/reboot.yml
index f165bfb..53e3baa 100644
--- a/ansible/playbooks/reboot.yml
+++ b/ansible/playbooks/reboot.yml
@@ -2,8 +2,7 @@
# Reboot a specific host and wait for it to come back.
# Usage: ansible-playbook playbooks/reboot.yml --limit
#
-# Safety: copenhagen-a has netplan pre-flight check.
-# london-b should NOT be rebooted without manual approval.
+# Safety: london-b should NOT be rebooted without manual approval.
- name: Reboot host safely
hosts: all
@@ -29,23 +28,6 @@
msg: "Reboot of london-b was not confirmed."
when: inventory_hostname == 'london-b' and london_b_confirm.user_input != 'yes'
- - name: Check netplan config (copenhagen-a)
- ansible.builtin.command: netplan get all
- register: netplan_config
- failed_when: false
- changed_when: false
- when: inventory_hostname == 'copenhagen-a'
-
- - name: Verify copenhagen-a static IP
- ansible.builtin.assert:
- that:
- - "'192.168.0.251' in netplan_config.stdout"
- fail_msg: >
- ABORT: copenhagen-a netplan doesn't show expected static IP
- 192.168.0.251. Check netplan config before rebooting.
- success_msg: "copenhagen-a netplan OK — static IP present."
- when: inventory_hostname == 'copenhagen-a'
-
- name: Reboot
ansible.builtin.reboot:
reboot_timeout: 300
diff --git a/ansible/roles/common/tasks/main.yml b/ansible/roles/common/tasks/main.yml
index 1db7e9b..2edb843 100644
--- a/ansible/roles/common/tasks/main.yml
+++ b/ansible/roles/common/tasks/main.yml
@@ -131,17 +131,15 @@
# Cloudflare Tunnels were retired in favour of Caddy + Authelia (PESO-134, #56),
# which removed cloudflared from ansible config. copenhagen-a was unreachable at
# the time, so its cloudflared.service was never actually stopped and is still
-# running. Remove it wherever the unit lingers. copenhagen-c legitimately runs a
-# hand-configured cloudflared tunnel — never touch it.
+# running (it has since been repaved as Proxmox VE, so this is now historical).
+# Remove it wherever the unit lingers.
- name: Detect lingering cloudflared unit
ansible.builtin.stat:
path: /etc/systemd/system/cloudflared.service
register: common_cloudflared_unit
- when: inventory_hostname != 'copenhagen-c'
- name: Remove orphaned cloudflared
when:
- - inventory_hostname != 'copenhagen-c'
- common_cloudflared_unit.stat.exists | default(false)
block:
- name: Stop and disable cloudflared
diff --git a/ansible/roles/mariadb/files/bind-local.cnf b/ansible/roles/mariadb/files/bind-local.cnf
deleted file mode 100644
index 7f631fe..0000000
--- a/ansible/roles/mariadb/files/bind-local.cnf
+++ /dev/null
@@ -1,5 +0,0 @@
-[mysqld]
-# Restrict MariaDB to loopback only.
-# UFW blocks port 3306 externally, but binding to 127.0.0.1 provides
-# defense in depth — the socket never reaches the network stack at all.
-bind-address = 127.0.0.1
diff --git a/ansible/roles/mariadb/handlers/main.yml b/ansible/roles/mariadb/handlers/main.yml
deleted file mode 100644
index a0d9e2b..0000000
--- a/ansible/roles/mariadb/handlers/main.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-- name: Restart mariadb
- ansible.builtin.systemd:
- name: mariadb
- state: restarted
diff --git a/ansible/roles/mariadb/tasks/main.yml b/ansible/roles/mariadb/tasks/main.yml
deleted file mode 100644
index 015c5d4..0000000
--- a/ansible/roles/mariadb/tasks/main.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-- name: Deploy MariaDB bind-address config
- ansible.builtin.copy:
- src: bind-local.cnf
- dest: /etc/mysql/mariadb.conf.d/99-bind-local.cnf
- owner: root
- group: root
- mode: '0644'
- notify: Restart mariadb
diff --git a/ansible/services/README.md b/ansible/services/README.md
index c709a94..2b5a2ae 100644
--- a/ansible/services/README.md
+++ b/ansible/services/README.md
@@ -30,15 +30,13 @@ There is **no** per-host subdirectory — services are named by what they are, a
| navidrome | Docker | london-b | Music streaming |
| bookshelf | Docker | london-b | Ebook/audiobook manager (Readarr revival) |
| slskd | Docker | london-b | Soulseek client |
-| smartctl-exporter | Docker | london-b, copenhagen-a | SMART metrics |
+| smartctl-exporter | Docker | london-b | SMART metrics |
| plex-exporter | Docker | london-b | Plex metrics |
| octopus-exporter | Docker | london-c | Octopus Energy metrics |
-| minecraft | Docker | copenhagen-a | PaperMC server |
| radarr / sonarr / lidarr / prowlarr / whisparr | systemd | london-b | *Arr stack (systemd unit files here) |
| transmission | systemd | london-b | Config files (the daemon itself is apt) |
| samba / vsftpd | systemd | london-b | File-sharing config |
| ollama | systemd | london-b | Custom unit + binary install |
-| mangos-realmd / mangos-world / mangos-zero | systemd | copenhagen-a | MaNGOS WoW server |
| promtail | systemd | (currently unused; historical) | Log shipper, replaced by Alloy |
| status-page | Cron script | helsinki-a | `update-status.sh` writes `/srv/status` |
| rc.d | FreeBSD rc.conf | (historical) | Snapshot of london-a's old FreeBSD setup |
diff --git a/ansible/services/mangos-realmd/mangos-realmd.service b/ansible/services/mangos-realmd/mangos-realmd.service
deleted file mode 100644
index 8c17ac1..0000000
--- a/ansible/services/mangos-realmd/mangos-realmd.service
+++ /dev/null
@@ -1,16 +0,0 @@
-[Unit]
-Description=MaNGOS Zero Realm Server
-After=network.target mariadb.service
-Requires=mariadb.service
-
-[Service]
-Type=simple
-User=mangos
-Group=mangos
-WorkingDirectory=/home/mangos/mangos/zero/bin
-ExecStart=/home/mangos/mangos/zero/bin/realmd
-Restart=on-failure
-RestartSec=5
-
-[Install]
-WantedBy=multi-user.target
\ No newline at end of file
diff --git a/ansible/services/mangos-world/mangos-world.service b/ansible/services/mangos-world/mangos-world.service
deleted file mode 100644
index 228d277..0000000
--- a/ansible/services/mangos-world/mangos-world.service
+++ /dev/null
@@ -1,17 +0,0 @@
-[Unit]
-Description=MaNGOS Zero World Server
-After=network.target mariadb.service mangos-realmd.service
-Requires=mariadb.service
-Wants=mangos-realmd.service
-
-[Service]
-Type=simple
-User=mangos
-Group=mangos
-WorkingDirectory=/home/mangos/mangos/zero/bin
-ExecStart=/home/mangos/mangos/zero/bin/mangosd
-Restart=on-failure
-RestartSec=10
-
-[Install]
-WantedBy=multi-user.target
diff --git a/ansible/services/mangos-zero/README.md b/ansible/services/mangos-zero/README.md
deleted file mode 100644
index 57634a7..0000000
--- a/ansible/services/mangos-zero/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# MaNGOS Zero (Vanilla WoW)
-
-Classic WoW private server running on **copenhagen-a**.
-
-## Components
-
-- **mangosd** — World server (`mangos-world.service`)
-- **realmd** — Authentication/realm server (`mangos-realmd.service`)
-- **MariaDB** — Database backend (system service)
-
-## Config Files
-
-| File | Description |
-|------|-------------|
-| `etc/mangosd.conf` | World server configuration |
-| `etc/realmd.conf` | Realm server configuration |
-| `etc/ahbot.conf` | Auction house bot configuration |
-| `etc/aiplayerbot.conf` | AI playerbot configuration |
-
-Config files use `{{ mangos_db_password }}` as a placeholder for the database password.
-The actual password is stored in `ansible/group_vars/all/secrets.enc.yaml`.
-
-## Paths on copenhagen-a
-
-- Binary: `/home/mangos/mangos/zero/bin/`
-- Config: `/home/mangos/mangos/zero/etc/`
-- User: `mangos:mangos`
-
-## Systemd Services
-
-Service files are in:
-- `../mangos-realmd/mangos-realmd.service`
-- `../mangos-world/mangos-world.service`
diff --git a/ansible/services/mangos-zero/etc/ahbot.conf b/ansible/services/mangos-zero/etc/ahbot.conf
deleted file mode 100644
index 9669bf6..0000000
--- a/ansible/services/mangos-zero/etc/ahbot.conf
+++ /dev/null
@@ -1,265 +0,0 @@
-################################################################################
-# Auction house bot configuration #
-################################################################################
-
-[AhbotConf]
-ConfVersion=2021010100
-
-################################################################################
-# AUCTION HOUSE BOT SETTINGS
-#
-# AuctionHouseBot.CharacterName
-# The name of the character that the bot will use to auction
-# items in the Alliance, Horde and neutral auction houses.
-# Default "" (No owner)
-#
-# AuctionHouseBot.Seller.Enabled
-# Enable or disable sales functionality
-# Default 0 (Disabled)
-#
-# AuctionHouseBot.DEBUG.Seller
-# Enable or disable sales debug mode
-# Default 0 (Disabled)
-#
-# AuctionHouseBot.Alliance.Items.Amount.Ratio
-# Enable or disable sales on Alliance auction houses
-# Default 100 (Enabled with 100% of items)
-#
-# AuctionHouseBot.Horde.Items.Amount.Ratio
-# Enable or disable sales on Horde auction houses
-# Default 100 (Enabled with 100% of items)
-#
-# AuctionHouseBot.Neutral.Items.Amount.Ratio
-# Enable or disable sales on neutral auction houses
-# Default 100 (Enabled with 100% of items)
-#
-# AuctionHouseBot.MinTime
-# Minimum time for new auctions
-# Default 1 (Hour)
-#
-# AuctionHouseBot.MaxTime
-# Maximum time for new auctions
-# Default 72 (Hours)
-#
-# AuctionHouseBot.Items.Vendor
-# Offer items sold by vendors as auctions
-# Default 0
-#
-# AuctionHouseBot.Items.Loot
-# Offer lootable/fishable items as auctions
-# Default 1
-#
-# AuctionHouseBot.Items.Misc
-# Offer miscellaneous items as auctions (not recommended)
-# Default 0
-#
-# AuctionHouseBot.Bind.*
-# Indicates which bonding types can be put up for auction
-# No - Items that don't bind Default 1 (Allowed)
-# Pickup - Items that bind on pickup Default 0 (Not Allowed)
-# Equip - Items that bind on equip Default 1 (Allowed)
-# Use - Items that bind on use Default 1 (Allowed)
-# Quest - Quest Items Default 0 (Not Allowed)
-#
-# AuctionHouseBot.LockBox.Enabled
-# Enable or disable sales of lock boxes
-# Default 0 (Disabled)
-#
-# AuctionHouseBot.ItemsPerCycle.Boost
-# Uses to define how many auctions to add per cycle in an uninitialized
-# auction table.
-# Default 75
-#
-# AuctionHouseBot.ItemsPerCycle.Normal
-# Uses to define how many auctions to add per cycle in an initialized
-# auction table.
-# Default 20
-#
-# AuctionHouseBot.BuyPrice.Seller
-# Enable or disable the use of BuyPrice or SellPrice to determine bid
-# pricing
-# Default 1 (use SellPrice)
-#
-# AuctionHouseBot.Alliance.Price.Ratio
-# Defines the price ratio for auctions on the Alliance auction houses
-# Default 200
-#
-# AuctionHouseBot.Horde.Price.Ratio
-# Defines the price ratio for auctions on the Horde auction houses
-# Default 200
-#
-# AuctionHouseBot.Neutral.Price.Ratio
-# Defines the price ratio for auctions on the neutral auction houses
-# Default 200
-#
-# AuctionHouseBot.Items.ItemLevel.*
-# Enable or disable listing items below/above this item level
-# Default 0 (Disabled)
-#
-# AuctionHouseBot.Items.ReqLevel.*
-# Enable or disable listing items below/above this required level
-# Default 0 (Disabled)
-#
-# AuctionHouseBot.Items.ReqSkill.*
-# Enable or disable listing items below/above this skill level
-# Default 0 (Disabled)
-#
-# AuctionHouseBot.Items.Amount.*
-# Defines the amount of auctions to be created for each item quality
-# Values will be adjusted using faction specific settings (if specified)
-# Default 0, 2000, 2500, 1500, 1000, 0, 0
-# (grey, white, green, blue, purple, orange, yellow)
-#
-# AuctionHouseBot.Class.*
-# Defines which item classes can be put up for auction. See pre-defined
-# classes in ItemClass.dbc.
-# These value are preference values, maximum is 10, minimum is 0.
-# Default 6,4,8,8,1,2,0,6,1,1,1,5
-#
-#
-# ITEM FINE TUNING
-# The following are useful for limiting what character levels can benefit
-# from the auction house.
-#
-# AuctionHouseBot.Class.Misc.Mount.ReqLevel.*
-# Enable or disable listing mounts below/above this required level
-# Default 0
-#
-# AuctionHouseBot.Class.Misc.Mount.ReqSkill.*
-# Enable or disable listing mounts below/above this skill level
-# Default 0
-#
-# AuctionHouseBot.Class.TradeGood.ItemLevel.*
-# Enable or disable listing trade good items below/above this item level
-# Default 0
-#
-# AuctionHouseBot.Class.Container.ItemLevel.*
-# Enable or disable listing containers below/above this item level
-# Default 0
-#
-# AuctionHouseBot.forceIncludeItems
-# Allows to include items which would normally be ignored by filter
-# settings.
-# List of ids with delimiter ','
-# Default ""
-#
-# AuctionHouseBot.forceExcludeItems
-# Allows to exclude items which would normally be included by filter
-# settings.
-# List of ids with delimiter ','
-# Default ""
-#
-################################################################################
-
-AuctionHouseBot.CharacterName = ""
-AuctionHouseBot.Seller.Enabled = 1
-AuctionHouseBot.DEBUG.Seller = 0
-
-AuctionHouseBot.Alliance.Items.Amount.Ratio = 100
-AuctionHouseBot.Horde.Items.Amount.Ratio = 100
-AuctionHouseBot.Neutral.Items.Amount.Ratio = 100
-
-AuctionHouseBot.MinTime = 1
-AuctionHouseBot.MaxTime = 72
-
-AuctionHouseBot.Items.Vendor = 0
-AuctionHouseBot.Items.Loot = 1
-AuctionHouseBot.Items.Misc = 0
-AuctionHouseBot.Bind.No = 1
-AuctionHouseBot.Bind.Pickup = 0
-AuctionHouseBot.Bind.Equip = 1
-AuctionHouseBot.Bind.Use = 1
-AuctionHouseBot.Bind.Quest = 0
-AuctionHouseBot.LockBox.Enabled = 0
-
-AuctionHouseBot.ItemsPerCycle.Boost = 75
-AuctionHouseBot.ItemsPerCycle.Normal = 20
-AuctionHouseBot.BuyPrice.Seller = 1
-AuctionHouseBot.Alliance.Price.Ratio = 200
-AuctionHouseBot.Horde.Price.Ratio = 200
-AuctionHouseBot.Neutral.Price.Ratio = 200
-
-AuctionHouseBot.Items.ItemLevel.Min = 0
-AuctionHouseBot.Items.ItemLevel.Max = 0
-AuctionHouseBot.Items.ReqLevel.Min = 0
-AuctionHouseBot.Items.ReqLevel.Max = 0
-AuctionHouseBot.Items.ReqSkill.Min = 0
-AuctionHouseBot.Items.ReqSkill.Max = 0
-
-AuctionHouseBot.Items.Amount.Grey = 0
-AuctionHouseBot.Items.Amount.White = 2000
-AuctionHouseBot.Items.Amount.Green = 2500
-AuctionHouseBot.Items.Amount.Blue = 1500
-AuctionHouseBot.Items.Amount.Purple = 1000
-AuctionHouseBot.Items.Amount.Orange = 0
-AuctionHouseBot.Items.Amount.Yellow = 0
-
-AuctionHouseBot.Class.Consumable = 6
-AuctionHouseBot.Class.Container = 4
-AuctionHouseBot.Class.Weapon = 8
-AuctionHouseBot.Class.Armor = 8
-AuctionHouseBot.Class.Reagent = 1
-AuctionHouseBot.Class.Projectile = 2
-AuctionHouseBot.Class.TradeGood = 10
-AuctionHouseBot.Class.Recipe = 6
-AuctionHouseBot.Class.Quiver = 1
-AuctionHouseBot.Class.Quest = 1
-AuctionHouseBot.Class.Key = 1
-AuctionHouseBot.Class.Misc = 5
-
-AuctionHouseBot.Class.Misc.Mount.ReqLevel.Min = 0
-AuctionHouseBot.Class.Misc.Mount.ReqLevel.Max = 0
-AuctionHouseBot.Class.Misc.Mount.ReqSkill.Min = 0
-AuctionHouseBot.Class.Misc.Mount.ReqSkill.Max = 0
-AuctionHouseBot.Class.TradeGood.ItemLevel.Min = 0
-AuctionHouseBot.Class.TradeGood.ItemLevel.Max = 0
-AuctionHouseBot.Class.Container.ItemLevel.Min = 0
-AuctionHouseBot.Class.Container.ItemLevel.Max = 0
-
-AuctionHouseBot.forceIncludeItems = ""
-AuctionHouseBot.forceExcludeItems = ""
-
-################################################################################
-# Buyer configuration
-#
-# AuctionHouseBot.Buyer.Enabled
-# Enable or disable buyer mode
-# Default 0 (Disabled)
-#
-# AuctionHouseBot.DEBUG.Buyer
-# Enable or disable buyer debug mode
-# Default 0 (Disabled)
-#
-# AuctionHouseBot.Buyer.FACTION.Enabled
-# Enable or disable buyer mode for a specific faction
-#
-# AuctionHouseBot.Buyer.BuyPrice
-# Enable or disable the use of BuyPrice or SellPrice to determine bid
-# pricing
-# Default 0 (use SellPrice)
-#
-# AuctionHouseBot.Buyer.Recheck.Interval
-# This specifies the time interval (in minute) between evaluations of
-# identical items.
-# The lower the value is, the higher the chance for an item to be bought
-# Default 20 (20min.)
-#
-# AuctionHouseBot.Buyer.FACTION.Chance.Ratio
-# Determines the chance for buying an item.
-# Default 3 (literally 1 chance by 3)
-#
-################################################################################
-AuctionHouseBot.Buyer.Enabled = 0
-AuctionHouseBot.DEBUG.Buyer = 0
-
-AuctionHouseBot.Buyer.Alliance.Enabled = 1
-AuctionHouseBot.Buyer.Horde.Enabled = 1
-AuctionHouseBot.Buyer.Neutral.Enabled = 1
-
-AuctionHouseBot.Buyer.BuyPrice = 0
-
-AuctionHouseBot.Buyer.Recheck.Interval = 20
-
-AuctionHouseBot.Buyer.Alliance.Chance.Ratio = 3
-AuctionHouseBot.Buyer.Horde.Chance.Ratio = 3
-AuctionHouseBot.Buyer.Neutral.Chance.Ratio = 3
diff --git a/ansible/services/mangos-zero/etc/aiplayerbot.conf b/ansible/services/mangos-zero/etc/aiplayerbot.conf
deleted file mode 100644
index 2bd0e13..0000000
--- a/ansible/services/mangos-zero/etc/aiplayerbot.conf
+++ /dev/null
@@ -1,164 +0,0 @@
-##########################################
-# MANGOS Ai Playerbot Configuration file #
-##########################################
-
-[AiPlayerbotConf]
-ConfVersion=2010102201
-
-# Enable or disable AI Playerbot
-AiPlayerbot.Enabled = 0
-
-# Warrior
-AiPlayerbot.RandomClassSpecProbability.1.0 = 20
-AiPlayerbot.RandomClassSpecProbability.1.1 = 30
-AiPlayerbot.RandomClassSpecProbability.1.2 = 50
-# Paladin
-AiPlayerbot.RandomClassSpecProbability.2.0 = 20
-AiPlayerbot.RandomClassSpecProbability.2.1 = 50
-AiPlayerbot.RandomClassSpecProbability.2.2 = 30
-# Hunter
-AiPlayerbot.RandomClassSpecProbability.3.0 = 25
-AiPlayerbot.RandomClassSpecProbability.3.1 = 50
-AiPlayerbot.RandomClassSpecProbability.3.2 = 25
-# Rogue
-AiPlayerbot.RandomClassSpecProbability.4.0 = 40
-AiPlayerbot.RandomClassSpecProbability.4.1 = 50
-AiPlayerbot.RandomClassSpecProbability.4.2 = 10
-# Priest
-AiPlayerbot.RandomClassSpecProbability.5.0 = 40
-AiPlayerbot.RandomClassSpecProbability.5.1 = 40
-AiPlayerbot.RandomClassSpecProbability.5.2 = 20
-# Shaman
-AiPlayerbot.RandomClassSpecProbability.7.0 = 10
-AiPlayerbot.RandomClassSpecProbability.7.1 = 45
-AiPlayerbot.RandomClassSpecProbability.7.2 = 45
-# Mage
-AiPlayerbot.RandomClassSpecProbability.8.0 = 20
-AiPlayerbot.RandomClassSpecProbability.8.1 = 10
-AiPlayerbot.RandomClassSpecProbability.8.2 = 70
-# Warlock
-AiPlayerbot.RandomClassSpecProbability.9.0 = 33
-AiPlayerbot.RandomClassSpecProbability.9.1 = 33
-AiPlayerbot.RandomClassSpecProbability.9.2 = 33
-# Druid
-AiPlayerbot.RandomClassSpecProbability.11.0 = 10
-AiPlayerbot.RandomClassSpecProbability.11.1 = 45
-AiPlayerbot.RandomClassSpecProbability.11.2 = 45
-
-#
-# All other parameters are optional but can be changed by uncommenting them here
-#
-
-# Prefix for bot chat commands (e.g. follow, stay)
-AiPlayerbot.CommandPrefix = ~
-
-# Max AI iterations per tick
-#AiPlayerbot.IterationsPerTick = 10
-
-# Allow/deny bots from your guild
-#AiPlayerbot.AllowGuildBots = 1
-
-# Delay between two short-time spells cast
-#AiPlayerbot.GlobalCooldown = 500
-
-# Max wait time when moving
-#AiPlayerbot.MaxWaitForMove = 5000
-
-# Delay between two bot actions
-#AiPlayerbot.ReactDelay = 100
-
-# Distances
-#AiPlayerbot.SightDistance = 50.0
-#AiPlayerbot.SpellDistance = 30.0
-#AiPlayerbot.ReactDistance = 150.0
-#AiPlayerbot.GrindDistance = 100.0
-#AiPlayerbot.LootDistance = 20.0
-#AiPlayerbot.FleeDistance = 20.0
-#AiPlayerbot.TooCloseDistance = 7.0
-#AiPlayerbot.MeleeDistance = 1.0
-#AiPlayerbot.FollowDistance = 1.5
-#AiPlayerbot.WhisperDistance = 6000.0
-#AiPlayerbot.ContactDistance = 0.5
-
-# Bot can flee for enemy
-#AiPlayerbot.FleeingEnabled = 1
-
-# Health/Mana levels
-#AiPlayerbot.CriticalHealth = 25
-#AiPlayerbot.LowHealth = 45
-#AiPlayerbot.MediumHealth = 65
-#AiPlayerbot.AlmostFullHealth = 85
-#AiPlayerbot.LowMana = 15
-#AiPlayerbot.MediumMana = 40
-
-# Enable random bot system
-#AiPlayerbot.RandomBotAutologin = 1
-
-# Random bot default strategies (applied after defaults)
-#AiPlayerbot.RandomBotCombatStrategies = +dps,+attack weak
-#AiPlayerbot.RandomBotNonCombatStrategies = +grind,+move random,+loot
-
-# Create random bot characters automatically
-#AiPlayerbot.RandomBotAutoCreate = 1
-
-# Random bot count
-#AiPlayerbot.MinRandomBots = 50
-#AiPlayerbot.MaxRandomBots = 200
-#AiPlayerbot.RandomBotMinLevel = 1
-#AiPlayerbot.RandomBotMaxLevel = 255 (ignored if more than MaxPlayerLevel mangosd.conf value)
-
-# Accounts to create for random bots
-#AiPlayerbot.RandomBotAccountPrefix = rndbot
-#AiPlayerbot.RandomBotAccountCount = 50
-
-# Delete all random bot accounts
-#AiPlayerbot.DeleteRandomBotAccounts = 0
-
-# Maps to teleport random bots
-#AiPlayerbot.RandomBotMaps = 0,1,530,571
-
-# Change random bot has lower gear
-#AiPlayerbot.RandomGearLoweringChance = 0.15
-
-# Chance random bot has max level on first randomize
-#AiPlayerbot.RandomBotMaxLevelChance = 0.4
-
-# Quest items to leave (do not destroy)
-#AiPlayerbot.RandomBotQuestItems = 6948,5175,5176,5177,5178
-
-# Spells every random bot will learn on randomize (54197 - cold weather flying)
-#AiPlayerbot.RandomBotSpellIds = 54197
-
-# Enable LFG for random bots
-#AiPlayerbot.RandomBotJoinLfg = 1
-
-# Level diff between random bots and nearby creatures for random teleports
-AiPlayerbot.RandomBotTeleLevel = 3
-
-# Intervals
-#AiPlayerbot.RandomBotUpdateInterval = 60
-#AiPlayerbot.RandomBotCountChangeMinInterval = 86400
-#AiPlayerbot.RandomBotCountChangeMaxInterval = 259200
-#AiPlayerbot.MinRandomBotInWorldTime = 7200
-#AiPlayerbot.MaxRandomBotInWorldTime = 1209600
-#AiPlayerbot.MinRandomBotRandomizeTime = 7200
-#AiPlayerbot.MaxRandomRandomizeTime = 1209600
-#AiPlayerbot.MinRandomBotsPerInterval = 50
-#AiPlayerbot.MaxRandomBotsPerInterval = 100
-#AiPlayerbot.MinRandomBotsPriceChangeInterval = 7200
-#AiPlayerbot.MaxRandomBotsPriceChangeInterval = 172800
-
-# Log on all random bots on start
-#AiPlayerbot.RandomBotLoginAtStartup = 1
-
-# How far random bots are teleported after death
-#AiPlayerbot.RandomBotTeleportDistance = 1000
-
-# Debug switches
-#AiPlayerbot.SpellDump = 0
-#AiPlayerbot.LogInGroupOnly = 1
-#AiPlayerbot.LogValuesPerTick = 0
-#AiPlayerbot.RandomChangeMultiplier = 1
-
-# Command server port, 0 - disabled
-#AiPlayerbot.CommandServerPort = 8888
diff --git a/ansible/services/mangos-zero/etc/mangosd.conf b/ansible/services/mangos-zero/etc/mangosd.conf
deleted file mode 100644
index 00b2320..0000000
--- a/ansible/services/mangos-zero/etc/mangosd.conf
+++ /dev/null
@@ -1,1762 +0,0 @@
-################################################################################
-# World server configuration #
-################################################################################
-
-[MangosdConf]
-ConfVersion=2023053000
-
-################################################################################
-# CONNECTIONS AND DIRECTORIES
-#
-# RealmID
-# RealmID must match the realmlist inside the realmd database
-#
-# DataDir
-# Data directory setting.
-# Important: DataDir needs to be quoted, as it is a string which may contain space characters.
-# Example: "/home/mangos/mangos/zero/build/install/share/mangos"
-#
-# LogsDir
-# Logs directory setting.
-# Important: Logs dir must exists, or all logs need to be disabled
-# Default: "" - no log directory prefix. if used log names aren't absolute paths
-# then logs will be stored in the current directory of the running program.
-#
-#
-# LoginDatabaseInfo
-# WorldDatabaseInfo
-# CharacterDatabaseInfo
-# Database connection settings for the world server.
-# Default:
-# ---MYSQL---
-# hostname;port;username;password;database
-# .;somenumber;username;password;database - use named pipes at Windows
-# Named pipes: mySQL required adding "enable-named-pipe" to [mysqld] section my.ini
-# .;/path/to/unix_socket;username;password;database - use Unix sockets at Unix/Linux
-# ---PGSQL---
-# hostname;port;username;password;database
-# .;/path/to/unix_socket/DIRECTORY or . for default path;username;password;database - use Unix sockets at Unix/Linux
-#
-# LoginDatabaseConnections
-# WorldDatabaseConnections
-# CharacterDatabaseConnections
-# Amount of connections to database which will be used for SELECT queries. Maximum 16 connections per database.
-# Please, note, for data consistency only one connection for each database is used for transactions and async SELECTs.
-# So formula to find out how many connections will be established:
-# X = LoginDatabaseConnections + WorldDatabaseConnections + CharacterDatabaseConnections + 1
-# Default: 1 connection for SELECT statements
-#
-# MaxPingTime
-# Settings for maximum database-ping interval (minutes between pings)
-#
-# WorldServerPort
-# Port on which the server will listen
-#
-# BindIP
-# Bind World Server to IP/hostname
-# This option is useful for running multiple worldd/realmd instances
-# on different IP addresses using default ports.
-# DO NOT CHANGE THIS UNLESS YOU _REALLY_ KNOW WHAT YOU'RE DOING
-#
-################################################################################
-
-RealmID = 1
-DataDir = "../etc"
-DataDir = "/home/mangos/mangos/zero/gamedata"
-LogsDir = ""
-LoginDatabaseInfo = "127.0.0.1;3306;mangos;{{ mangos_db_password }};realmd"
-WorldDatabaseInfo = "127.0.0.1;3306;mangos;{{ mangos_db_password }};mangos0"
-CharacterDatabaseInfo = "127.0.0.1;3306;mangos;{{ mangos_db_password }};character0"
-LoginDatabaseConnections = 1
-WorldDatabaseConnections = 1
-CharacterDatabaseConnections = 1
-MaxPingTime = 5
-WorldServerPort = 8085
-BindIP = "0.0.0.0"
-
-################################################################################
-# PERFORMANCE SETINGS
-#
-# UseProcessors
-# Used processors mask for multi-processors system (Used only at Windows)
-# Default: 0 (selected by OS)
-# number (bitmask value of selected processors)
-#
-# ProcessPriority
-# Process priority setting (Used only at Windows)
-# Default: 1 (HIGH)
-# 0 (Normal)
-#
-# Compression
-# Compression level for update packages sent to client (1..9)
-# Default: 1 (speed)
-# 9 (best compression)
-#
-# PlayerLimit
-# Maximum number of players in the world. Excluding Mods, GM's and Admins
-# Default: 100
-# 0 (for infinite players)
-# -1 (for Mods, GM's and Admins only)
-# -2 (for GM's and Admins only)
-# -3 (for Admins only)
-#
-# SaveRespawnTimeImmediately
-# Save respawn time for creatures at death and for gameobjects at use/open
-# Default: 1 (save creature/gameobject respawn time without waiting grid unload)
-# 0 (save creature/gameobject respawn time at grid unload)
-#
-# MaxOverspeedPings
-# Maximum overspeed ping count before player kick (minimum is 2, 0 used to disable check)
-# Default: 2
-#
-# GridUnload
-# Unload grids (if you have lot memory you can disable it to speed up player move to new grids second time)
-# Default: 1 (unload grids)
-# 0 (do not unload grids)
-#
-# LoadAllGridsOnMaps
-# Load grids of maps at server startup (if you have lot memory you can try it to have a living world always loaded)
-# This also allow ALL creatures on the given maps to update their grid without any player around.
-# Default: "" (don't load all grids at startup)
-# "mapId1[,mapId2[..]]" (DO load all grids on the given maps- Experimental and very resource consumming)
-#
-# GridCleanUpDelay
-# Grid clean up delay (in milliseconds)
-# Default: 300000 (5 min)
-#
-# MapUpdateInterval
-# Map update interval (in milliseconds)
-# Default: 100
-#
-# MapUpdateThreads
-# Number of map update threads to run
-# Default: 2
-#
-# ChangeWeatherInterval
-# Weather update interval (in milliseconds)
-# Default: 600000 (10 min)
-#
-# PlayerSave.Interval
-# Player save interval (in milliseconds)
-# Default: 900000 (15 min)
-#
-# PlayerSave.Stats.MinLevel
-# Minimum level for saving character stats for external usage in database
-# Default: 0 (do not save character stats)
-# 1+ (save stats for characters with level 1+)
-#
-# PlayerSave.Stats.SaveOnlyOnLogout
-# Enable/Disable saving of character stats only on logout
-# Default: 1 (only save on logout)
-# 0 (save on every player save)
-#
-# vmap.enableLOS
-# vmap.enableHeight
-# Enable/Disable VMaps support for line of sight and height calculation
-# You need to extract the VMaps in order to enable those options
-# Default: 1 (enable)
-# 0 (disable)
-#
-# vmap.ignoreSpellIds
-# These spells are ignored for LoS calculation
-# List of ids with delimiter ','
-#
-# vmap.enableIndoorCheck
-# Enable/Disable VMap based indoor check to remove outdoor-only auras (mounts etc.).
-# Requires VMaps enabled to work.
-# Default: 1 (Enabled)
-# 0 (Disabled)
-#
-# DetectPosCollision
-# Check final move position, summon position, etc for visible collision with other objects or
-# wall (wall only if vmaps are enabled)
-# Default: 1 (enable, requires more CPU power)
-# 0 (disable, not so nice position selection but will require less CPU power)
-#
-# TargetPosRecalculateRange
-# Max distance from movement target point (+moving unit size) and targeted object (+size)
-# after that new target movement point calculated. Max: melee attack range (5), min: contact range (0.5)
-# More distance let have better performence, less distance let have more sensitive reaction at target move.
-# Default: 1.5
-#
-# mmap.enabled
-# Enable/Disable pathfinding using mmaps
-# Default: 1 (enable)
-# 0 (disable)
-#
-# mmap.ignoreMapIds
-# Disable mmap pathfinding on the listed maps.
-# List of map ids with delimiter ','
-#
-# UpdateUptimeInterval
-# Update realm uptime period in minutes (for save data in 'uptime' table). Must be > 0
-# Default: 10 (minutes)
-#
-# MaxCoreStuckTime
-# Periodically check if the process got freezed, if this is the case force crash after the specified
-# amount of seconds. Must be > 0. Recommended > 10 secs if you use this.
-# Default: 0 (Disabled)
-#
-# AddonChannel
-# Permit/disable the use of the addon channel through the server
-# (some client side addons can stop work correctly with disabled addon channel)
-# Default: 1 (permit addon channel)
-# 0 (do not permit addon channel)
-#
-# CleanCharacterDB
-# Perform character db cleanups on start up
-# Default: 1 (Enable)
-# 0 (Disabled)
-#
-# MaxWhoListReturns
-# Set the max number of players returned in the /who list and interface (0 means unlimited)
-# Default: 49 - (stable)
-#
-################################################################################
-
-UseProcessors = 0
-ProcessPriority = 1
-Compression = 1
-PlayerLimit = 100
-SaveRespawnTimeImmediately = 1
-MaxOverspeedPings = 2
-GridUnload = 1
-LoadAllGridsOnMaps = ""
-GridCleanUpDelay = 300000
-MapUpdateInterval = 100
-MapUpdateThreads = 2
-ChangeWeatherInterval = 600000
-PlayerSave.Interval = 900000
-PlayerSave.Stats.MinLevel = 0
-PlayerSave.Stats.SaveOnlyOnLogout = 1
-vmap.enableLOS = 1
-vmap.enableHeight = 1
-vmap.ignoreSpellIds = "7720"
-vmap.enableIndoorCheck = 1
-DetectPosCollision = 1
-TargetPosRecalculateRange = 1.5
-mmap.enabled = 1
-mmap.ignoreMapIds = ""
-UpdateUptimeInterval = 10
-MaxCoreStuckTime = 0
-AddonChannel = 1
-CleanCharacterDB = 1
-MaxWhoListReturns = 49
-
-################################################################################
-# SERVER LOGGING
-#
-# LogSQL
-# Enable logging of GM commands - all SQL code will be written to a log file
-# All commands are written to a file: YYYY-MM-DD_logSQL.sql
-# If a new day starts (00:00:00), a new file is created - the old file will not be deleted.
-# Default: 1 - Write SQL code to logfile
-# 0 - Do not log
-#
-# PidFile
-# World daemon PID file
-# Default: "" - do not create PID file
-# "./worldd.pid" - create PID file (recommended name)
-#
-# LogLevel
-# Server console level of logging
-# 0 = Minimum; 1 = Basic&Error; 2 = Detail; 3 = Full/Debug
-# Default: 3
-#
-# LogTime
-# Include time in server console output [hh:mm:ss]
-# Default: 0 (no time)
-# 1 (print time)
-#
-# LogFile
-# Logfile name
-# Default: "world-server.log"
-# "" - Empty name disable creating log file
-#
-# LogTimestamp
-# Logfile with timestamp of server start in name
-# Default: 0 - no timestamp in name
-# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext
-#
-# LogFileLevel
-# Server file level of logging
-# 0 = Minimum; 1 = Error; 2 = Detail; 3 = Full/Debug
-# Default: 0
-#
-# LogFilter_CreatureMoves
-# LogFilter_TransportMoves
-# LogFilter_PlayerMoves
-# LogFilter_VisibilityChanges
-# LogFilter_Weather
-# LogFilter_DbStrictedCheck
-# LogFilter_SQLText
-# LogFilter_Pathfinding
-# LogFilter_MapsLoading
-# LogFilter_EventAiDev
-# Log filters (active by default - meaning: the filter is active, hence the log is not displayed)
-# Default: 1 - not include with any log level
-# 0 - include in log if log level permit
-#
-# LogFilter_PeriodicAffects
-# LogFilter_AIAndMovegens
-# LogFilter_PlayerStats
-# LogFilter_Damage
-# LogFilter_Combat
-# LogFilter_SpellCast
-# Log filters (disabled by default, mostly debug only output affected cases)
-# Default: 0 - include in log if log level permit
-# 1 - not include with any log level
-#
-# LogWhispers
-# Log whispers between players to database, character.character_whispers
-# 0 - Don't log anything
-# Default: 1 - Only log GM tickets responses and the following conversation until closing the ticket
-# 2 - Log all whispers
-#
-# WorldLogFile
-# Packet logging file for the worldserver
-# Default: "" - no log file created
-# "world.log" - recommended name to create a log file
-#
-# WorldLogTimestamp
-# Logfile with timestamp of server start in name
-# Default: 0 - no timestamp in name
-# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext
-#
-# DBErrorLogFile
-# Log file of DB errors detected at server run
-# Default: "DBErrors.log"
-#
-# ElunaErrorLogFile
-# Log file of Eluna errors detected at server run
-# Default: "ElunaErrors.log"
-#
-# EventAIErrorLogFile
-# Log file of EventAI errors detected at server run
-# Default: "EventAIErrors.log"
-#
-# CharLogFile
-# Character operations logfile name
-# Default: "Char.log"
-# "" - Empty name disable creating log file
-#
-# CharLogTimestamp
-# Logfile with timestamp of server start in name
-# Default: 0 - no timestamp in name
-# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext
-#
-# CharLogDump
-# Write character dump before deleting in Char.log
-# For restoration, cut character data from log starting from
-# line == START DUMP == to line == END DUMP == (without its) in file and load it using loadpdump command
-# Default: 0 - don't include dumping chars to log
-# 1 - include dumping chars to log
-#
-# GmLogFile
-# GM Log file of gm commands
-# Default: "" (Disable)
-#
-# GmLogTimestamp
-# GM Logfile with timestamp of server start in name
-# Default: 0 - no timestamp in name
-# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext
-#
-# GmLogPerAccount
-# GM Logfiles with GM account id (Note: logs not created if GmLogFile not set)
-# Default: 0 - add gm log data to single log file
-# 1 - add gm log data to account specific log files with name
-# in form Logname_#ID_YYYY-MM-DD_HH-MM-SS.Ext
-# or form Logname_#ID.Ext
-#
-# RaLogFile
-# Log file of RA commands
-# Default: "Ra.log"
-# "" - Empty name for disable
-#
-# WardenLogFile
-# Log file for warden-related output
-# Default: "" - no log file created
-# "warden.log" - recommended name to create a log file
-#
-# LogColors
-# Color for messages (format "normal_color details_color debug_color error_color")
-# Colors: 0 - BLACK, 1 - RED, 2 - GREEN, 3 - BROWN, 4 - BLUE, 5 - MAGENTA, 6 - CYAN, 7 - GREY,
-# 8 - YELLOW, 9 - LRED, 10 - LGREEN, 11 - LBLUE, 12 - LMAGENTA, 13 - LCYAN, 14 - WHITE
-# Default: "" - none colors
-# Example: "13 7 11 9"
-#
-################################################################################
-
-LogSQL = 1
-PidFile = ""
-LogLevel = 3
-LogTime = 0
-LogFile = "world-server.log"
-LogTimestamp = 0
-LogFileLevel = 0
-LogFilter_TransportMoves = 1
-LogFilter_CreatureMoves = 1
-LogFilter_VisibilityChanges = 1
-LogFilter_Weather = 1
-LogFilter_DbStrictedCheck = 1
-LogFilter_Pathfinding = 1
-LogFilter_MapsLoading = 1
-LogFilter_EventAiDev = 1
-LogFilter_PeriodicAffects = 0
-LogFilter_PlayerMoves = 1
-LogFilter_SQLText = 1
-LogFilter_AIAndMovegens = 0
-LogFilter_PlayerStats = 0
-LogFilter_Damage = 0
-LogFilter_Combat = 0
-LogFilter_SpellCast = 0
-LogWhispers = 1
-WorldLogFile = "world-packets.log"
-WorldLogTimestamp = 0
-DBErrorLogFile = "world-database.log"
-ElunaErrorLogFile = "ElunaErrors.log"
-EventAIErrorLogFile = "world-eventai.log"
-CharLogFile = "world-characters.log"
-CharLogTimestamp = 0
-CharLogDump = 0
-GmLogFile = "world-gamemaster.log"
-GmLogTimestamp = 0
-GmLogPerAccount = 0
-RaLogFile = "world-remote-access.log"
-WardenLogFile = "warden.log"
-WardenLogTimestamp = 0
-LogColors = "13 7 11 9"
-SD3ErrorLogFile = "scriptdev3-errors.log"
-
-################################################################################
-# SERVER SETTINGS
-#
-# GameType
-# Server realm style
-# 0 = NORMAL; 1 = PVP; 4 = NORMAL; 6 = RP; 8 = RPPVP
-# also custom type: 16 FFA_PVP (free for all pvp mode like arena PvP in all zones except rest
-# activated places and sanctuaries)
-#
-# RealmZone
-# Server realm zone (set allowed alphabet in character names/etc). See also Strict*Names options.
-#
-# 1 Development - any language (Default)
-# 2 United States - extended-Latin
-# 3 Oceanic - extended-Latin
-# 4 Latin America - extended-Latin
-# 5 Tournament - basic-Latin at create, any at login
-# 6 Korea - East-Asian
-# 7 Tournament - basic-Latin at create, any at login
-# 8 English - extended-Latin
-# 9 German - extended-Latin
-# 10 French - extended-Latin
-# 11 Spanish - extended-Latin
-# 12 Russian - Cyrillic
-# 13 Tournament - basic-Latin at create, any at login
-# 14 Taiwan - East-Asian
-# 15 Tournament - basic-Latin at create, any at login
-# 16 China - East-Asian
-# 17 CN1 - basic-Latin at create, any at login
-# 18 CN2 - basic-Latin at create, any at login
-# 19 CN3 - basic-Latin at create, any at login
-# 20 CN4 - basic-Latin at create, any at login
-# 21 CN5 - basic-Latin at create, any at login
-# 22 CN6 - basic-Latin at create, any at login
-# 23 CN7 - basic-Latin at create, any at login
-# 24 CN8 - basic-Latin at create, any at login
-# 25 Tournament - basic-Latin at create, any at login
-# 26 Test Server - any language
-# 27 Tournament - basic-Latin at create, any at login
-# 28 QA Server - any language
-# 29 CN9 - basic-Latin at create, any at login
-#
-# DBC.Locale
-# DBC Language Settings
-# 0 = English; 1 = Korean; 2 = French; 3 = German; 4 = Chinese; 5 = Taiwanese; 6 = Spanish;
-# 255 = Auto Detect (Default)
-#
-# DeclinedNames
-# Allow russian clients to set and use declined names
-# Default: 0 - do not use declined names, except when the Russian RealmZone is set
-# 1 - use declined names
-#
-# StrictPlayerNames
-# Limit player name to language specific symbols set, not allow create characters, and set rename request and disconnect at not allowed symbols name
-# Default: 0 disable (but limited server timezone dependent client check)
-# 1 basic latin characters (strict)
-# 2 realm zone specific (strict). See RealmZone setting.
-# Note: In any case if you want correctly see character name at client this client must have apporopriate fonts
-# (included in client by default, with active official localization or custom localization fonts in clientdir/Fonts).
-# 3 basic latin characters + server timezone specific
-#
-# StrictCharterNames
-# Limit guild team charter names to language specific symbols set, not allow create charters with not allowed symbols in name
-# Default: 0 disable
-# 1 basic latin characters (strict)
-# 2 realm zone specific (strict). See RealmZone setting.
-# Note: In any case if you want correctly see character name at client this client must have apporopriate fonts
-# (included in client by default, with active official localization or custom localization fonts in clientdir/Fonts).
-# 3 basic latin characters + server timezone specific
-#
-# StrictPetNames
-# Limit pet names to language specific symbols set
-# Default: 0 disable
-# 1 basic latin characters (strict)
-# 2 realm zone specific (strict). See RealmZone setting.
-# Note: In any case if you want correctly see character name at client this client must have apporopriate fonts
-# (included in client by default, with active official localization or custom localization fonts in clientdir/Fonts).
-# 3 basic latin characters + server timezone specific
-#
-# MinPlayerName
-# Minimal name length (1..12)
-# Default: 2
-#
-# MinCharterName
-# Minimal name length (1..24)
-# Default: 2
-#
-# MinPetName
-# Minimal name length (1..12)
-# Default: 2
-#
-# CharactersCreatingDisabled
-# Disable characters creating for specific team or any (non-player accounts not affected)
-# Default: 0 - enabled
-# 1 - disabled only for Alliance
-# 2 - disabled only for Horde
-# 3 - disabled for both teams
-#
-# CharactersPerAccount
-# Limit numbers of characters per account (at all realms).
-# Note: this setting limits the character creating at the _current_ realm base at characters amount at all realms
-# Default: 50
-# The number must be >= CharactersPerRealm
-#
-# CharactersPerRealm
-# Limit numbers of characters for account at realm
-# Default: 10 (client limitation)
-# The number must be between 1 and 10
-#
-# SkipCinematics
-# Disable in-game script movie at first character's login(allows to prevent buggy intro in case of custom start location coordinates)
-# Default: 0 - show intro for each new character
-# 1 - show intro only for first character of selected race
-# 2 - disable intro in all cases
-#
-# MaxPlayerLevel
-# Max level that can be reached by a player for experience (in range from 1 to 100).
-# Change not recommended
-# Default: 60
-#
-# StartPlayerLevel
-# Staring level that have character at creating (in range 1 to MaxPlayerLevel)
-# Default: 1
-#
-# StartPlayerMoney
-# Amount of money that new players will start with.
-# If you want to start with one silver, use for example 100 (100 copper = 1 silver)
-# Default: 0
-#
-# MaxHonorPoints
-# Max honor points that player can have.
-# Default: 75000
-#
-# StartHonorPoints
-# Amount of honor that new players will start with
-# Default: 0
-#
-# MinHonorKills
-# Min kills that players must obtain to enter in weekly honor calculation
-# Default: 15
-#
-# MaintenanceDay
-# The day of the week is performed server maintenance ( currently used for Honor distribution )
-# range (0..6): 0 is the first day of the week (normally sunday), 6 is the latest
-# Default: 3 (Wednesday in EU)
-#
-# InstantLogout
-# Enable or disable instant logout for security level (0..4) or high (NOT in combat/while dueling/while falling)
-# Default: 1 (Mods/GMs/Admins)
-#
-# MountCost
-# The cost in copper of the regular mounts usually purchased at level 40.
-# Default: 100000 (10g)
-#
-# TrainMountCost
-# The cost in copper for training the apprentice riding skill for regular mounts usually purchased at level 40.
-# Default: 900000 (90g)
-#
-# MinTrainMountLevel
-# The minimal level at which players can train the apprentice riding skill for regular mounts.
-# Default: 40 (level 40)
-#
-# EpicMountCost
-# The cost in copper for epic mounts usually purchased at level 60.
-# Default: 1000000 (100g)
-#
-# TrainEpicMountCost
-# The cost in copper for training the journeyman riding skill for epic mounts usually purchased at level 60.
-# Default: 9000000 (900g)
-#
-# MinTrainEpicMountLevel
-# The minimal level at which players can train the journeyman riding skill for epic mounts.
-# Default: 60 (level 60)
-#
-# AllFlightPaths
-# Players will start with all flight paths (Note: ALL flight paths, not only player's team)
-# Default: 0 (true)
-# 1 (false)
-#
-# InstantFlightPaths
-# Flight paths will take players to their destination instantly, instead of making them wait to fly there.
-# Default: 0 (false)
-# 1 (true)
-#
-# AlwaysMaxSkillForLevel
-# Players will automatically gain max level dependent (weapon/defense) skill when logging in, leveling up etc.
-# Default: 0 (false)
-# 1 (true)
-#
-# ActivateWeather
-# Activate weather system
-# Default: 1 (true)
-# 0 (false)
-#
-# CastUnstuck
-# Allow cast Unstuck spell at .start or client Help option use
-# Default: 1 (true)
-# 0 (false)
-#
-# MaxSpellCastsInChain
-# Max amount triggered spell casts in chain by one caster, prevent stack overflow crash
-# Too Low value will make some correct triggered casts fail
-# 0 (no limit)
-# Default: 20
-#
-# RabbitDay
-# Set to Rabbit Day (date in unix time), only the day and month are considered, the year is not important
-# Default: 0 (off)
-# Suggested: 954547200 (April 1st, 2000)
-#
-# Instance.IgnoreLevel
-# Ignore level requirement to enter instance
-# Default: 0 (false)
-# 1 (true)
-#
-# Instance.IgnoreRaid
-# Ignore raid requirement to enter instance
-# Default: 0 (false)
-# 1 (true)
-#
-# Instance.ResetTimeHour
-# The hour of the day (0-23) when the global instance resets occur.
-# Default: 4
-#
-# Instance.UnloadDelay
-# Unload the instance map from memory after some time if no players are inside.
-# Default: 1800000 (miliseconds, i.e 30 minutes)
-# 0 (instance maps are kept in memory until they are reset)
-#
-# Quests.LowLevelHideDiff
-# Quest level difference to hide for player low level quests:
-# if player_level > quest_level + LowLevelQuestsHideDiff then quest "!" mark not show for quest giver
-# Default: 4
-# -1 (show all available quests marks)
-#
-# Quests.HighLevelHideDiff
-# Quest level difference to hide for player high level quests:
-# if player_level < quest_min_level - HighLevelQuestsHideDiff then quest "!" mark not show for quest giver
-# Default: 7
-# -1 (show all available quests marks)
-#
-# Quests.IgnoreRaid
-# Non-raid quests allowed in raids
-# Default: 0 (not allowed)
-# 1 (allowed)
-#
-# Guild.PetitionCost
-# The cost for guild petition charter (in copper)
-# Default: 1000 (10 silver)
-#
-# Guild.EventLogRecordsCount
-# Count of guild event log records stored in guild_eventlog table
-# Increase to store more guild events in table, minimum is 100
-# You can set it to very high value to prevent oldest guild events to be rewritten by latest guild events - but it can slow down performance
-# Default: 100
-#
-# TimerBar.Fatigue.GMLevel
-# Disable/enable fatigue for security level (0..4) or high
-# Default: 4 (None)
-#
-# TimerBar.Fatigue.Max
-# Fatigue max timer value (in secs)
-# Default: 60 (1 minute)
-# 0 (instant death)
-#
-# TimerBar.Breath.GMLevel
-# Disable/enable waterbreathing for security level (0..4) or high
-# Default: 4 (None)
-#
-# TimerBar.Breath.Max
-# Waterbreathing max timer value (in secs)
-# Default: 180
-# 0 (instant underwater breathing damage start)
-#
-# TimerBar.Fire.GMLevel
-# Disable/enable lava fire damage for security level (0..4) or high
-# Default: 4 (None)
-#
-# TimerBar.Fire.Max
-# Lava damage delay max timer value (in secs)
-# Default: 1
-# 0 (instant in lava damage start)
-#
-# MaxPrimaryTradeSkill
-# Max count that player can learn the primary trade skill.
-# Default: 2
-# Max : 10
-#
-# MinPetitionSigns
-# Min signatures count to creating guild (0..9).
-# Default: 9
-#
-# MaxGroupXPDistance
-# Max distance to creature for group memeber to get XP at creature death.
-# Default: 74
-#
-# MailDeliveryDelay
-# Mail delivery delay time for item sending
-# Default: 3600 sec (1 hour)
-#
-# MassMailer.SendPerTick
-# Max amount mail send each tick from mails list scheduled for mass mailer proccesing.
-# More mails increase server load but speedup mass mail proccess. Normal tick length: 50 msecs, so 20 ticks in sec and 200 mails in sec by default.
-# Default: 10
-#
-# PetUnsummonAtMount
-# Permanent pet will unsummoned at player mount
-# Default: 0 - not unsummon
-# 1 - unsummon for any mount
-#
-# Event.Announce
-# Default: 0 (false)
-# 1 (true)
-#
-# BeepAtStart
-# Beep at mangosd start finished (mostly work only at Unix/Linux systems)
-# Default: 1 (true)
-# 0 (false)
-#
-# ShowProgressBars
-# Control show progress bars for load steps at server startup
-# Default: 1 (true)
-# 0 (false)
-#
-# WaitAtStartupError
-# After startup error report wait or some time before continue (and possible close console window)
-# -1 (wait until press)
-# Default: 10 (wait 10 seconds before closing)
-# 0 (not wait)
-# N (>0, wait N secs)
-#
-# PlayerCommands
-# Should player chat be parsed for GM commands.
-# Default: 0 (ignore commands)
-# 1 (parse commands)
-#
-# Motd
-# Message of the Day. Displayed at worldlogin for every user ('@' for a newline).
-#
-# AutoBroadcast
-# Timer interval (in seconds) for automatic server announcements (autobroadcasts). Zero value means AB is disabled
-# 0 (AB is disabled)
-# Default: 600 (AB every 10 minutes)
-# N (>0, AB every N seconds)
-################################################################################
-
-GameType = 4
-RealmZone = 1
-DBC.Locale = 255
-DeclinedNames = 0
-StrictPlayerNames = 0
-StrictCharterNames = 0
-StrictPetNames = 0
-MinPlayerName = 2
-MinCharterName = 2
-MinPetName = 2
-CharactersCreatingDisabled = 0
-CharactersPerAccount = 50
-CharactersPerRealm = 10
-SkipCinematics = 0
-MaxPlayerLevel = 60
-StartPlayerLevel = 1
-StartPlayerMoney = 0
-MaxHonorPoints = 75000
-StartHonorPoints = 0
-MinHonorKills = 15
-MaintenanceDay = 3
-InstantLogout = 1
-MountCost = 100000
-TrainMountCost = 900000
-MinTrainMountLevel = 40
-EpicMountCost = 1000000
-TrainEpicMountCost = 9000000
-MinTrainEpicMountLevel = 60
-AllFlightPaths = 0
-InstantFlightPaths = 0
-AlwaysMaxSkillForLevel = 0
-ActivateWeather = 1
-CastUnstuck = 1
-MaxSpellCastsInChain = 20
-RabbitDay = 0
-Instance.IgnoreLevel = 0
-Instance.IgnoreRaid = 0
-Instance.ResetTimeHour = 4
-Instance.UnloadDelay = 1800000
-Quests.LowLevelHideDiff = 4
-Quests.HighLevelHideDiff = 7
-Quests.IgnoreRaid = 0
-Guild.PetitionCost = 1000
-Guild.EventLogRecordsCount = 100
-TimerBar.Fatigue.GMLevel = 4
-TimerBar.Fatigue.Max = 60
-TimerBar.Breath.GMLevel = 4
-TimerBar.Breath.Max = 60
-TimerBar.Fire.GMLevel = 4
-TimerBar.Fire.Max = 1
-MaxPrimaryTradeSkill = 2
-MinPetitionSigns = 9
-MaxGroupXPDistance = 74
-MailDeliveryDelay = 3600
-MassMailer.SendPerTick = 10
-PetUnsummonAtMount = 0
-Event.Announce = 0
-BeepAtStart = 1
-ShowProgressBars = 1
-WaitAtStartupError = 10
-PlayerCommands = 0
-Motd = "Welcome to Mangos Zero"
-AutoBroadcast = 0
-
-################################################################################
-# PLAYER INTERACTION
-#
-# AllowTwoSide.Accounts
-# Allow accounts to create characters in both teams in any game type.
-# Default: 0 (Not allowed)
-# 1 (Allowed)
-#
-# AllowTwoSide.Interaction.Chat
-# AllowTwoSide.Interaction.Channel
-# AllowTwoSide.Interaction.Group
-# AllowTwoSide.Interaction.Guild
-# AllowTwoSide.Interaction.Trade
-# AllowTwoSide.Interaction.Auction
-# AllowTwoSide.Interaction.Mail
-# Allow or not common :chat(say,yell); channel(chat); group(join); guild(join); trade with different team;
-# merge all auction houses for players from different teams; send mail to different team.
-# Default: 0 (Not allowed)
-# 1 (Allowed)
-#
-# AllowTwoSide.WhoList
-# Allow show player from both team in who list.
-# Default: 0 (Not allowed)
-# 1 (Allowed)
-#
-# AllowTwoSide.AddFriend
-# Allow adding friends from other team in friend list.
-# Default: 0 (Not allowed)
-# 1 (Allowed)
-#
-# TalentsInspecting
-# Allow other players see character talents in inspect dialog (Characters in Gamemaster mode can
-# inspect talents always)
-# Default: 1 (allow)
-# 0 (not allow)
-#
-################################################################################
-
-AllowTwoSide.Accounts = 0
-AllowTwoSide.Interaction.Chat = 0
-AllowTwoSide.Interaction.Channel = 0
-AllowTwoSide.Interaction.Group = 0
-AllowTwoSide.Interaction.Guild = 0
-AllowTwoSide.Interaction.Trade = 0
-AllowTwoSide.Interaction.Auction = 0
-AllowTwoSide.Interaction.Mail = 0
-AllowTwoSide.WhoList = 0
-AllowTwoSide.AddFriend = 0
-TalentsInspecting = 1
-
-################################################################################
-# CREATURE AND GAMEOBJECT SETTINGS
-#
-# ThreatRadius
-# Radius for creature to evade after being pulled away from combat start point
-# If ThreatRadius is less than creature aggro radius then aggro radius will be used
-# Default: 100 yards
-#
-# Rate.Creature.Aggro
-# Aggro radius percent or off.
-# Default: 1 - 100%
-# 1.5 - 150%
-# 0 - off (0%)
-#
-# CreatureRespawnAggroDelay
-# The delay between when a creature spawns and when it can be aggroed by nearby movement.
-# Default: 5000 (5s)
-#
-# CreatureFamilyFleeAssistanceRadius
-# Radius which creature will use to seek for a near creature for assistance. Creature will flee to this creature.
-# Default: 30
-# 0 - off
-#
-# CreatureFamilyAssistanceRadius
-# Radius which creature will use to call assistance without moving
-# Default: 10
-# 0 - off
-#
-# CreatureFamilyAssistanceDelay
-# Reaction time for creature assistance call
-# Default: 1500 (1.5s)
-#
-# CreatureFamilyFleeDelay
-# Time during which creature can flee when no assistant found
-# Default: 7000 (7s)
-#
-# WorldBossLevelDiff
-# Difference for boss dynamic level with target
-# Default: 3
-#
-# Corpse.EmptyLootShow
-# If target can have loot (or can be skining after loot) but no loot generated still show loot window
-# Default: 1 (show)
-# 0 (not show)
-#
-# Corpse.Decay.NORMAL
-# Corpse.Decay.RARE
-# Corpse.Decay.ELITE
-# Corpse.Decay.RAREELITE
-# Corpse.Decay.WORLDBOSS
-# Seconds until creature corpse will decay without being looted or skinned (not used when creature does not have loot initially)
-# Default: 300, 900, 600, 1200, 3600
-#
-# Rate.Corpse.Decay.Looted
-# Controls how long the creature corpse stays after it had been looted, as a multiplier of its Corpse.Decay.* config.
-# Default: 0.5
-#
-# Rate.Creature.Normal.Damage
-# Rate.Creature.Elite.Elite.Damage
-# Rate.Creature.Elite.RAREELITE.Damage
-# Rate.Creature.Elite.WORLDBOSS.Damage
-# Rate.Creature.Elite.RARE.Damage
-# Creature Damage Rates.
-# Examples: 2 - creatures will damage 2x, 1.7 - 1.7x.
-#
-# Rate.Creature.Normal.SpellDamage
-# Rate.Creature.Elite.Elite.SpellDamage
-# Rate.Creature.Elite.RAREELITE.SpellDamage
-# Rate.Creature.Elite.WORLDBOSS.SpellDamag
-# Rate.Creature.Elite.RARE.SpellDamage
-# Creature Spell Damage Rates.
-# Examples: 2 - creatures will damage with spells 2x, 1.7 - 1.7x.
-#
-# Rate.Creature.Normal.HP
-# Rate.Creature.Elite.Elite.HP
-# Rate.Creature.Elite.RAREELITE.HP
-# Rate.Creature.Elite.WORLDBOSS.HP
-# Rate.Creature.Elite.RARE.HP
-# Creature Health Ammount Modifier.
-# Examples: 2 - creatures have 2x health, 1.7 - 1.7x.
-#
-# ListenRange.Say
-# Distance from player to listen text that creature (or other world object) say
-# Default: 40
-#
-# ListenRange.TextEmote
-# Distance from player to listen textemote that creature (or other world object) say
-# Default: 40
-#
-# ListenRange.Yell
-# Distance from player to listen text that creature (or other world object) yell
-# Default: 300
-#
-# GuidReserveSize.Creature
-# GuidReserveSize.GameObject
-# Amount guids reserved for .npc add/.gobject add directly after last used in DB static spawned creature/gameobject guid
-# Commands .npc add/.gobject add can be used only for guids from this reserve and required server restart if all guids
-# from reserve used before above commands can be used in like case. Less size increase amount guids for dynamic spawns
-# in game from other side
-# Default: 100
-#
-################################################################################
-
-ThreatRadius = 100
-Rate.Creature.Aggro = 1
-CreatureRespawnAggroDelay = 5000
-CreatureFamilyFleeAssistanceRadius = 30
-CreatureFamilyAssistanceRadius = 10
-CreatureFamilyAssistanceDelay = 1500
-CreatureFamilyFleeDelay = 7000
-WorldBossLevelDiff = 3
-Corpse.EmptyLootShow = 1
-Corpse.Decay.NORMAL = 300
-Corpse.Decay.RARE = 900
-Corpse.Decay.ELITE = 600
-Corpse.Decay.RAREELITE = 1200
-Corpse.Decay.WORLDBOSS = 3600
-Rate.Corpse.Decay.Looted = 0.5
-Rate.Creature.Elite.Elite.Damage = 0.5
-Rate.Creature.Elite.Elite.HP = 0.5
-Rate.Creature.Elite.Elite.SpellDamage = 0.5
-Rate.Creature.Elite.RARE.Damage = 0.5
-Rate.Creature.Elite.RARE.HP = 0.5
-Rate.Creature.Elite.RARE.SpellDamage = 0.5
-Rate.Creature.Elite.RAREELITE.Damage = 0.5
-Rate.Creature.Elite.RAREELITE.HP = 0.5
-Rate.Creature.Elite.RAREELITE.SpellDamage = 0.5
-Rate.Creature.Elite.WORLDBOSS.Damage = 0.5
-Rate.Creature.Elite.WORLDBOSS.HP = 0.5
-Rate.Creature.Elite.WORLDBOSS.SpellDamage = 0.5
-Rate.Creature.Normal.Damage = 0.5
-Rate.Creature.Normal.HP = 0.5
-Rate.Creature.Normal.SpellDamage = 0.5
-
-ListenRange.Say = 40
-ListenRange.TextEmote = 40
-ListenRange.Yell = 300
-
-GuidReserveSize.Creature = 100
-GuidReserveSize.GameObject = 100
-
-################################################################################
-# CHAT SETTINGS
-#
-# ChatFakeMessagePreventing
-# Chat protection from creating fake messages using a lot spaces (other invisible symbols),
-# not applied to addon language messages, but can prevent working old addons
-# that use normal languages for sending data to another clients.
-# Default: 0 (disable fake messages preventing)
-# 1 (enable fake messages preventing)
-#
-# ChatStrictLinkChecking.Severity
-# Check chat messages for ingame links to spells, items, quests, achievements etc.
-# Default: 0 (disable link checking)
-# 1 (check if only valid pipe commands are used. This prevents posting pictures for example)
-# 2 (verifiy that pipe commands are used in a correct order)
-# 3 (check if color, entry and name don't contradict each other. For correct work, please assure
-# that you have extracted locale DBCs of every language specific client playing on this server.)
-#
-# ChatStrictLinkChecking.Kick
-# Defines, what should be done if a message is considered to contain invalid pipe commands.
-# Default: 0 (silently ignore message)
-# 1 (kick players who sent invalid formed messages)
-#
-# ChatFlood.MessageCount
-# Chat anti-flood protection, haste message count to activate protection
-# Default: 10
-# 0 (disable anti-flood protection)
-#
-# ChatFlood.MessageDelay
-# Chat anti-flood protection, minimum message delay to count message
-# Default: 1 (in secs)
-#
-# ChatFlood.MuteTime
-# Chat anti-flood protection, mute time at activation flood protection (not saved)
-# Default: 10 (in secs)
-#
-# Channel.SilentlyGMJoin
-# Silently join GM characters (security level > 1) to channels
-# Default: 0 (join announcement in normal way)
-# 1 (GM join without announcement)
-#
-################################################################################
-
-ChatFakeMessagePreventing = 0
-ChatStrictLinkChecking.Severity = 0
-ChatStrictLinkChecking.Kick = 0
-ChatFlood.MessageCount = 10
-ChatFlood.MessageDelay = 1
-ChatFlood.MuteTime = 10
-Channel.SilentlyGMJoin = 0
-
-################################################################################
-# GAME MASTER SETTINGS
-#
-# GM.LoginState
-# GM mode at login
-# Default: 2 (last save state)
-# 0 (disable)
-# 1 (enable)
-#
-# GM.Visible
-# GM visibility at login
-# Default: 2 (last save state)
-# 0 (invisible)
-# 1 (visible)
-#
-# GM.AcceptTickets
-# Is GM accepting tickets from player by default or not.
-# Default: 2 (last save state)
-# 0 (disable)
-# 1 (enable)
-#
-# GM.TicketListSize
-# Number of tickets shown to a GM by .ticket list/onlinelist.
-# Default: 30
-#
-# GM.TicketOfflineClosing
-# Is GM ticket close available for teh offline players or not.
-# Default: 0 (false) closing denied
-# 1 (true) closing enabled
-#
-# GM.Chat
-# GM chat mode at login
-# Default: 2 (last save state)
-# 0 (disable)
-# 1 (enable)
-#
-# GM.WhisperingTo
-# Is GM accepting whispers from player by default or not.
-# Default: 2 (last save state)
-# 0 (disable)
-# 1 (enable)
-#
-# GM.InGMList.Level
-# Max GM level showed in GM list (if visible) in non-GM state (.gm off)
-# 0 (none)
-# 1 (only moderators)
-# 2 (only gamemasters)
-# Default: 3 (anyone)
-#
-# GM.InWhoList.Level
-# Max GM level showed in who list (if visible).
-# 0 (only players)
-# 1 (only moderators)
-# 2 (only gamemasters)
-# Default: 3 (anyone)
-#
-# GM.LogTrade
-# Include GM trade and trade slot enchanting operations in GM log if it enable
-# Default: 1 (include)
-# 0 (not include)
-#
-# GM.StartLevel
-# GM starting level (1-255)
-# Default: 1
-#
-# GM.LowerSecurity
-# Disallow a lower security member to interact with a higher one using commands
-# Default: 0 (disable)
-# 1 (enable)
-#
-# GM.InvisibleAura
-# A spell that will be cast when a gm uses ".gm visible off" (Must be aura spell)
-# Default: 31748 (Spirit Particles, big)
-# 0 (Disabled)
-# GM.MaxSpeedFactor
-# Set the max speed factor whend using commands .mod speed / .mod aspeed etc...
-# Only Integer values
-# Default: 10
-#
-################################################################################
-
-GM.LoginState = 2
-GM.Visible = 2
-GM.AcceptTickets = 2
-GM.TicketListSize = 30
-GM.TicketOfflineClosing = 1
-GM.Chat = 2
-GM.WhisperingTo = 2
-GM.InGMList.Level = 3
-GM.InWhoList.Level = 3
-GM.LogTrade = 1
-GM.StartLevel = 1
-GM.LowerSecurity = 0
-GM.InvisibleAura = 31748
-GM.MaxSpeedFactor = 10
-
-################################################################################
-# VISIBILITY AND RADIUSES
-#
-# Visibility.GroupMode
-# Group visibility modes
-# Default: 0 (standard setting: only members from same group can 100% auto detect invisible player)
-# 1 (raid members 100% auto detect invisible player from same raid)
-# 2 (players from same team can 100% auto detect invisible player)
-#
-# Visibility.Distance.Continents
-# Visibility.Distance.Instances
-# Visibility.Distance.BG
-# Visibility distance for different ingame object in different maps.
-# Visibility on continents on offy ~90 yards. In BG ~180. For instances default ~120.
-# Max limited by active player zone: ~ 333
-# Min limit is max aggro radius (45) * Rate.Creature.Aggro
-#
-# Visibility.Distance.InFlight
-# Visible distance for player in flight
-# Min limit is 0 (not show any objects)
-#
-# Visibility.Distance.Grey.Unit
-# Visibility grey distance for creatures/players (fast changing objects)
-# addition to appropriate object type Visibility.Distance.* use in case visibility removing to
-# object (except corpse around distances) If D is distance and G is grey distance then object
-# make visible if distance to it <= D but make non visible if distance > D+G
-# Default: 1 (yard)
-#
-# Visibility.Distance.Grey.Object
-# Visibility grey distance for dynobjects/gameobjects/corpses/creature bodies
-# Default: 10 (yards)
-#
-# Visibility.RelocationLowerLimit
-# Object's visibility update called, when distance between current object's position and position,
-# where visiblity was updated last time, reaches RelocationLoverLimit value
-# Default: 10 (yards)
-#
-# Visibility.AIRelocationNotifyDelay
-# Delay time between creature AI reactions on nearby movements
-# Default: 1000 (milliseconds)
-#
-################################################################################
-
-Visibility.GroupMode = 0
-Visibility.Distance.Continents = 90
-Visibility.Distance.Instances = 120
-Visibility.Distance.BG = 180
-Visibility.Distance.InFlight = 100
-Visibility.Distance.Grey.Unit = 1
-Visibility.Distance.Grey.Object = 10
-Visibility.RelocationLowerLimit = 10
-Visibility.AIRelocationNotifyDelay = 1000
-
-################################################################################
-# SERVER RATES
-#
-# Rate.Health
-# Rate.Mana
-# Rate.Rage.Income
-# Rate.Rage.Loss
-# Rate.Focus
-# Rate.Loyalty
-# Rate.Energy (Rogue)
-# Health and power regeneration and rage income from damage.
-# Default: 1
-#
-# Rate.Skill.Discovery
-# Skill Discovery Rates
-# Default: 1
-#
-# Rate.Drop.Item.Poor
-# Rate.Drop.Item.Normal
-# Rate.Drop.Item.Uncommon
-# Rate.Drop.Item.Rare
-# Rate.Drop.Item.Epic
-# Rate.Drop.Item.Legendary
-# Rate.Drop.Item.Artifact
-# Rate.Drop.Item.Referenced
-# Rate.Drop.Money
-# Drop rates (items by quality and money)
-# Default: 1
-#
-# Rate.XP.Kill
-# Rate.XP.PetKill
-# Rate.XP.Quest
-# Rate.XP.Explore
-# XP rates
-# Default: 1
-#
-# Rate.Rest.InGame
-# Rate.Rest.Offline.InTavernOrCity
-# Rate.Rest.Offline.InWilderness
-# Resting points grow rates (1 - normal, 2 - double rate, 0.5 - half rate, etc) from standard values
-#
-# Rate.Damage.Fall
-# Damage after fall rate. (1 - standard, 2 - double damage, 0.5 - half damage, etc)
-#
-# Rate.Auction.Time
-# Rate.Auction.Deposit
-# Rate.Auction.Cut
-# Auction rates (auction time, deposit get at auction start, auction cut from price at auction end)
-#
-# Auction.Deposit.Min
-# Minimum auction deposit size in copper
-# Default: 0
-#
-# Rate.Honor
-# Honor gain rate
-#
-# Rate.Mining.Amount
-# Rate.Mining.Next
-# Mining Rates (Mining.Amount changes minimum/maximum usetimes of a deposit,
-# Mining.Next changes chance to have next use of a deposit)
-#
-# Rate.Mining.Lower
-# Spawn percentage of lower mineral base ores
-# Rate.Mining.Rare
-# Spawn percentage of rare mineral nodes
-# Rate.Mining.Darkiron
-# Spawn percentage Darkiron in Burning Steppes and Searing Gorge
-# Autopooling.Mining.Enable
-# Increases server startup can be disabled for testing purposes when fast server restart is demanded
-# 0 = Disabled (default)
-# 1 = Enabled
-# Rate.Mining.Autopooling
-# Percentage of spawned mining nodes per zone
-#
-# Rate.Talent
-# Talent Point rates
-# Default: 1
-#
-# Rate.Reputation.Gain
-# Reputation Gain rate
-# Default: 1
-#
-# Rate.Reputation.LowLevel.Kill
-# Reputation Gain form low level kill (grey creture)
-# Default: 0.2
-#
-# Rate.Reputation.LowLevel.Quest
-# Reputation Gain rate
-# Default: 1
-#
-# Rate.InstanceResetTime
-# Multiplier for the number of days in between global raid/heroic instance resets.
-# Default: 1
-#
-# SkillGain.Crafting
-# SkillGain.Defense
-# SkillGain.Gathering
-# SkillGain.Weapon
-# crafting/defense/gathering/weapon skills gain at skill grow (1,2,...)
-# Default: 1
-#
-# SkillChance.Orange
-# SkillChance.Yellow
-# SkillChance.Green
-# SkillChance.Grey
-# Skill chance values (0..100)
-# Default: 100-75-25-0
-#
-# SkillChance.MiningSteps
-# SkillChance.SkinningSteps
-# For skinning and Mining chance decrease with skill level.
-# Default: 0 - no decrease
-# 75 - in 2 times each 75 skill points
-#
-# SkillFail.Loot.Fishing
-# For fishing instead fail provided junk loot
-# Default: 0 (disabled)
-# 1 (enabled)
-#
-# SkillFail.Gain.Fishing
-# For fishing skill gain possible at fail also
-# Default: 0 (disabled)
-# 1 (enabled)
-#
-# SkillFail.Possible.FishingPool
-# For fishing pool impossible fail from low skill by default
-# Default: 1 (enabled)
-# 0 (disabled)
-#
-# DurabilityLossChance.Damage
-# Chance lost one from equiped items durability point at damage apply or receive.
-# Default: 0.5 (100/0.5 = 200) Each 200 damage apply one from 19 possible equipped items
-#
-# DurabilityLossChance.Absorb
-# Chance lost one from armor items durability point at damage absorb.
-# Default: 0.5 (100/0.5 = 200) Each 200 absorbs apply one from 15 possible armor equipped items
-#
-# DurabilityLossChance.Parry
-# Chance lost weapon durability point at parry.
-# Default: 0.05 (100/0.05 = 2000) Each 2000 parry attacks main weapon lost point
-#
-# DurabilityLossChance.Block
-# Chance lost sheild durability point at damage block.
-# Default: 0.05 (100/0.05 = 2000) Each 2000 partly or full blocked attacks shield lost point
-#
-# Death.SicknessLevel
-# Starting Character start gain sickness at spirit resurrection (1 min)
-# Default: 11
-# -10 - character will have full time (10min) sickness at 1 level
-# maxplayerlevel+1 - character will not have sickness at any level
-#
-# Death.CorpseReclaimDelay.PvP
-# Death.CorpseReclaimDelay.PvE
-# Enabled/disabled increase corpse reclaim delay at often PvP/PvE deaths
-# Default: 1 (enabled)
-# 0 (disabled)
-#
-# Death.Bones.World
-# Death.Bones.Battleground
-# Enabled/disabled creating bones instead corpse at resurrection (in normal zones/instacnes, or battleground)
-# Default: 1 (enabled)
-# 0 (disabled)
-#
-# Death.Ghost.RunSpeed.World
-# Death.Ghost.RunSpeed.Battleground
-# Modifies the speed of player's ghosts, removed upon reviving, not permanent/saved, in non-BG and BG maps
-# Default: 1.0 (normal speed)
-#
-################################################################################
-
-Rate.Health = 1
-Rate.Mana = 1
-Rate.Rage.Income = 1
-Rate.Rage.Loss = 1
-Rate.Focus = 1
-Rate.Loyalty = 1
-Rate.Energy = 1
-Rate.Skill.Discovery = 1
-Rate.Drop.Item.Poor = 1
-Rate.Drop.Item.Normal = 1
-Rate.Drop.Item.Uncommon = 1
-Rate.Drop.Item.Rare = 1
-Rate.Drop.Item.Epic = 1
-Rate.Drop.Item.Legendary = 1
-Rate.Drop.Item.Artifact = 1
-Rate.Drop.Item.Referenced = 1
-Rate.Drop.Money = 1
-Rate.XP.Kill = 1
-Rate.XP.PetKill = 1
-Rate.XP.Quest = 1
-Rate.XP.Explore = 1
-Rate.Rest.InGame = 1
-Rate.Rest.Offline.InTavernOrCity = 1
-Rate.Rest.Offline.InWilderness = 1
-Rate.Damage.Fall = 1
-Rate.Auction.Time = 1
-Rate.Auction.Deposit = 1
-Rate.Auction.Cut = 1
-Auction.Deposit.Min = 0
-Rate.Honor = 1
-Rate.Mining.Amount = 1
-Rate.Mining.Next = 1
-Rate.Mining.Lower = 50
-Rate.Mining.Rare = 20
-Rate.Mining.Darkiron = 10
-Autopooling.Mining.Enable = 0
-Rate.Mining.Autopooling = 90
-Rate.Talent = 1
-Rate.Reputation.Gain = 1
-Rate.Reputation.LowLevel.Kill = 0.2
-Rate.Reputation.LowLevel.Quest = 1
-Rate.InstanceResetTime = 1
-
-SkillGain.Crafting = 1
-SkillGain.Defense = 1
-SkillGain.Gathering = 1
-SkillGain.Weapon = 1
-
-SkillChance.Orange = 100
-SkillChance.Yellow = 75
-SkillChance.Green = 25
-SkillChance.Grey = 0
-SkillChance.MiningSteps = 0
-SkillChance.SkinningSteps = 0
-
-SkillFail.Loot.Fishing = 0
-SkillFail.Gain.Fishing = 0
-SkillFail.Possible.FishingPool = 1
-
-DurabilityLossChance.Damage = 0.5
-DurabilityLossChance.Absorb = 0.5
-DurabilityLossChance.Parry = 0.05
-DurabilityLossChance.Block = 0.05
-
-Death.SicknessLevel = 11
-Death.CorpseReclaimDelay.PvP = 1
-Death.CorpseReclaimDelay.PvE = 1
-Death.Bones.World = 1
-Death.Bones.Battleground = 1
-Death.Ghost.RunSpeed.World = 1.0
-Death.Ghost.RunSpeed.Battleground = 1.0
-
-################################################################################
-# BATTLEGROUND CONFIG
-#
-# Battleground.CastDeserter
-# Cast Deserter spell at player who leave battleground in progress
-# Default: 1 (enable)
-# 0 (disable)
-#
-# Battleground.QueueAnnouncer.Join
-# Enable queue announcer posting to chat at join
-# Default: 0 (not send)
-# 1 (send to joined player only)
-# 2 (send to all players)
-#
-# Battleground.QueueAnnouncer.Start
-# Enable queue announcer posting to chat at BG start
-# Default: 0 (disable)
-# 1 (enable)
-#
-# Battleground.ScoreStatistics
-# Enable Battleground scores storage in database.
-# Default: 0 - (Disabled)
-# 1 - (Enabled)
-#
-# Battleground.InvitationType
-# Set Battleground invitation type
-# Default: 0 (normal - invite as much players to bg as possible, don't bother with ballance)
-# 1 (Experimental - don't allow to invite much more players of one faction)
-#
-# Battleground.PrematureFinishTimer
-# The time to end the bg if there are less than MinPlayersPerTeam on one side in milliseconds
-# Default: 300000 (5 minutes)
-# 0 - disable (not recommended)
-#
-# BattleGround.PremadeGroupWaitForMatch
-# The time in which premade group of 1 faction waits in BG Queue for premade group of other faction
-# 1800000 (30 minutes)
-# Default: 0 - disable premade group matches (group always added to bg team in normal way)
-#
-################################################################################
-
-Battleground.CastDeserter = 1
-Battleground.QueueAnnouncer.Join = 0
-Battleground.QueueAnnouncer.Start = 0
-Battleground.ScoreStatistics = 0
-Battleground.InvitationType = 0
-BattleGround.PrematureFinishTimer = 300000
-BattleGround.PremadeGroupWaitForMatch = 0
-
-################################################################################
-# OUTDOOR PVP CONFIG
-#
-# OutdoorPvp.SIEnabled #Enable Silithus Outdoor pvp
-# OutdoorPvp.EPEnabled #Enable Eastern Plaguelands Outdoor pvp
-# Default: 1 (enable)
-# 0 (disable)
-#
-################################################################################
-
-OutdoorPvp.SIEnabled = 1
-OutdoorPvp.EPEnabled = 1
-
-################################################################################
-# NETWORK CONFIG
-#
-# Network.Threads
-# Number of threads for network queue handling, we recommend a minimum of 3,
-# additional threads will assist with greater numbers of players.
-# Default: 3
-#
-# Network.OutKBuff
-# The size of the output kernel buffer used ( SO_SNDBUF socket option, tcp manual ).
-# Default: -1 (Use system default setting)
-#
-# Network.OutUBuff
-# Userspace buffer for output. This is amount of memory reserved per each connection.
-# Default: 65536
-#
-# Network.TcpNoDelay:
-# TCP Nagle algorithm setting
-# Default: 0 (enable Nagle algorithm, less traffic, more latency)
-# 1 (TCP_NO_DELAY, disable Nagle algorithm, more traffic but less latency)
-#
-# Network.KickOnBadPacket
-# Kick player on bad packet format.
-# Default: 0 - do not kick
-# 1 - kick
-#
-################################################################################
-
-Network.Threads = 3
-Network.OutKBuff = -1
-Network.OutUBuff = 65536
-Network.TcpNodelay = 1
-Network.KickOnBadPacket = 0
-
-################################################################################
-# CONSOLE, REMOTE ACCESS AND SOAP
-#
-# Console.Enable
-# Enable console
-# Default: 1 - on
-# 0 - off
-#
-# Ra.Enable
-# Enable remote console
-# Default: 0 - off
-# 1 - on
-#
-# Ra.IP
-# Default remote console ip address, use 0.0.0.0 for every address
-#
-# Ra.Port
-# Default remote console port
-# Default: 3443
-#
-# Ra.MinLevel
-# Minimum level that's required to login,3 by default
-# Default: 3 (Administrator)
-#
-# Ra.Secure
-# Kick client on wrong pass
-# 0 - off
-# Default: 1 - on
-#
-# Ra.Stricted
-# Not allow execute console level only commands remotly by RA
-# 0 - off
-# Default: 1 - on
-#
-#
-# SOAP.Enable
-# Enable soap service
-# Default: 0 - off
-# 1 - on
-#
-# SOAP.IP
-# Bound SOAP service ip address, use 0.0.0.0 to access from everywhere
-# Default: 127.0.0.1
-#
-# SOAP.Port
-# SOAP port
-# Default: 7878
-#
-################################################################################
-
-Console.Enable = 0
-
-Ra.Enable = 0
-Ra.IP = 0.0.0.0
-Ra.Port = 3443
-Ra.MinLevel = 3
-Ra.Secure = 1
-Ra.Stricted = 1
-
-SOAP.Enabled = 0
-SOAP.IP = 127.0.0.1
-SOAP.Port = 7878
-
-################################################################################
-# CharDelete.Method
-# Character deletion behavior
-# Default: 0 - Completely remove the character from the database
-# 1 - Unlinking, the character gets unlinked from the account,
-# the name gets freed up and appears as deleted ingame
-#
-# CharDelete.MinLevel
-# Character gets deleted by CharDelete.Method=0 when the character
-# hasn't the specified level yet.
-# Default: 0 - For all characters the specified mode will be used
-# 1+ - Only for players which have reached the specified level
-# will be deleted by the specified mode.
-# the rest will be deleted by CharDelete.Method=0
-#
-# CharDelete.KeepDays
-# Define the amount of days for which the characters are kept in the database before
-# they will be removed
-# Default: 30
-# 0 - Don't delete any characters, they stay in the database forever.
-#
-################################################################################
-
-CharDelete.Method = 0
-CharDelete.MinLevel = 0
-CharDelete.KeepDays = 30
-
-###################################################################################################
-# QUEST TRACKER
-# QuestTracker.Enable
-# Description: Store data in the database about quest completion and abandonment to help find bugged quests.
-# Default: 0 - (Disabled)
-# 1 - (Enabled)
-#
-###################################################################################################
-
-QuestTracker.Enable= 0
-
-###################################################################################################
-# WARDEN SETTINGS
-#
-# Warden.WinEnabled
-# Description: Enables Warden checks for Windows clients.
-# Default: 1 - (Enabled)
-# 0 - (Disabled)
-#
-# Warden.OSXEnabled
-# Description: Enables Warden checks for OSX clients.
-# Default: 0 - (Disabled)
-# 1 - (Enabled)
-#
-# Warden.NumMemChecks
-# Description: Number of Warden memory checks that are sent to the client each cycle.
-# Default: 3 - (Enabled)
-# 0 - (Disabled)
-#
-# Warden.NumOtherChecks
-# Description: Number of Warden checks other than memory checks that are added to request
-# each checking cycle.
-# Default: 7 - (Enabled)
-# 0 - (Disabled)
-#
-# Warden.ClientResponseDelay
-# Description: Time (in seconds) before client is getting disconnecting for not responding.
-# Default: 600 - (10 Minutes)
-# 0 - (Disabled, client won't be kicked)
-#
-# Warden.ClientCheckHoldOff
-# Description: Time (in seconds) to wait before sending the next check request to the client.
-# A low number increases traffic and load on client and server side.
-# Default: 30 - (30 Seconds)
-# 0 - (Send check as soon as possible)
-#
-# Warden.ClientCheckFailAction
-# Description: Default action being taken if a client check failed. Actions can be
-# overwritten for each single check via warden_action table in characters
-# database.
-# Default: 1 - (Kick)
-# 0 - (Disabled, Logging only)
-# 2 - (Ban)
-#
-# Warden.BanDuration
-# Description: Time (in seconds) an account will be banned if ClientCheckFailAction is set
-# to ban.
-# Default: 86400 - (24 hours)
-# 0 - (Permanent ban)
-#
-# Warden.DBLogLevel
-# Description: The minimal WardenActions value of Warden check to be logged into realmd.warden_log table.
-# WardenActions: 0 - log, 1 - kick, 2 - ban
-#
-# Deafult: 0 - (Logging any failed check)
-# 3 - (Disable DB logging)
-#
-###################################################################################################
-
-Warden.WinEnabled = 1
-Warden.OSXEnabled = 0
-Warden.NumMemChecks = 3
-Warden.NumOtherChecks = 7
-Warden.ClientResponseDelay = 600
-Warden.ClientCheckHoldOff = 30
-Warden.ClientCheckFailAction = 1
-Warden.BanDuration = 86400
-Warden.DBLogLevel = 0
-
-###################################################################################################################
-# ELUNA SETTINGS
-#
-# Eluna.Enabled
-# Enable Eluna LuaEngine
-# Default: 1 (Enabled)
-# 0 (Disabled)
-#
-# Eluna.TraceBack
-# Description: Sets whether to use debug.traceback function on a lua error or not.
-# Notice that you can redefine the function.
-# Default: false - (use default error output)
-# true - (use debug.traceback function)
-#
-# Eluna.ScriptPath
-# Description: Sets the location of the script folder to load scripts from
-# The path can be relative or absolute.
-# Default: "lua_scripts"
-#
-###################################################################################################################
-
-Eluna.Enabled = 1
-Eluna.TraceBack = false
-Eluna.ScriptPath = "lua_scripts"
diff --git a/ansible/services/mangos-zero/etc/realmd.conf b/ansible/services/mangos-zero/etc/realmd.conf
deleted file mode 100644
index b06cee5..0000000
--- a/ansible/services/mangos-zero/etc/realmd.conf
+++ /dev/null
@@ -1,132 +0,0 @@
-################################################################################
-# Realm list demon configuration #
-################################################################################
-
-[RealmdConf]
-ConfVersion=2021010100
-
-################################################################################
-# REALMD SETTINGS
-#
-# LoginDatabaseInfo
-# Connection settings for the realm/authentication database
-# Default: hostname;port;username;password;database
-# Use named pipes at Windows
-# .;somenumber;username;password;database
-#
-# Use Unix sockets on Unix/Linux
-# .;/path/to/unix_socket;username;password;database
-#
-# LogsDir
-# Directory where log files should be written
-# The given path has to exist, and be writable for the realm list demon
-# Default: "" No log directory prefix, thus log files will be stored in
-# the same path where the realm list demon is running
-#
-# PidFile
-# Realm list demon PID file
-# Default: "" Do not create a PID file.
-#
-# MaxPingTime
-# Settings for maximum database-ping interval (minutes between pings)
-# Default: 30
-#
-# RealmServerPort
-# Port on which the server will listen
-# Default: 3724
-#
-# BindIP
-# Bind realm list demon to IP/hostname
-# DO NOT CHANGE THIS UNLESS YOU _REALLY_ KNOW WHAT YOU'RE DOING
-# Default: "0.0.0.0" Listen on all available addresses
-#
-# LogLevel
-# Server console level of logging
-# 0 = Minimum; 1 = Error; 2 = Detail; 3 = Full/Debug
-# Default: 0
-#
-# LogTime
-# Include time in server console output [hh:mm:ss]
-# Default: 0 (no time)
-# 1 (print time)
-#
-# LogFile
-# Logfile name
-# Default: "Realmd.log"
-# "" - empty name disable creating log file
-#
-# LogTimestamp
-# Logfile with timestamp of server start in name
-# Default: 0 - no timestamp appended
-# 1 - append timestamp in form of _YYYY-MM-DD_HH-MM-SS
-#
-# LogFileLevel
-# Server file level of logging
-# 0 = Minimum; 1 = Error; 2 = Detail; 3 = Full/Debug
-# Default: 0
-#
-# LogColors
-# Color for messages (format "normal_color details_color debug_color error_color)
-# Colors: 0 - BLACK, 1 - RED, 2 - GREEN, 3 - BROWN, 4 - BLUE, 5 - MAGENTA, 6 - CYAN, 7 - GREY,
-# 8 - YELLOW, 9 - LRED, 10 - LGREEN, 11 - LBLUE, 12 - LMAGENTA, 13 - LCYAN, 14 - WHITE
-# Default: "" - none colors
-# "13 7 11 9" - for example :)
-#
-# UseProcessors
-# Used processors mask for multi-processors system (Used only at Windows)
-# Default: 0 (selected by OS)
-# number (bitmask value of selected processors)
-#
-# ProcessPriority
-# Process proirity setting (Used only at Windows)
-# Default: 1 (HIGH)
-# 0 (Normal)
-#
-# WaitAtStartupError
-# After startup error report wait or some time before continue (and possible close console window)
-# -1 (wait until press)
-# Default: 0 (not wait)
-# N (>0, wait N secs)
-#
-# RealmsStateUpdateDelay
-# Realm list Update up delay (updated at realm list request if delay expired).
-# Default: 20
-# 0 (Disabled)
-#
-# WrongPass.MaxCount
-# Number of login attemps with wrong password before the account or IP is banned
-# Default: 3 (Never ban)
-#
-# WrongPass.BanTime
-# Duration of the ban in seconds (0 means permanent ban)
-# Default: 300
-#
-# WrongPass.BanType
-# Ban the IP or account on which login is attempted
-# Default: 0 (Ban IP)
-# 1 (Ban Account)
-#
-################################################################################
-LoginDatabaseInfo = "127.0.0.1;3306;mangos;{{ mangos_db_password }};realmd"
-LogsDir = ""
-PidFile = ""
-
-MaxPingTime = 30
-RealmServerPort = 3724
-BindIP = "0.0.0.0"
-
-LogLevel = 0
-LogTime = 0
-LogFile = "realm-list.log"
-LogTimestamp = 0
-LogFileLevel = 0
-LogColors = "13 7 11 9"
-
-UseProcessors = 0
-ProcessPriority = 1
-WaitAtStartupError = 0
-RealmsStateUpdateDelay = 20
-
-WrongPass.MaxCount = 100
-WrongPass.BanTime = 300
-WrongPass.BanType = 0
diff --git a/ansible/services/minecraft/README.md b/ansible/services/minecraft/README.md
deleted file mode 100644
index 66b4d68..0000000
--- a/ansible/services/minecraft/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Minecraft
-
-PaperMC server.
-
-- **Host:** copenhagen-a
-- **Port:** 25565
-- **Memory:** 3GB
-- **Data:** Docker volume (`minecraft_minecraftserver`)
-- **Java:** OpenJDK 21 (bundled in image)
-- **Note:** copenhagen-a also runs a WoW server (MaNGOS Zero) as system services, not Docker
diff --git a/ansible/services/minecraft/docker-compose.yml b/ansible/services/minecraft/docker-compose.yml
deleted file mode 100644
index 2cd7782..0000000
--- a/ansible/services/minecraft/docker-compose.yml
+++ /dev/null
@@ -1,25 +0,0 @@
----
-# Minecraft - PaperMC server
-# Host: copenhagen-a (100.89.206.60)
-# Data: Docker volume (minecraft_minecraftserver)
-
-services:
- minecraft:
- image: itzg/minecraft-server:latest
- container_name: mcserver
- restart: always
- ports:
- - "25565:25565"
- environment:
- EULA: true
- DIFFICULTY: hard
- MEMORYSIZE: 3G
- VERSION: 1.21.11
- MOTD: Pez Solutions
-
- volumes:
- - minecraft_data:/data
-
-volumes:
- minecraft_data:
- name: minecraft_minecraftserver
diff --git a/ansible/services/smartctl-exporter/docker-compose.yml b/ansible/services/smartctl-exporter/docker-compose.yml
index 2216246..4c0ae21 100644
--- a/ansible/services/smartctl-exporter/docker-compose.yml
+++ b/ansible/services/smartctl-exporter/docker-compose.yml
@@ -1,6 +1,6 @@
---
# smartctl-exporter - SMART disk metrics for Prometheus
-# Hosts: london-b (100.84.65.101), copenhagen-a (100.89.206.60)
+# Hosts: london-b (100.84.65.101)
# Access: http://:9633/metrics
services:
diff --git a/docs/README.md b/docs/README.md
index 0823b2a..168288b 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -21,5 +21,4 @@ Everything you need to understand how this infrastructure works.
| london-b | 100.84.65.101 | London | Storage, media, Docker services |
| london-c | 100.123.72.87 | London | Raspberry Pi, Octopus Energy exporter |
| nuremberg-a | 100.70.180.24 | Hetzner Cloud (Nuremberg) | Mail (poste.io) |
-| copenhagen-a | 100.89.206.60 | Copenhagen | Minecraft, WoW/MaNGOS |
-| copenhagen-c | 100.115.45.53 | Copenhagen | Raspberry Pi, cloudflared, idle |
+| copenhagen-a | 100.91.240.29 | Copenhagen | Proxmox VE hypervisor |
diff --git a/docs/architecture.md b/docs/architecture.md
index 65f3a86..dce7cfb 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -21,12 +21,9 @@ graph TD
TS --> LA["london-a
Proxmox VE hypervisor
(Debian 13)"]
TS --> LC["london-c
Raspberry Pi
Octopus Energy exporter"]
TS --> NA["nuremberg-a
Mail
poste.io"]
- TS --> CA["copenhagen-a
Gaming
Minecraft / WoW (MaNGOS)"]
- TS --> CC["copenhagen-c
Raspberry Pi
cloudflared, idle"]
+ TS --> CA["copenhagen-a
Proxmox VE hypervisor
(Debian 12)"]
TS -.->|Alloy| GC["Grafana Cloud
metrics, logs, traces
synthetic checks"]
-
- style CC stroke-dasharray: 5 5
```
## Traffic Flow
diff --git a/docs/getting-started.md b/docs/getting-started.md
index 510123e..2929575 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -45,8 +45,7 @@ ssh root@helsinki-a # or ssh root@100.67.6.27
ssh root@london-a # Proxmox VE host
ssh root@london-b # storage / media
ssh root@london-c # Raspberry Pi
-ssh root@copenhagen-a
-ssh root@copenhagen-c # Raspberry Pi
+ssh root@copenhagen-a # Proxmox VE host
ssh root@nuremberg-a
```
@@ -139,8 +138,8 @@ ZFS is set up with 3× RAIDZ1 vdevs of 4 drives each (12 drives total) on the `h
## OS Choice
- **Debian (12 or 13)** is the default for new hosts — including the Raspberry Pis. Stable, well-supported by Ansible, predictable.
-- **Ubuntu LTS** is on london-b and copenhagen-a (historical — both came up before the Debian standard).
-- **Proxmox VE** (Debian Bookworm under the hood) on london-a.
+- **Ubuntu LTS** is on london-b (historical — came up before the Debian standard).
+- **Proxmox VE** (Debian Bookworm under the hood) on london-a and copenhagen-a.
- **No more FreeBSD.** london-a used to run FreeBSD for Prometheus/Grafana; that's all on Grafana Cloud now and london-a is Linux/Proxmox.
Alpine has been tried and rejected — the missing GNU binaries / systemd caused enough Ansible headaches to not be worth the size savings.
diff --git a/docs/hosts/copenhagen-a.md b/docs/hosts/copenhagen-a.md
index 2526035..32d225c 100644
--- a/docs/hosts/copenhagen-a.md
+++ b/docs/hosts/copenhagen-a.md
@@ -1,15 +1,15 @@
# copenhagen-a
-Game servers. Located at my dad's place in Copenhagen as an off-site location.
+Proxmox VE hypervisor. Located at my dad's place in Copenhagen as an off-site location — the Copenhagen counterpart to london-a.
## Overview
| | |
|---|---|
| **Location** | Copenhagen |
-| **OS** | Ubuntu 22.04 LTS |
-| **Tailscale IP** | 100.89.206.60 |
-| **Role** | Gaming servers (Minecraft, WoW) |
+| **OS** | Debian 12 (Bookworm) with Proxmox VE |
+| **Tailscale IP** | 100.91.240.29 |
+| **Role** | Hypervisor (Proxmox VE) |
| **Form factor** | Lenovo "tiny" desktop (lunchbox-sized) |
## Hardware
@@ -20,50 +20,42 @@ Game servers. Located at my dad's place in Copenhagen as an off-site location.
| Memory | 16 GB |
| Boot disk | 500 GB |
-Compact Lenovo desktop — powered by a standard ThinkPad charging brick. Small, quiet, and draws minimal power.
+Compact Lenovo desktop — powered by a standard ThinkPad charging brick. Small, quiet, and draws minimal power. Previously ran the gaming servers directly on bare metal; now repaved as a Proxmox VE host.
## Services
-### Minecraft
+| Service | Port | Status | Notes |
+|---------|------|--------|-------|
+| Proxmox VE | 8006 | Active | Web UI — reachable via `copenhagen-a.pez.sh` (Caddy) or Tailscale IP |
+| Tailscale | — | Active | Mesh networking |
+| node_exporter, systemd_exporter, Alloy | — | Active | Observability baseline (Ansible-managed) |
-| | |
-|---|---|
-| Image | `itzg/minecraft-server` |
-| Port | 25565 |
-| Deployment | Docker |
+### Storage
-Not proxied through Caddy — accessed directly via Tailscale or the host's public IP.
+Proxmox is connected to the same CIFS share on **london-b** (`100.84.65.101 /pve`) used by london-a, for ISO/template/backup storage. The mount is configured by the `proxmox_ve` Ansible role.
-### World of Warcraft (MaNGOS Zero)
+| Storage ID | Type | Backing |
+|---|---|---|
+| `local-lvm` | LVM-Thin | Local boot disk |
+| `hdd` | CIFS | london-b `/pve` share |
-WoW 1.12 (Vanilla) private server using the MaNGOS Zero emulator. Runs natively — not in Docker.
+### VMs
-| Service | Port | Managed by |
-|---------|------|-----------|
-| mangos-realmd | 3724 | systemd |
-| mangos-world | 8085 | systemd |
-| MariaDB | 3306 | systemd (apt-managed) |
+No VMs provisioned yet — this is the landing zone for future workloads at the Copenhagen site.
-- Runs as the `mangos` user
-- Install path: `/home/mangos/mangos/zero/`
-- MariaDB hosts the character, world, and auth databases locally
-- Both `mangos-realmd` and `mangos-world` start automatically on boot via systemd
-- The `mariadb` Ansible role manages package + secrets; the `systemd_services` role drops the unit files (`ansible/services/mangos-realmd/`, `ansible/services/mangos-world/`)
+## Ansible
-### Other
+Part of the `proxmox_hosts` group alongside london-a, sharing the `proxmox_ve` role:
-| Service | Port | Deployment | Notes |
-|---------|------|-----------|-------|
-| smartctl_exporter | 9633 | Docker | Disk SMART metrics scraped by Alloy |
-| node_exporter | 9100 | Native | Host metrics |
-| systemd_exporter | — | Native | systemd unit metrics |
-| Alloy | — | Native | Ships everything to Grafana Cloud |
-| Tailscale | — | Native | Mesh networking |
+- Swaps the enterprise apt repo for `pve-no-subscription` so updates work without a paid subscription
+- Patches `proxmoxlib.js` to suppress the subscription nag dialog
+- Restricts the web UI to the `tailscale0` interface via UFW
+- Mounts the london-b CIFS storage
## Networking
-Connected directly to the ISP router's built-in switch. Symmetrical 500 Mbit connection — more than enough for game servers.
+Connected directly to the ISP router's built-in switch. Symmetrical 500 Mbit connection.
-## Notes
+## History
-copenhagen-a has a static public IP, which is needed for game servers that require direct client connections (WoW realm list, Minecraft server list). The reboot playbook (`ansible/playbooks/reboot.yml`) does a netplan pre-flight check before rebooting to make sure the static IP config will come back up cleanly.
+copenhagen-a used to run gaming servers directly on bare metal: a Minecraft server (`itzg/minecraft-server`, Docker) and a WoW 1.12 (Vanilla) MaNGOS Zero private server (native systemd + local MariaDB). Both were decommissioned and the host was repaved as Proxmox VE — the Tailscale identity (and IP) changed as part of the reinstall. The old static public IP used for direct game-client connections (Minecraft server list, WoW realm list) is no longer needed since nothing here accepts direct client connections anymore.
diff --git a/docs/hosts/copenhagen-c.md b/docs/hosts/copenhagen-c.md
deleted file mode 100644
index dbd2d03..0000000
--- a/docs/hosts/copenhagen-c.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# copenhagen-c
-
-Raspberry Pi at the Copenhagen site. General-purpose / off-site utility box.
-
-## Overview
-
-| | |
-|---|---|
-| **Location** | Copenhagen |
-| **OS** | Debian 12 (Bookworm), aarch64 |
-| **Tailscale IP** | 100.115.45.53 |
-| **Role** | Idle / cloudflared tunnel |
-| **Form factor** | Raspberry Pi (ARM64) |
-
-## Services
-
-| Service | Deployment | Notes |
-|---------|-----------|-------|
-| cloudflared | Native (systemd) | Cloudflare-managed tunnel for ad-hoc exposure of services from this site |
-| Tailscale | Native | Mesh networking |
-| Alloy | Native | Ships metrics/logs to Grafana Cloud |
-| node_exporter | Native | Host metrics |
-| Docker / containerd | Native | Available, but no compose services currently scheduled here |
-
-The cloudflared token is stored directly in the systemd unit (`/etc/systemd/system/cloudflared.service`); the tunnel itself is configured in the Cloudflare dashboard.
-
-## Notes
-
-Part of the Copenhagen off-site setup at my dad's place. Otherwise idle — available if I need to spin up something that benefits from a Copenhagen location or just need another always-on box.
diff --git a/docs/monitoring.md b/docs/monitoring.md
index 6ed56e8..ccf8282 100644
--- a/docs/monitoring.md
+++ b/docs/monitoring.md
@@ -38,7 +38,7 @@ The `common` role drops a `10-resilience.conf` systemd override onto every host
|---|---|---|
| node_exporter | All hosts | CPU, memory, disk, network, system uptime |
| systemd_exporter | All hosts | Per-unit systemd state |
-| smartctl_exporter (Docker) | london-b, copenhagen-a | Disk SMART data |
+| smartctl_exporter (Docker) | london-b | Disk SMART data |
| prom-plex-exporter (Docker) | london-b | Plex streaming activity |
| octopus_exporter (Docker) | london-c | Octopus Energy electricity usage |
| Caddy `/metrics` | helsinki-a | HTTP request metrics, upstream health (per host) |
diff --git a/docs/networking.md b/docs/networking.md
index bff55aa..542c8a8 100644
--- a/docs/networking.md
+++ b/docs/networking.md
@@ -13,8 +13,7 @@ All inter-server communication uses Tailscale IPs:
| london-b | 100.84.65.101 |
| london-c | 100.123.72.87 |
| nuremberg-a | 100.70.180.24 |
-| copenhagen-a | 100.89.206.60 |
-| copenhagen-c | 100.115.45.53 |
+| copenhagen-a | 100.91.240.29 |
### What Tailscale is used for
@@ -43,7 +42,7 @@ A stack of servers at my dad's place — acts as an off-site location.
- **Router:** ISP-provided (not my house, can't exactly install a Ubiquiti rack)
- **ISP:** Symmetrical 500 Mbit — plenty for what's running there
-- **Servers:** copenhagen-a (Lenovo tiny desktop) and copenhagen-c (Raspberry Pi) connected directly to the ISP router's built-in switch
+- **Servers:** copenhagen-a (Lenovo tiny desktop, now running Proxmox VE) connected directly to the ISP router's built-in switch
### Helsinki / Nuremberg (Hetzner Cloud)
@@ -95,6 +94,7 @@ All subdomains resolve directly to helsinki-a, where Caddy terminates TLS. Hosts
| signup.pez.solutions | helsinki-a:/srv/pez-signup (static) | — |
| naveen.pez.sh | helsinki-a:/srv/naveen (static) | — |
| london-a.pez.sh | london-a:8006 (Proxmox UI) | Proxmox login |
+| copenhagen-a.pez.sh | copenhagen-a:8006 (Proxmox UI) | Proxmox login |
| jellyfin.pez.sh / .solutions | london-b:8096 | Own auth |
| plex.pez.sh / .solutions | london-b:32400 | Own auth |
| music.pez.sh | london-b:4533 (Navidrome) | Own auth |
@@ -108,7 +108,7 @@ All subdomains resolve directly to helsinki-a, where Caddy terminates TLS. Hosts
| soulseek.pez.sh / .solutions | london-b:5030 (slskd) | Authelia |
| download.pez.sh / .solutions | london-b:9091 (Transmission) | Authelia |
-A few `pez.sh` records bypass Caddy entirely: `mail` points at nuremberg-a, `minecraft` and `wow` point at copenhagen-a's public IP (game clients connect directly), and `public` is a CNAME to a Cloudflare R2 public bucket (`public.r2.dev`).
+A few `pez.sh` records bypass Caddy entirely: `mail` points at nuremberg-a, and `public` is a CNAME to a Cloudflare R2 public bucket (`public.r2.dev`).
### Mail DNS
diff --git a/docs/services.md b/docs/services.md
index 12dfc4c..92cb03b 100644
--- a/docs/services.md
+++ b/docs/services.md
@@ -95,27 +95,15 @@ poste.io bundles everything — postfix, dovecot, rspamd, webmail — into a sin
n8n (workflow automation) binds 5678 to the Tailscale IP only; public access is proxied by Caddy on helsinki-a. It manages its own user auth.
-## copenhagen-a — Gaming
+## copenhagen-a — Proxmox VE Hypervisor
-Game servers. Not publicly exposed via Caddy — accessed directly over the public IP/Tailscale.
+Repurposed gaming PC (previously ran Minecraft and a WoW/MaNGOS private server) at the Copenhagen off-site location, now reinstalled as a Proxmox VE hypervisor — the Copenhagen counterpart to london-a.
| Service | Port | Deployment | Auth | URL |
|---------|------|-----------|------|-----|
-| Minecraft (`itzg/minecraft-server`) | 25565 | Docker | — | (direct connection) |
-| MaNGOS realmd | 3724 | Native (systemd) | — | (direct connection) |
-| MaNGOS world | 8085 | Native (systemd) | — | (direct connection) |
-| MariaDB | 3306 | Native (apt) | — | (local, used by MaNGOS) |
-| smartctl_exporter | 9633 | Docker | — | (scraped by Alloy → Grafana Cloud) |
+| Proxmox VE | 8006 | Native (Debian Bookworm-based PVE) | Proxmox login | copenhagen-a.pez.sh |
-MaNGOS Zero is a WoW 1.12 (Vanilla) private server. Runs natively under systemd as the `mangos` user from `/home/mangos/mangos/zero/`. Not containerised — it predates the Docker setup on this host.
-
-## copenhagen-c — Idle (Raspberry Pi)
-
-Raspberry Pi running Debian 12 at the Copenhagen site. Mostly idle, but runs a cloudflared tunnel for one-off use.
-
-| Service | Port | Deployment | Auth | URL |
-|---------|------|-----------|------|-----|
-| cloudflared | — | Native (systemd) | — | (Cloudflare-managed tunnel) |
+The web UI is exposed via Caddy at `copenhagen-a.pez.sh` but is also reachable directly over Tailscale. Proxmox storage is augmented with the same london-b CIFS share used by london-a (configured by the `proxmox_ve` Ansible role).
## Observability Agents
diff --git a/terraform/grafana/fleet_collectors.tf b/terraform/grafana/fleet_collectors.tf
index 97c07f2..78a415b 100644
--- a/terraform/grafana/fleet_collectors.tf
+++ b/terraform/grafana/fleet_collectors.tf
@@ -19,6 +19,13 @@ resource "grafana_fleet_management_collector" "london_c" {
}
}
+resource "grafana_fleet_management_collector" "copenhagen_a" {
+ id = "copenhagen-a"
+ remote_attributes = {
+ location = "copenhagen"
+ }
+}
+
resource "grafana_fleet_management_collector" "helsinki_a" {
id = "helsinki-a"
remote_attributes = {
diff --git a/terraform/hetzner/dns.tf b/terraform/hetzner/dns.tf
index 5efc880..f014f9a 100644
--- a/terraform/hetzner/dns.tf
+++ b/terraform/hetzner/dns.tf
@@ -7,7 +7,6 @@ locals {
helsinki_a = hcloud_server.helsinki-a.ipv4_address
nuremberg_a = hcloud_server.nuremberg-a.ipv4_address
nuremberg_aaaa = hcloud_server.nuremberg-a.ipv6_address
- copenhagen = "83.94.248.182"
dns_ttl = 300
}
@@ -37,15 +36,6 @@ resource "hcloud_zone_rrset" "nuremberg_mail" {
records = [{ value = each.value }]
}
-resource "hcloud_zone_rrset" "A_copenhagen" {
- for_each = toset(["minecraft", "wow"])
- zone = hcloud_zone.pezsh.name
- name = each.value
- type = "A"
- ttl = local.dns_ttl
- records = [{ value = local.copenhagen }]
-}
-
resource "hcloud_zone_rrset" "CNAME_forms" {
zone = hcloud_zone.pezsh.name
name = "forms"