Choice of Environment
As for which specific environment to use for deployment, it depends on your own choice; you can use Windows or Linux. Since my home server is running PVE virtual machine 7.4 (based on Debian 11), I will use the latest Debian 12 to set it up.
Since the latest version of TC 3.3.5 is currently 24011, I will use this version:
https://github.com/TrinityCore/TrinityCore/releases/tag/TDB335.24011

Preparation: Before the formal installation, make sure you have completed the system initialization, including the installation of the Debian 12 system (virtual machine, physical machine, or LXC are all fine; I am currently using LXC), related configuration of root user privileges (depending on personal habits, including allowing root username login, installing and allowing SSH password login, etc.; of course, key-based login is more secure), IP address configuration, replacement of apt sources with domestic mirrors, etc.
Start Setting Up
Assuming the above steps have been completed, let's formally enter the setup steps:
Install compilation tools, related libraries, and MySQL database
# routine, update data sources-get update-get install git clang cmake make gcc g++
update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100
update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100
#boostdependencies, as follows
apt-get install -y libboost-dev \-system-dev \-filesystem-dev \-program-options-dev \-iostreams-dev
# zlibin zlib1g-dev
apt-get install zlib1g-dev
# openssl
apt-get install libssl-dev
# readline
apt-get install libreadline-dev-dev-common libmariadb-dev-compat libmariadb-dev-client mariadb-server
Note 1: For different versions of Debian or Ubuntu, the above commands may not be exactly the same. The system I installed at that time was the newly released Debian 12. If you use a different version later, the default libraries may vary, so you might need to make minor adjustments based on your actual environment.
Note 2: Another issue is whether the device deploying TC is always kept on. This is because a later issue involves the account registration website needing to write to the database. If the machine where the database is installed is shut down, the registration website cannot be used during shutdown. This was also a problem I encountered, which forced me to first migrate the database to a virtual machine, and then to another device dedicated to running containers. Exporting and importing data back and forth was a real pain. If you plan to set up an account registration website in the future, you should plan from the very beginning to find a dedicated device that runs 24/7 to host the database. Of course, if it is a cloud server, there is no such problem. Using my own home server is a bit of a hassle because of noise, power consumption, etc., requiring scheduled power-ons and power-offs.
Create wow user
Operate using the root account
adduser wow
Agreed Directories
# 以wow权限执行
su wow
cd
su wow
# TrinityCore源码目录
mkdir /home/wow/TrinityCore
# 服务器程序目录,最终完成后会包含etc,bin,data三个子目录
mkdir /home/wow/server3.3.5
# 客户端目录。后面用于存放客户端版本,提取客户端数据
mkdir /home/wow/client12340
To facilitate subsequent operations, prioritize creating the following 3 directories https://blog.csdn.net/fanrongwoaini/article/details/113864338 # TrinityCore source directory
Server-side source code download:

If GitHub is inaccessible, you can also download it from the following link:Invincible File Sharingmkdir /home/wow/TrinityCore”blog.tangwudi.com“# Server program directory, which will eventually contain three subdirectories: etc, bin, and datamkdir /home/wow/server3.3.5# Client directory. Used later to store the client version and extract client data
cd /home/wow/TrinityCore
wget https://github.com/TrinityCore/TrinityCore/archive/refs/tags/TDB335.24011.zip
#解压
unzip TDB335.24011.zip
Note: Because at the very beginning I referred to the article by CSDN blogger "开始沸腾了" (
Client-side download
, thanks to him for his great article), and only when I finished writing the article did I realize he had made a typo... But the screenshots were already taken and couldn't be changed (I only re-took a few screenshots in the middle, but most of them used old screenshots from the previous version)~ I am someone who pays great attention to naming conventions and strictly requires them of others in projects, so this issue made me very uncomfortable (although it actually has no impact, my OCD really suffered)... It really is: "a single slip can cause lasting sorrow." In short, just don't mind this error in the screenshots... I have changed all the commands to 3.3.5.
, access password is: "
https://pan.baidu.com/s/1O0cAfuWe6B4S1faNhK04UA?pwd=6ah9
cmake
su wow
cd /home/wow/TrinityCore/TrinityCore-TDB335.24011
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/home/wow/server3.3.5 #构建项目

