Esta es una guía de inicio rápido para instalar AzerothCore en un servidor Debian 12 desde tu PC con Windows. Para un tutorial más detallado, consulta la Guía de instalación oficial de AzerothCore.
Usa PuTTY para conectarte a tu servidor Debian usando la dirección IP y las credenciales de acceso proporcionadas por el proveedor de hosting.
Para cada paso, copia el bloque de código completo y pégalo en la terminal de PuTTY con click derecho, luego presiona enter.
read -p "New username: " USERNAME
adduser "$USERNAME"
usermod -aG sudo "$USERNAME"
su - "$USERNAME"
sudo sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl reload ssh
sudo sed -i 's/^#Port 22\+$/Port 55022/' /etc/ssh/sshd_config
sudo systemctl restart sshd
(Recuerda usar 55022 como puerto SSH de ahora en adelante)
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 55022
sudo ufw allow 3724
sudo ufw allow 8085
sudo ufw enable
sudo apt update && sudo apt install git cmake make gcc g++ clang libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev lsb-release gnupg wget p7zip-full nodejs npm fail2ban -y && sudo npm install pm2 -g
# Versión
MYSQL_APT_CONFIG_VERSION=0.8.36-1
# # # # #
mkdir -p ~/mysqlpackages && cd ~/mysqlpackages
# Descargar
wget "https://dev.mysql.com/get/mysql-apt-config_${MYSQL_APT_CONFIG_VERSION}_all.deb"
wget "https://dev.mysql.com/downloads/gpg/?file=mysql-apt-config_${MYSQL_APT_CONFIG_VERSION}_all.deb&p=37" -O mysql-apt-config_${MYSQL_APT_CONFIG_VERSION}_all.deb.asc
# Verificar
gpg --keyserver keyserver.ubuntu.com --recv-keys A8D3785C
gpg --verify mysql-apt-config_${MYSQL_APT_CONFIG_VERSION}_all.deb.asc mysql-apt-config_${MYSQL_APT_CONFIG_VERSION}_all.deb
# Instalar
sudo DEBIAN_FRONTEND="noninteractive" dpkg -i ./mysql-apt-config_${MYSQL_APT_CONFIG_VERSION}_all.deb
sudo apt update
sudo DEBIAN_FRONTEND="noninteractive" apt install -y mysql-server libmysqlclient-dev
# Limpieza
rm -v mysql-apt-config_${MYSQL_APT_CONFIG_VERSION}_all* && unset MYSQL_APT_CONFIG_VERSION
sudo mysql <<'EOF'
DROP USER IF EXISTS 'acore'@'localhost';
CREATE USER 'acore'@'localhost' IDENTIFIED BY 'acore' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
CREATE DATABASE IF NOT EXISTS `acore_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS `acore_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS `acore_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON `acore_world`.* TO 'acore'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `acore_characters`.* TO 'acore'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `acore_auth`.* TO 'acore'@'localhost' WITH GRANT OPTION;
EOF
Este es un paso opcional que consiste en crear un archivo de clave y deshabilitar los inicios de sesión SSH basados en contraseña para aumentar la seguridad del servidor Debian y de la base de datos SQL.
ssh-keygen -t ed25519 -C "Debian12"
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
home/USERNAME/ssh/id_ed25519 a tu PC y cárgalo en puttygen.exe (ubicado en la carpeta de PuTTY).ppk. Guarda este archivo en un lugar seguro y haz un backup.
sudo sed -i -E 's/#?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo rm /etc/ssh/sshd_config.d/*
sudo service ssh restart
git -C ~/ clone https://github.com/azerothcore/azerothcore-wotlk.git --branch master --single-branch azerothcore
git -C ~/azerothcore/modules clone https://github.com/azerothcore/mod-anticheat
rm -rf ~/server/data &&
mkdir -p ~/server/data && cd ~/server/data &&
wget https://github.com/wowgaming/client-data/releases/download/v19/data.zip &&
7z x data.zip && rm data.zip
mkdir -p ~/azerothcore/build && cd ~/azerothcore/build
cmake ../ -DCMAKE_INSTALL_PREFIX=$HOME/server/ -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DWITH_WARNINGS=1 -DTOOLS_BUILD=db-only -DSCRIPTS=static -DMODULES=static
make -j $(nproc) install
# Copiar .dist
cp -n ~/server/etc/authserver.conf.dist ~/server/etc/authserver.conf
cp -n ~/server/etc/worldserver.conf.dist ~/server/etc/worldserver.conf
cp -n ~/server/etc/modules/Anticheat.conf.dist ~/server/etc/modules/Anticheat.conf
# Directorio de datos
sudo sed -i -E "s|^DataDir = .*|DataDir = \"/home/$USER/server/data\"|" ~/server/etc/worldserver.conf
# Directorio de logs
sudo sed -i -E "s|^LogsDir = .*|LogsDir = \"/home/$USER/server/logs\"|" ~/server/etc/*.conf
mkdir -p ~/server/logs
pm2 start $HOME/server/bin/authserver --name authserver -- -c $HOME/server/etc/authserver.conf
pm2 start $HOME/server/bin/worldserver --name worldserver -- -c $HOME/server/etc/worldserver.conf
eval "$(pm2 startup | grep sudo)"
pm2 save
pm2 attach $(pm2 id worldserver | tr -d '[][:space:]')
account create USERNAME PASSWORD
account set gmlevel USERNAME 3 -1
sudo mysql <<'EOF'
UPDATE `acore_auth`.`realmlist` SET `address` = 'x.x.x.x' WHERE `id` = 1;
EOF
set realmlist 12.345.67.890# Pedir la nueva contraseña
while true; do read -s -p "Set a new SQL password: " MYSQL_PASSWORD && echo; read -s -p "Retype SQL password: " MYSQL_PASSWORD_CONFIRM && echo; [ "$MYSQL_PASSWORD" = "$MYSQL_PASSWORD_CONFIRM" ] && break || echo "Passwords did not match."; done; unset MYSQL_PASSWORD_CONFIRM
# Actualizar el usuario SQL
sudo mysql <<EOF
ALTER USER 'acore'@'localhost' IDENTIFIED BY '${MYSQL_PASSWORD}';
FLUSH PRIVILEGES;
EOF
# Actualizar las configuraciones
sudo sed -i -E "s|= \"127.0.0.1;3306;acore;[^;]*;|= \"127.0.0.1;3306;acore;${MYSQL_PASSWORD};|" ~/server/etc/*.conf
# Limpieza
unset MYSQL_PASSWORD
#!/bin/bash
# Auxiliar: reiniciar y actualizar configuraciones
update_config() {
local config_file="$1"
declare -n settings="$2"
cp -f "${config_file}.dist" "$config_file"
for key in "${!settings[@]}"; do
sudo sed -i -E "s|^($key\s*=\s*).*|\1${settings[$key]}|" "$config_file"
done
}
# Authserver.conf
declare -A auth_settings=(
["LogsDir"]="\"$HOME/server/logs\""
)
# Worldserver.conf
declare -A world_settings=(
["DataDir"]="\"$HOME/server/data\""
["LogsDir"]="\"$HOME/server/logs\""
["StartPlayerLevel"]="1"
)
# Anticheat.conf
declare -A anticheat_settings=(
["LogsDir"]="\"$HOME/server/logs\""
)
#### Añade tus módulos aquí ####
# Aplicar los cambios
update_config "$HOME/server/etc/authserver.conf" auth_settings
update_config "$HOME/server/etc/worldserver.conf" world_settings
update_config "$HOME/server/etc/modules/Anticheat.conf" anticheat_settings
#### Añade tus módulos aquí ####
cat <<'EOF' >> ~/.bash_aliases
alias acoreupdate='
WORLD_ID="$(pm2 id worldserver | tr -d "[][:space:]")"
CORE_UPDATED=0
# Auxiliar: comprobar actualizaciones
update_repo() {
local REPO_PATH="$1"
git -C "$REPO_PATH" fetch origin
LOCAL_HASH=$(git -C "$REPO_PATH" rev-parse HEAD)
REMOTE_HASH=$(git -C "$REPO_PATH" rev-parse "@{upstream}")
if [ "$LOCAL_HASH" != "$REMOTE_HASH" ]; then
git -C "$REPO_PATH" pull
CORE_UPDATED=1
fi
}
# Auxiliar: compilar y reiniciar
update_core() {
cd "$HOME/azerothcore/build" &&
cmake ../ -DCMAKE_INSTALL_PREFIX="$HOME/server/" -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DWITH_WARNINGS=1 -DTOOLS_BUILD=db-only -DSCRIPTS=static -DMODULES=static &&
make -j "$(nproc)" install &&
pm2 send "$WORLD_ID" "saveall" &&
pm2 send "$WORLD_ID" "server restart 10" &&
echo "Restarting worldserver in 10 seconds..." &&
sleep 12 &&
pm2 restart "$WORLD_ID" &&
pm2 attach "$WORLD_ID"
}
# Comprobar actualizaciones
update_repo "$HOME/azerothcore"
update_repo "$HOME/azerothcore/modules/mod-anticheat"
##### Añade tus módulos aquí #####
# Compilar y reiniciar
if [ "$CORE_UPDATED" -eq 1 ]; then update_core; else echo "AzerothCore is up-to-date."; fi
'
EOF
source ~/.bash_aliases
acoreupdate
pm2 stop e inícialo con pm2 start --no-autorestart para obtener un log de error completo.