Skip to content
Draft
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
5faa58a
Update database-installation.md
TheSCREWEDSoftware Aug 15, 2025
a178ba4
Update database-installation.md
TheSCREWEDSoftware Aug 15, 2025
095c99c
Update networking.md
TheSCREWEDSoftware Aug 15, 2025
dafcdb0
Update database-installation.md
TheSCREWEDSoftware Aug 15, 2025
4518ca4
Update final-server-steps.md
TheSCREWEDSoftware Aug 15, 2025
f8296cb
Update final-server-steps.md
TheSCREWEDSoftware Aug 15, 2025
3dfeab7
Update database-installation.md
TheSCREWEDSoftware Aug 15, 2025
b94132e
Update windows-server-setup.md
TheSCREWEDSoftware Aug 15, 2025
3af6a4e
Clarify .reload command usage in config changes
TheSCREWEDSoftware Oct 4, 2025
d898c33
Update docs/networking.md
TheSCREWEDSoftware Oct 4, 2025
b874f71
Update final-server-steps.md
TheSCREWEDSoftware Oct 4, 2025
54b80dc
Updated module
TheSCREWEDSoftware Oct 11, 2025
57efb71
Update final-server-steps.md
TheSCREWEDSoftware Oct 11, 2025
6da3803
Update final-server-steps.md
TheSCREWEDSoftware Oct 11, 2025
827aa11
Corrected extractors names to match real names and added yaml require…
TheSCREWEDSoftware Oct 22, 2025
c068256
Update windows-server-setup.md
TheSCREWEDSoftware Oct 22, 2025
b23cb32
Updated linux to have the YAML note and the correct path for it
TheSCREWEDSoftware Oct 22, 2025
db321a5
Same for macos
TheSCREWEDSoftware Oct 22, 2025
c792dc9
mmaps config info
TheSCREWEDSoftware Oct 22, 2025
c78b84a
before i leave
TheSCREWEDSoftware Oct 22, 2025
8998369
Added a possible
TheSCREWEDSoftware Oct 22, 2025
91693d3
Added warning for username usage on login not email
TheSCREWEDSoftware Mar 11, 2026
1e1a216
Merge branch 'database_networking' of https://github.com/TheSCREWEDSo…
TheSCREWEDSoftware Mar 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 41 additions & 14 deletions docs/database-installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,64 @@

## Creating the Database in MySQL