/home/wow/TrinityCore
vim /home/wow/TrinityCore/TrinityCore-TDB335.24011/cmake/genrev.cmake
cd /home/wow/TrinityCore

wget https://github.com/TrinityCore/TrinityCore/archive/refs/tags/TDB335.24011.zip

Then save and exit.
Then the following error occurred again:

This is because the ”boost_locale” package is missing, so we need to install this package. First, check which packages contain boost-locale:
apt search boost-locale
The following results are displayed:

Then we install the missing packages:
sudo apt-get install libboost-dev
sudo apt install libboost-locale1.74-dev #这里可能大家要根据自己当时的版本做微调
sudo apt install libboost-locale1.74-dev # Here, you may need to make minor adjustments based on your version at the time
cd /home/wow/TrinityCore/TrinityCore-TDB335.24011/build
cmake ../ -DCMAKE_INSTALL_PREFIX=/home/wow/server3.3.5
Success:

Compile
make -j $(nproc) install
cd /home/wow/TrinityCore/TrinityCore-TDB335.24011/build

ls /home/wow/server3.3.5

After successful compilation:

ls /home/wow/server3.3.5

In these 2 directories, under bin are the executable files, and under etc are the configuration files.
Map data loading
Create data directory
Used to store map data
mkdir /home/wow/server3.3.5/data
Modify configuration files
把Under etc are 2 configuration file templates, which are required by the two programs mentioned above and will be used later.和mkdir /home/wow/server3.3.5/dataworldserver.conf.dist
cp /home/wow/server3.3.5/etc/worldserver.conf.dist /home/wow/server3.3.5/etc/worldserver.conf
cp /home/wow/server3.3.5/etc/authserver.conf.dist /home/wow/server3.3.5/etc/authserver.conf
Copy each of them, and then remove the suffix **.dist**
Extract map data from client
cp /home/wow/server3.3.5/etc/worldserver.conf.dist /home/wow/server3.3.5/etc/worldserver.conf
cd /home/wow/client12340/wow-3.5.5
Note: There are many game options in TC's worldserver.conf. I will write a dedicated article to introduce them when I have time. Before that, you can search online first; there are a ton of articles dedicated to introducing them.
cd /home/wow/client12340/wow-3.5.5

Copy the downloaded client to the agreed client directory /home/wow/client12340 above, and enter the directory
- cd /home/wow/client12340/wow-3.5.5
/home/wow/server3.3.5/bin/mapextractor


cp -r dbc maps /home/wow/server3.3.5/data
- DBC and Maps files
/home/wow/server3.3.5/bin/vmap4extractor

mkdir vmaps
/home/wow/server3.3.5/bin/vmap4assembler Buildings vmaps

cp -r vmaps /home/wow/server3.3.5/data
- /home/wow/server3.3.5/bin/vmap4extractor
mkdir mmaps
/home/wow/server3.3.5/bin/mmaps_generator

cp -r mmaps /home/wow/server3.3.5/data
cd /home/wow/server3.3.5/data
ls

Database Configuration
cd /home/wow/TrinityCore/TrinityCore-TDB335.24011/sql/create/

mkdir mmaps
mysql -u root -p -h 127.0.0.1 #如果非默认的3306,就用-P参数后加端口
cp -r mmaps /home/wow/server3.3.5/data

show databases;
ls

cd /home/wow/TrinityCore/TrinityCore-TDB335.24011/sql/create/
The files in this red box are the ones we will use.
source /home/wow/TrinityCore/TrinityCore-TDB335.24011/sql/create/create_mysql.sql

show databases;

