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).
- Import the eggs in your Pterodactyl panel.
- On the server, choose the version in the
MU_RELEASE_TAGvariable (for example0.97.30). - 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.