### Creating the Databases and User
You will download or copy the contents of [create_mysql.sql](https://github.com/azerothcore/azerothcore-wotlk/blob/master/data/sql/create/create_mysql.sql).

First of all, you need to create the acore user. You need to run the script below within a MySQL client or with the MySQL command-line interface (CLI).
You need to run the script as the **root** user of MySQL within a MySQL client or the MySQL cli.
Using the created super-user (by default is `root`) you will open any of database client refered in the requirements page (HeidiSQL, MySQL command-line interface [CLI], etc... or others your choice).

https://github.com/azerothcore/azerothcore-wotlk/blob/master/data/sql/create/create_mysql.sql
Now you will either drag/run or copy-paste the content of the file [create_mysql.sql](https://github.com/azerothcore/azerothcore-wotlk/blob/master/data/sql/create/create_mysql.sql).

{% include important.html content="Use the MySQL root user ONLY to run the script above, never run the core as root or administrator!" %}
### HeidiSQL (most popular for newer users of MySQL).
- Into your `Query` tab and press the blue "play" button or pressing `F9` (by default) to run the query.

{% include tip.html content="You can change the password of the user you are creating for increased security." %}

## Populating the database
### MySQL CLI (most popular for linux users.)
- In your terminal of choice (example given for `CMD` of Windows, which is recommended to be ran as `Administrator`)
`mysql -u YourSuperUsername -h 127.0.0.1 -p < "YourPath/create_mysql.sql"`

If you want to know how the SQL directory works or plan to have custom changes we recommend you read [this](sql-directory).
(This will prompt your password after being executed, in the safe side make sure the path is between "" and using / in the case is giving you `Access is denied` or `The system cannont find the file specified` check your path and file.extension in the case you do have the permissions or that you've executed as `Administrator`)

#### Automatic Database Updater

The Auth- and Worldserver checks and applies all needed database files at startup.
{% include important.html content="The file above file is a Query or SQL file, is not a SQL script, for the case of DBeaver users that may get that confusion." %}

To edit the automatic database updater you will find the necessary settings in authserver.conf and worldserver.conf under **UPDATE SETTINGS**.
{% include tip.html content="You can change the password of the user you are creating, and you should for increased security, refering to the acore user, you can do this either in the query file, execution or after in your Database client of choice." %}

1. Start Authserver.exe, in the Build folder you created, under \bin\RelWithDebInfo or \bin\Debug folder.
2. Start Worldserver.exe, in the same location.
In the case you want you to use different information to connected to their respective database related to your `authserver` and `wolrdserver`.

If you get the following message in your console press enter to create and populate the databases.
They follow this structure:
`Variablename = "MySQLIP;Port;Username;Password;database"`
The values below are the default, but you're free to change them, if you need or want, we don't recommend if you dont know what you're doing.

```
LoginDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_auth" worldserver.conf / authserver.conf
WorldDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_world" worldserver.conf
CharacterDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_characters" worldserver.conf
```


## Populating the database

### Automatic Database Updater (Recommended, specially for newer users.)

The `authserver` and `worldserver` checks and applies all needed database files at startup.

To edit the automatic database updater you can find it in `authserver.conf` and `worldserver.conf` under **AUTOUPDATER** OR **UPDATE SETTINGS**.

1. Start `authserver`, in the `Build` folder you created, under `\bin\RelWithDebInfo` (for Windows) or `env/dist/bin` (for Linux).
2. Start `worldserver` in the same location.

If you get the following message in your console press ENTER to create and populate the databases (for: `acore_auth`, `acore_characters` or `acore_world`).

Example:
```
Database "acore_auth" does not exist
Do you want to create it? [yes (default) / no]:
```

If you want to know how the SQL directory works or plan to have custom changes we recommend you read [this](sql-directory), for manual or automatic execution.

{% include tip.html content="If you wish ever to start any of the databases from scratch, you always drop their databases and let them re-create and re-populate, keep in mind if you drop a database you WILL LOOSE everything in it, highly recommend if you have any custom changes SQL or Modules changes, backup your database before executing the queries and/or adding the modules, any SQL changes you should save the queries outside of the database in the case you wish to use them again in the future." %}


<br>

## Help
Expand Down
36 changes: 26 additions & 10 deletions docs/final-server-steps.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,48 @@

## Starting the server

- Run authserver and worldserver in your build folder.
1. Start `authserver`, in the `Build` folder you created, under `\bin\RelWithDebInfo` (for Windows) or `env/dist/bin` (for Linux).
2. Start `worldserver` in the same location.

For detailed information on how to configure a restarter and a debugger go to [how-to-restart-and-debug](how-to-restart-and-debug) page
For detailed information on how to configure a restarter and a debugger go to [how-to-restart-and-debug](how-to-restart-and-debug) page (For linux environments).


## Creating an Account

Read [creating accounts](creating-accounts).

{% include warning.html content="NEVER create an account directly into your database unless you are ABSOLUTELY SURE that you know what to do and how to do it!" %}

- Next, create your Login Account by typing directly into the **worldserver** window the GM Command **account create**. Syntax: (see examples below)
- Inside of the World of Warcraft Folder (`3.3.5` not `3.4.x` "modern" version), you will see a `Data` folder and a locale folder inside of `Data` example `enUS` or `enGB`, inside of that folder **should exist** a `realmlist.wtf` (in the case it doesn't exist, create it).

- If you wish to set the account as a GM then type into the worldserver window: **account set gmlevel $account #level #realmid** where **$account** is the account name to change, **#level** can be 0-4 and **#realmid** is the realm ID. Setting a **#level** of "3" is GM account level (higher numbers = more access), and the "-1" is the realm ID that stands for "all realms".
{% include tip.html content="In the case you created realmlist.wtf file and doesn't work, make sure you've -Hide extensions for known file types- unchecked in your windows folder options." %}

{% include tip.html content="Open your <b>acore_world</b> database and find the <b>command</b> table. This shows a full list of GM Commands, descriptions, and security levels.<br/>This will always be the most up-to-date list you can find, assuming you keep your DB and Core updated." %}
- Open `realmlist.wtf` and `set realmlist 127.0.0.1` (or you can change the IP or use a DNS).

- Minimize your servers and run **WoW** (never run WoW using the Launcher unless you edited the realmlist.wtf's patchlist option above).
- Open your `wow.exe` not any launcher of any sort.

- Log in using the user/pass you just created.
- Login into your account by using your `username` and `password` the e-mail functionality doesn't work (as a login into client) for AzerothCore.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

email part is not needed.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's good to keep there, many users have tried logging in with their email

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to add to this, the account creation process doesn't ask for an email, so this is strictly a private server player thing


- The AzerothCore realm should be selectable. Log in, create a character, and you're all done!

## Creating an Account
{% include tip.html content="In the case you're connecting to the server in the same machine as the client, and the realm gets stuck (as you can't do anything after logging in) trying pressing ENTER in the worldserver.exe (this for windows issue), we recommend disabling Windows Terminal -QuickEdit Mode- which tends to hang the CLI applications for Windows 10 and foward." %}


If you want to see the `GM Commands` in your server, you can check your `acore_world` database and find the `command` table. This shows a full list of GM Commands, descriptions, and security levels.<br/>This will always be the most up-to-date list you can find, assuming you keep your DB and Core updated.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dont know why we dont keep the tip above?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean?


You also may also refer to the wiki [GM Commands](gm-commands).

Highely recommend also if you want to have a similiar expeirence of wowhead [wowgaming](https://wowgaming.github.io/) provides us with an similiar but focused on Azerothcore, wowgaming's [aowow](https://wowgaming.altervista.org/aowow/) version.

This similiar version of wowhead, doesn't update with your changes, they use their own `Data` they provided previously in the server setup steps and they keep their website updated every week based on azerothcore's updates to the core.
Comment on lines +39 to +45

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this has nothing to do with server setup.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's an additional inofrmation on the final steps of the server, would you find any good place to have these? Both the GM commands and aowow are good pages / tools to have at hand related to the core


Read [creating accounts](creating-accounts).

## Setting up Remote Access
For development purposes, this step is not necessary. However, for increased security when you want other people to make accounts you should set up a registration form, so you don't have to paste their passwords. Check out [Remote Access](remote-access) on how to send commands into the server.

<br>
Also refer to [account](account) which provides some `php` examples how do Calculate, Get and Verify `SRP6` protocol, in the addition of trying to make a way to create or access account information related to Azerothcore.

In addition to it we provide a [catologue](https://www.azerothcore.org/catalogue.html) mainly focused in modules created by the community, but you may find others like a Registration page.
Comment thread
TheSCREWEDSoftware marked this conversation as resolved.

## Help

Expand Down
84 changes: 58 additions & 26 deletions docs/networking.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,45 +7,77 @@

This guide is intended for advanced setups or just to provide more details in setting up your realm for local or internet use. In general, the default setup explained in your particular OS-specific guide should be fine for simple setups.

## Worldserver and Authserver configurations
## Authserver and Worldserver configurations

For almost all basic setup scenarios the default localhost (127.0.0.1) IP settings should be left alone. The default bindip (0.0.0.0) should be left alone as well.
For the majority of the cases the default configuration values for `LoginDatabaseInfo`, `CharacterDatabaseInfo` and `WorldDatabaseInfo` should be left alone as `127.0.0.1` (also known as `localhost`, the current machine hosting/running the `authserver` and `worldserver`), the same goes for `BindIP` should be left alone as well as `0.0.0.0`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is unnecessarily wordy.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this be better?

By default, keep LoginDatabaseInfo, CharacterDatabaseInfo, and WorldDatabaseInfo as 127.0.0.1 (localhost). Leave BindIP as 0.0.0.0.


### Setting the auth database realmlist for internet connections
If you need to connect to your database from one external machine, read [this](https://www.enovision.net/mysql-ssh-tunnel-heidisql) instead open ports to the MySQL server.
Comment thread
TheSCREWEDSoftware marked this conversation as resolved.
Outdated

This is where you have to use your internet IP so clients from the internet can find your server. You have to have the ports 3724 (authserver) and 8085 (worldserver) forwarded or open from your router/firewall. Using TCP protocol.
### Port Forwarding (Incoming / Inbound)

**Realmlist Table**
| DST Port | Protocol | Destination | Comment |
| -------- | -------- | ----------- | ----------- |
| 3724 | TCP | any | authserver |
| 8085 | TCP | any | worldserver |

You need to make sure that your **authserver** application directs incoming connections to your realm.
This are the ports used by the `authserver` and `worldserver` which you will be required to port foward / open the ports in your router and/or firewall to allow external connections to your server.
Comment on lines 17 to +23

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As default yes, but they can be changed. I would rather refer to the config file.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We haven't to my knowledge every had the file at least visually show the table for the ports.


- Run your chosen database management tool (ex. SQLYog or HeidiSQL) or with the MySQL command-line interface (CLI).
How to [port foward](https://portforward.com), this is for majority of routers, not all.

- If you need to connect to your database from one external machine, read https://www.enovision.net/mysql-ssh-tunnel-heidisql instead open ports to the MySQL server.
You need to make sure that your **authserver** application directs incoming connections to your server, normally is windows issue under the `UAC` (User Account Control), which will prompt after being executed once, normally.

- Open the **acore_auth** database and find the **realmlist** table. You need to edit the **address field** according to your needs:
{% include warning.html content="NEVER open your MYSQL Ports (normally 8085) unless you are ABSOLUTELY SURE that you know what to do, no one but the machine hosting the service should have access to it." %}

- LAN IP (192.168.x.x) - If you are installing AzerothCore on a different computer from where you run WoW, but all the computers involved are on the same network (router) use that computer's Local Area Network IP.

- 127.0.0.1 - Also known as "localhost". Leave this setting alone here and in your configs, if you've installed AzerothCore on the same computer you run WoW on, and only you are connecting to it.
### Realmlist

- Public IP address – If you want other people to connect to your server, use your external IP. Visit http://www.whatismyip.com/ to find your external IP address.
- If you're hosting it from a home network you'll likely need to set up the proper port forwards, which isn't covered within the scope of this guide. https://portforward.com has guides for most routers, and your Internet Service Provider should be able to assist with this.

- Fully qualified domain name - (mydomain.com or warcraft.mydomain.com) Similar to an external IP address, this would be used if you want other people to connect to your server with the added benefit of not needing to track a potentially dynamic IP address.
- Similar to the Public IP address, it's likely that you'll need to set up port forwards if you're hosting from a home network.
- Additionally, you'll need to configure DNS to point to the server's public IP address. Setting up DNS is out of the scope of this guide, though your domain registrar or dynamic DNS provider should have this documentation available.
Open the `acore_auth` database and find the `realmlist` table.

{% include note.html content="If you are using HeidiSQL, make sure you are in the Data tab when you edit values." %}
`acore_auth.realmlist`
| id | name | address | localAddress | localSubnetMask | port |
| ---: | --- | --- | --- | --- | ---: |
| 1 | AzerothCore | 127.0.0.1| 127.0.0.1| 255.255.255.0 | 8085 |

- MySQL CLI Commands (This step is not needed if you used a MySQL Manager like HeidiSQL)
- `$ sudo mysql`
- You should see a prompt change to mysql>
- `use acore_auth`;
- **Replace your IP with the one you've chosen to use from above**
- `UPDATE realmlist SET address = '[your_ip]' WHERE id = 1;`
- exit
<br>
The table above is snippet how `realmlist` under `acore_auth` database looks.

- `id` - Is a primary key (unique number per row), auto-incrementing (increases automatically when a new entry).
- `name` - Is a unique key (unique column name), this refers to `Realm` name that appears in-game and `authserver`.
- `address` - Referes to the machine hosting's [Public IP](http://www.whatismyip.com/), which is the IP people use to connect to your server (outside / externally of your network), for some cases is the **DNS** ("domain name").
- `localAddress` - Referes to the machine hosting's **Local** / **LAN IP**, which is the IP you and other people use to connect to your server (within / inside of your network), for some cases where you're using **DNS** as your `address` field, you may use the machine hosting's [Public IP](http://www.whatismyip.com/) in `localAddress` field.
- `localSubnetMask` - This only should be changed by people who know what they are doing, beginners shoudln't have to care about the correct usage SubnetMask for their IP category, so leave as it is.
- `port` - This refers to `mysql` service port being used, by default is `8085` which is the default one in `mysql` also.

If you leave the default values of `127.0.0.1` only the client in the same machine as that's hosting the server will be able to connect, for this cases where you wish to join from another computer in the same network make sure you change `localAddress` to match the **Local IP** of the machine that's hosting the server.

Same applies for `address` but machine as that's hosting the server's [Public IP](http://www.whatismyip.com/) which is can be used to connect from a computer outside of the network, some routers have `hairpinning` which allow you to use machine's [Public IP](http://www.whatismyip.com/) to connect within the same network.

`DNS` technical:
- Fully qualified domain name - (mydomain.com or warcraft.mydomain.com) Similar to an external IP address, this would be used if you want other people to connect to your server with the added benefit of not needing to track a potentially dynamic IP address.
- Similar to the Public IP address, it's likely that you'll need to set up port forwards if you're hosting from a home network.
- Additionally, you'll need to configure DNS to point to the server's public IP address. Setting up DNS is out of the scope of this guide, though your domain registrar or dynamic DNS provider should have this documentation available.


Using any of database client refered in the requirements page (HeidiSQL, MySQL command-line interface [CLI], etc... or others your choice) you may change any of column's values by a simple SQL query.

### HeidiSQL (most popular for newer users of MySQL).
- Click once in `acore_auth` within that database click once in `realmlist` and in the `Query` tab run the query below.

Alternative you may use the UI by going to `Data` (not `Table: realmlist`) tab and change the values manually (by double clicking in them).

### MySQL CLI (most popular for linux users.)
- In your terminal of choice (example given for `CMD` of Windows, which is recommended to be ran as `Administrator`)

`mysql -u acore -p -h 127.0.0.1 acore_auth`

(This will prompt your password after being executed)

Example:

```
UPDATE `realmlist` SET `address` = "21.0.1.59", `localAddress` = "192.168.1.50" WHERE `id` = 1;
```

This will change the [Public IP](http://www.whatismyip.com/) to `21.0.1.59` and the **Local IP** to `192.168.1.50` where the `Realm ID` is `1` (by default is `AzerothCore`).
Comment on lines +36 to +80

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just refer to the table's page instead. We dont need to duplicate the information.

Also a step by step guide with different softwares is too much in my opinion. But that's just personal opinion

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoding users, specially new ones to change to a new page showing all the information that makes no sense to them (the specific table page), is the reason why selected fields are mentioned.

I wanted to provide both a CLI and GUI form for the user, at least for GUID Heidi's case, the amount of times people change the information on the wrong place (the table's strucutre not the data structure)


## Help

Expand Down
Loading