mysql -u root -p -h 127.0.0.1 # If it is not the default 3306, use the -P parameter followed by the port
Note: If both the mariadb database and Trinitycore are on the same machine, connect using 127.0.0.1. However, if the database is separated, like in my case where I use a separate Mac mini to run the database (e.g., 192.168.10.130 in the figure below), you can deploy the database according to your own planning:
use auth;
source /home/wow/TrinityCore/TrinityCore-TDB335.24011/sql/base/auth_database.sql
use characters;
source /home/wow/TrinityCore/TrinityCore-TDB335.24011/sql/base/characters_database.sql
You can view the current default databases
There are 4 databases by default.
There are many tables in the auth database, one of which is very important, namely realmlist. It contains the port and address that the main program worldserver listens to, as well as the game version ID, etc. Here, it depends on whether you just want to play at home by yourself, or put it on the network (private network or public network) for everyone to play together. Different needs require different settings.
The following command is to view the specific content of items such as id, name, port, address, etc., in the realmlist table of the auth database, which also affects how you play later.
use auth;
select id,name,port,address,localaddress,gamebuild from realmlist;

select id,name,port,address,localaddress,gamebuild from realmlist;
The port determines the port that the main worldserver program listens to. There is no need to change this, just use the default. The important part is the address. Generally speaking, if the database and the main program are installed on the same server, then this address can just be set to the interface address of this server (for LAN play). However, if it is published on the internet, then the address setting here is very important. If you purchased a cloud server and have a fixed public IP address, you can directly set it to the public IP address here, or of course, use the domain name corresponding to the public IP. If it is set up in an intranet, and the public IP address is on the egress device with port forwarding configured, then this should be set to the public IP address on the egress device, or the corresponding domain name.
use auth;UPDATE realmlist SET address = '【your_ip】' WHERE id = 1
use auth;UPDATE realmlist SET address = '【your_ip】' WHERE id = 1

Edit configuration files
After modification, it looks like this:
vim /home/wow/server3.3.5/etc/authserver.conf
vim /home/wow/server3.3.5/etc/authserver.conf
Try to keep the default values for ports and addresses; the key part is as follows:“
LoginDatabaseInfo = “127.0.0.1;3306;trinity;trinity;auth”

If you are playing on the local machine, such as running the server on Windows and opening the client on the same machine, you don't need to change this. However, if the database and the server program are not on the same host, you need to modify this. For example, I changed it to the IP address of the database in the local area network, 192.168.10.130, port 3306:
vim /home/wow/server3.3.5/etc/worldserver.conf
vim /home/wow/server3.3.5/etc/worldserver.conf“
DataDir = ”.”
DataDir = "/home/wow/server3.3.5/data

LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth"
WorldDatabaseInfo = "127.0.0.1;3306;trinity;trinity;world"
CharacterDatabaseInfo = "127.0.0.1;3306;trinity;trinity;characters"
LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth"

Start the server
Run authserver first
/home/wow/server3.3.5/bin/authserver

CharacterDatabaseInfo = "127.0.0.1;3306;trinity;trinity;characters"

Then run worldserver
/home/wow/server3.3.5/bin/worldserver

/home/wow/server3.3.5/bin/authserver
Note: The error below is very frustrating. In previous versions, if you used MariaDB, this error would occur. I searched all over foreign forums, and at that time, the advice from experts was to just use MySQL, because the combination of TC and MariaDB easily triggers this error. Crucially, when installing MySQL via apt back then, the default DB was just replaced from MySQL to MariaDB... This wasted a lot of my time, having to reinstall MySQL and recompile, which was a real pain... Fortunately, starting from the version 23061 I am installing now, the latest MariaDB is supported, so you don't have to go through all that trouble.
cd /home/wow/server3.3.5/bin/
wget https://github.com/TrinityCore/TrinityCore/releases/download/TDB335.24011/TDB_full_world_335.24011_2024_01_21.7z
Do you remember that we only initialized the two databases, auth and characters, earlier? The world database was not initialized and is empty, which is why this error occurs here.Invincible File Sharingmkdir /home/wow/TrinityCore”blog.tangwudi.com“So, download according to the address prompted below:cd /home/wow/server3.3.5/bin/wget https://github.com/TrinityCore/TrinityCore/releases/download/TDB335.24011/TDB_full_world_335.24011_2024_01_21.7z
Note: If GitHub is inaccessible, you can also visit the following link to download:
apt-get install p7zip-full
/home/wow/server3.3.5/bin/
7z x TDB_full_world_335.24011_2024_01_21.7z
Install 7-Zip:
./worldserver

