Repository of necessary deployment files for the Metin2 Server
Go to file
2024-12-07 20:29:45 +02:00
assets/db-init Added database initialization mechanism, support for in-game mall 2024-09-22 09:54:42 +03:00
.env.example Restructured sample .env file, switched database to biarms/mysql 2024-11-17 09:58:56 +02:00
.gitignore Compose file now uses .env variables, added mysql healtcheck 2024-06-02 21:49:40 +03:00
docker-compose.yml Added compatibility matrix, set services to always restart. 2024-12-07 20:22:30 +02:00
README.md Restructured README.md 2024-12-07 20:29:45 +02:00

The Metin2 Deployment Files

The Old Metin2 Project aims at improving and maintaining the 2014 Metin2 game files up to modern standards. The goal is to archive the game as it was in order to preserve it for the future and enable nostalgic players to have a good time.

For-profit usage of this material is certainly illegal without the proper licensing agreements and is hereby discouraged (not legal advice). Even so, the nature of this project is HIGHLY EXPERIMENTAL - bugs are to be expected for now.

Quick start guide

The deployment strategy for this project is based around Docker Compose. Make sure that you have a compatible Linux + Docker environment - for more information, check out the compatibility matrix.

Architecture description

The MySQL database is currently pinned on version 5.5. We're using the biarms/mysql project in order to provide ARM compatibility for such an old version of MySQL.

The game cores (db, auth, game-*) are ran by using pre-built images containing the server binaries and game files, provided in the Server repository.

The web application provides the actual website, item mall and autopatcher functionality. Moreover, it is responsible with maintaining the database schema, creating and updating tables when needed. Pre-built images containing the web application are provided in the Website repository.

Preparing the server

Clone this repository and access its root directory. For instance, on Linux you would do this:

git clone --depth 1 https://git.old-metin2.com/metin2/deploy.git metin2-deploy
cd metin2-deploy/

Now, we need to copy the example environment file and name it .env. This file contains all settings used by Docker Compose to start up our project.

cp .env.example .env

Some settings aren't yet filled out. The actual settings will differ based on your setup. We'll assume that you're using WSL and Docker on your own computer, and you want to run the server locally, just for yourself. Start with opening the newly copied .env file.

Firstly, we need to configure the web application. Find WEB_APP_URL and change it to the URL you would use to access the machine you're installing this on (without a trailing slash!). In our case, simply set it to http://localhost.

You might already use port 80 on your machine for something else, in which case we need to configure the app to use another port. Simply change WEB_EXTERNAL_PORT to another value, for example 8080. Don't forget to change WEB_APP_URL accordingly, in our case to http://localhost:8080.

Next, we need to generate a cryptographic key. We'll make use of Laravel's generator feature, as follows:

docker run --rm git.old-metin2.com/metin2/web:latest "php artisan key:generate --show"

Run the above command and configure WEB_APP_KEY with the output. You should end up with something like: WEB_APP_KEY=base64:<your-key-here>.

Lastly, let's switch our focus to the game server. Make sure that PUBLIC_IP is set to a value at which you can access your machine. As a rule of thumb, this should be the same value you set in your client's serverinfo.py. In our case, leaving a value of 127.0.0.1 should work just fine.

Don't forget to save your .env file!

Starting the server

You're ready to start the server. Simply run the following command to start up the server:

docker compose up -d --pull always

On the first run, your database tables will be created and populated with default data.

Stopping the server

Should you want to stop the server, simply bring down the Docker Compose stack:

docker compose down

Only start some services

This deployment environment can also be used for development purposes. If you need a database and website, but want to run the server in some other way (for example, in an IDE), you can just bring up only the services you need:

docker compose up -d mysql web

Compatibility matrix

Operating system amd64 i386 arm64 armv7 Notes
Debian 11 ⚠️ Requires EVENT_NOEPOLL=1 environment variable to be set.
Debian 12
Ubuntu 22.04.5 LTS N/A
Ubuntu 24.04.1 LTS N/A
Docker on WSL N/A N/A
Docker on macOS N/A N/A

What about Windows, FreeBSD? macOS?

As described above, the deployment system for The Old Metin2 Project is based on Docker and Docker Compose. Since support for native Windows, FreeBSD or macOS Docker containers is experimental at best and unavailable at worst, the auto-magical deployment system in this repository is not compatible with these OSs.

Compiling the server binary and running it on these systems should be possible, but you have to come up with your own deployment strategy, be it shell scripts, a custom watchdog program, or simply manually starting the binaries. Moreover, this is currently outside the scope of the project and unsupported for the time being.

Help!

epoll_wait issues

On some Linux distributions, kernels are shipped without epoll_wait support, which in turn might lead to the following error being shown (and the server naturally won't start):

[warn] epoll_wait: Function not implemented

Luckily, there is a workaround: disabling the epoll backend of libevent. In order to do this, modify your &common-environment section in your docker-compose.yml file by adding the following line:

EVENT_NOEPOLL: 1