DocumentationInstallation▾

Installation

This guide gets the server running. For players to connect, you then build the client pointing at your server: see Game client.

Requirements

Requirement Recommended minimum
System Linux x86_64 (amd64) or ARM64
RAM 2 GB
CPU 2 vCPU
Docker 24.0+
Docker Compose 2.20+

The published images work on linux/amd64 and linux/arm64, and the database image uses MySQL 8.4 LTS.

On ARM machines with 1 GB of RAM or less, enable 2 GB of swap before building the images.

Ports

Port Protocol Service
44405 TCP ConnectServer (server list)
55601 UDP ConnectServer
55901 TCP GameServer
8085 TCP Web panel (optional)

With UFW:

ufw allow 44405/tcp
ufw allow 55601/udp
ufw allow 55901/tcp

Install with Docker

1. Clone the repository

git clone https://github.com/EmanuelCatania/Mu-Linux-0.97k.git
cd Mu-Linux-0.97k

2. Set up the .env

cp .env.example .env
nano .env

Before the first start, change at least:

# Public IP of the VPS: the ConnectServer hands it to the client
PUBLIC_IP=203.0.113.10

# MySQL passwords
MYSQL_ROOT_PASSWORD=secure_root_password
MYSQL_PASSWORD=secure_user_password
DB_PASS=secure_user_password

# Web session secret (a long random string)
SESSION_SECRET=change-this-to-a-long-random-string

DB_PASS must be equal to MYSQL_PASSWORD. The full reference is in Configuration.

3. Start the stack

With the images published on Docker Hub, without building anything (recommended):

docker compose -f docker-compose.images.yml up -d

Or building the images from the repository source:

docker compose up -d --build

This starts MySQL, the server (ConnectServer, JoinServer, DataServer and GameServer) and the web panel.

docker compose ps        # container status
docker compose logs -f   # live logs

On startup, the server prints its version and the compatible client:

MU Linux server 0.97.30 | Cliente compatible: https://github.com/EmanuelCatania/Mu-97k-Client-Source/releases/tag/0.97.30

With the images compose file, add -f docker-compose.images.yml to every docker compose command.

4. Open the web panel

The panel is on port 8085 (http://YOUR_IP:8085) or on your reverse proxy’s domain. The admin area is at /admin/.

The initial user is admin / 123456, and the first login forces a password change. Then a wizard lets you pick the site’s default language (Spanish, English or Portuguese) and its theme. See Admin Panel.

5. Build the client

With the server running, build the client with your server’s address: Game client.

File editor (optional)

The editor adds per-file backups, full snapshots of the server data and automatic reloads when saving from the panel:

# In the .env
EDITOR_ENABLED=1
EDITOR_API_URL=http://mu-editor:8090

docker compose -f docker-compose.yml -f docker-compose.editor.yml up -d --build

Updating

docker compose -f docker-compose.images.yml pull mu-server
docker compose -f docker-compose.images.yml up -d --no-deps mu-server

To pin a version instead of latest, change the mu-server image to emapupi/mu-linux-97k:0.97.30.

Game data is not updated with the image. It lives in a persistent volume (/opt/mu/Data inside the container) so your changes are not lost. Each new version lists in its Release notes which files you need to merge by hand. For example, moving to 0.97.30 requires adding the rows of the new GM commands: see GM commands and reloads.

Update the client to the same version as the server.

Pterodactyl

There are eggs for the server and the website in the Pterodactyl eggs folder of the repository, and each Release ships the files the installer uses (mu-linux-97k-server-amd64.tar.gz, mu-linux-97k-server-arm64.tar.gz and mu-linux-97k-web.tar.gz).

  1. Import the eggs in your Pterodactyl panel.
  2. On the server, choose the version in the MU_RELEASE_TAG variable (for example 0.97.30).
  3. Install: the installer downloads the archive for your architecture from the Release.

To update an existing installation, don’t reinstall: the installer also extracts configuration and data. With the server stopped, extract the archive for your architecture into a temporary folder, replace the four binaries and start.sh, and merge the Data changes listed in the Release.

Without Docker

The server can also be built by hand with CMake, on Linux (x64 and ARM64) and on Windows (x86 and x64). The steps are in the server README.

The recommended and supported setup is Docker on Linux. The server builds on Windows, but that setup is not supported.

Recreating the database

If you change the MySQL credentials after the first start, you need to recreate the database volume:

docker compose down -v
docker compose up -d

⚠️ This deletes accounts and characters. Back up first.

Troubleshooting

The server does not show up in the client: check that PUBLIC_IP is the correct public IP, that the ports are open and that the client was built with your server’s address.

The client connects but never gets in: the CustomerName, ServerSerial or client version do not match the server’s. See Game client.

The web panel does not load: wait for MySQL to pass its health check and check docker compose ps.

GameServer errors: docker compose logs mu-server.