Extract:

7z x TDB_full_world_335.24011_2024_01_21.7z
Log into the world
Add account
Run worldserver again:
Create account
./worldserver
TC> account create wow1 wow1
TC> Account created: wow1
Upgrade to GM
Success.
Here, I created an account with the username wow1 and password wow1, and upgraded it to GM level.
TC> account set gmlevel wow1 3 -1
TC> Security level of account WOW1 changed to 3.
Client configuration
TC> account create wow1 wow1TC> Account created: wow1You can promote wow1's gmlevel to 3 to upgrade it to a GM account. Enter the following in the worldserver command line:
#在本地跑ip用127.0.0.1,这个ip对应上面realmlist中的address,我这里因为是放在互联网上,所以用的域名,如下:
echo y | rd /s "Cache"
echo SET realmlist "wlk.example.com" > Data\zhTW\realmlist.wtf
echo SET realmlist "wlk.example.com" > Data\enTW\realmlist.wtf
echo SET realmlist "wlk.example.com" > Data\zhCN\realmlist.wtf
echo SET realmlist "wlk.example.com" > Data\enCN\realmlist.wtf
echo SET realmlist "wlk.example.com" > Data\enUS\realmlist.wtf
echo SET realmlist "wlk.example.com" > realmlist.wtf
start Wow.exe
Then, run the script. At this point, the client connection configuration is successfully initialized and you can log in to the game. In the future, you can just run wow.exe directly to log in.
If you want authserver and worldserver to start on boot, you can refer to my other article:Debian Series: 3 Common Ways to Set Commands or Scripts to Run at Startup。
For how to build a high-end registration website to go with user registration, see my other article:TrinityCore Series: Deploying World of Warcraft TrinityCore 3.3.5 Registration Website
Regarding account registration, in addition to directly adding account data in the backend as mentioned in this article, you can also build a dedicated registration website yourself to complete it (for detailed steps, please refer to my other article:TrinityCore Series: Deploying World of Warcraft TrinityCore 3.3.5 Registration Website), I have also built a demo website for the registration website, the URL is as follows:Invincible Azeroth, you can check out the effect first.
Afterword
Actually, if it is just set up to play, it is very simple. Just install both the database and the server-side software on one host (such as a cloud host). However, because my requirements became more and more later, and the databases of many applications used the same mariadb, I later created a separate independent database and imported the original data over. Anyway, it was just all kinds of tossing. Therefore, it is recommended that everyone think about it at the very beginning. If this database is originally only for wow, then it is fine to install it on one device. If there are other plans in the future, it is recommended to separate them at the beginning to avoid tossing again later. And, if you have more ideas, such as adding npcbots (refer to my other article:TrinityCore Series: Adding npcbots to version 3.3.5 (24011)), it is recommended that everyone still learn some routine operations of the database, after all, there are quite a few database operations involved later.
P.S.: Actually, I didn't really want to write this article at first. After all, the blogger ”开始沸腾了” wrote a very good article. However, TrinityCore has upgraded two minor versions. Especially at his time, TrinityCore version 22061's default database was MySQL, but in the next version 23061, it became MariaDB. The change was very big, and the installation details also changed a lot. I had to re-record it, which is why I wrote this article. Generally, I wouldn't spend energy rewriting excellent articles.
OP, let me ask, if it is just a small group of 100 people, what server configuration would be enough?
A few hundred people would still need some consideration, but 100 people is not many. I think any current mainstream computer can do it. For Win, 16G of memory is definitely stable; for Linux hosts, 8G of memory is probably enough, and I don't know if 4G of memory will work.