Skip to content

RafaelClaumann/dockerized-otserver

Repository files navigation

Dockerized Tibia OTserver

O que tem nesse repositório?

Neste repositório você encontrará scripts shell, arquivos SQL, yaml e PHP para iniciar um ambiente docker e executar um OTserver(open tibia server).

Requisitos

  • docker
  • docker compose
  • unzip
  • wget
  • notepad++
  • tibia client 12x

Quatro containers são utilizados:

  • OTserver(ubuntu open tibia server)
  • Banco de dados(mysql)
  • Gerenciador de banco de dados(phpmyadmin)
  • Servidor web(php+apache)

Inico rápido

  • Para realizar o download dos arquivos do servidor e inicia-lo, execute o script start.sh com o parâmetro -d. As execuções subsequentes de start.sh não precisarão do parâmetro -d.
  • Gerenciamento do banco de dados através do phpMyAdmin em http://localhost:9090 utilizando as credenciais root/noob ou otserv/noob.
  • Utilize um Tibia Client 12x(download) para acessar o servidor. É preciso alterar o valor das chaves loginWebService e clientWebService no arquivo 127.0.0.1_client.exe(tutorial).
  • Para fazer login no Tibia Client 12x utilize as credenciais @god/god ou @a/1.
  • Para encerrar os containers(otserver, mysql, phpmyadmin, php+apache) execute o comando docker-compose down.

Demonstração iniciando servidor

Demonstração configurando client e login

Arquivos do repositório

No script start.sh são definidas as credenciais do banco de dados e as configurações de rede do Docker, em poucos casos será preciso alterar as credenciais ou configurações de rede. O script também é responsável por iniciar os containers(otserver, mysql, phpmyadmin, php+apache) com o comando docker-compose up -d.

Parâmetros disponiveis para iniciar o script start.sh:

parâmetro descrição
-d ou --download Realiza o download e extração do servidor canary na pasta server/. Se os arquivos do servidor não forem encontrados na pasta server/ e você não fornecer o parâmetro -d ou --download o script não funcionará.

O arquivo login.php é uma simplificação do login.php encontrado no MyAAC. Essa simplificação facilita a autenticação no servidor/banco de dados e evita a instalação e configuração de um AAC(Gesior2012 ou MyAAC).

Durante o login, o Tibia Client 12x realiza requisições nas URLs loginWebService e clientWebService que são configuradas no próprio Tibia Client(tutorial).

As URLs configuradas no Tibia Client 12x levam até o arquivo login.php do servidor web(php+apache) que por sua vez se comunicará com o banco de dados(MySQL) para autenticar o cliente. O servidor web não tem interface gráfica, só é possível criar contas e personagens no banco de dados usando comandos SQL.

O schema do banco de dados e algumas contas são criados de forma automática na inicialização do container MySQL, veja os arquivos 00_schema.sql e 01_data.sql.

As contas listadas abaixo são criadas na inicialização do banco de dados(MySQL).

email password personagens
@god god GOD, paladin/sorcerer/druid/knight sample
@a 1 Paladin(800) Sorcerer(800) Druid(800) Knight(800)
@b 1 ADM1
@c 1 ADM2

O docker-compose.yaml contém a declaração dos containers(otserver, mysql, phpmyadmin, php+apache) que são iniciados quando o script start.sh é executado. Os campos no formato ${xxxx} em docker-compose.yaml recebem os valores das variaveis exportadas no script start.sh.

O diagrama abaixo exibe as variáveis de ambiente declaradas no script start.sh e onde elas são utilizadas.

Diagrama sem nome

Configurando Tibia Client

Supondo que o download do Tibia Client 12x ja tenha sido realizado e o notepad++ esteja instalado.

Navegue até a pasta bin do Tibia Client, clique com o botão direito do mouse sob o arquivo 127.0.0.1_client.exe, abrir com notepad++ e localize as palavras loginWebService e clientWebService.

O valor atribuído a loginWebService e clientWebService deve ser igual a URL de autenticação exposta no container webserver(php+apache), ou seja, http://127.0.0.1:8080/login.php.

  • Se NOVA_URL > URL_ORIGINAL então remova espaços ao final da URL para equilibrar o tamanho inicial do campo
  • Se NOVA_URL < URL_ORIGINAL então adicione espaços ao final da URL para equilibrar o tamanho inicial do campo

Antes x Depois:

image

image

Tibia 11 Discussion(+Tutorial how to able to use it)

Cliente Tibia 12 com Notepad++

Opcional - Gesior2012 ou myAAC

Os AACs(Automatic Account Creator) citados são sites criados com aparencia e funcionalidades parecidas com as encontradas no site oficial do tibia.

Caso queira instalar um dos AACs Gesior2012 ou myAAC será preciso adicionar algumas extensões no container PHP.

Mais informações a respeito das extensões necessárias podem ser encontradas nos repositórios dos respectivos AACs.

# Os comandos mostrados abaixo devem ser executados dentro do container PHP.
# docker exec -it php bash
#
chmod -R 777 /var/www/*
apt update && \
apt install libxml2-dev \
            libcurl4-openssl-dev \
            zlib1g-dev \
            libzip-dev \
            libluajit-5.1-dev -y

# https://gist.github.com/hoandang/88bfb1e30805df6d1539640fc1719d12
docker-php-ext-install bcmath
docker-php-ext-install curl
docker-php-ext-install dom
docker-php-ext-install mysqli
docker-php-ext-install pdo
docker-php-ext-install pdo_mysql
docker-php-ext-install xml
docker-php-ext-install zip
apachectl restart

Para instalar o Gesior2012 é preciso inserir o endereço IP do gateway da rede docker em site/install.txt, enquanto no myAAC o endereço deve ser inserido em site/install/ip.txt.

O endereço do gateway de rede pode ser obtido na varivel DOCKER_NETWORK_GATEWAY do arquivo start.sh ou através do comando docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' otserver_otserver.

# instalacao myAAC, endereço IP em site/install/ip.txt
rm -r site/config.local.php &> /dev/null  # removendo configuração de instalações anteriores
echo $DOCKER_NETWORK_GATEWAY > site/install/ip.txt

# instalacao Gesior2012, endereço IP em site/install.txt
echo $DOCKER_NETWORK_GATEWAY > site/install.txt

Links

Outras Informações

Listando as redes do docker

$docker network list    
    NETWORK ID     NAME                 DRIVER    SCOPE
    bd83d906d3d1   bridge               bridge    local
    2546338521e9   host                 host      local
    42e631403bda   none                 null      local
    0a96c09c01b1   opentibia_otserver   bridge    local

$docker network inspect --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' opentibia_otserver
    192.168.128.1

$docker network inspect --format='{{range .IPAM.Config}}{{.Subnet}}{{end}}' opentibia_otserver
    192.168.128.0/20

MySQL

Em algumas situações houveram erros ao logar no PhpMyAdmin e tive que executar as seguintes consultas no banco de dados

# Create database and import schema
mysql -u root -e "CREATE DATABASE $DATABASE_NAME;"
mysql -u root -D <DATABASE_NAME> < schema.sql
mysql -u root -D <DATABASE_NAME> < data.sql

# Create user
mysql -u root -e "CREATE USER '<MYSQL_USER>'@localhost IDENTIFIED BY '<MYSQL_PASSWORD>';"
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO '<MYSQL_USER>'@'localhost' WITH GRANT OPTION;"
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO '<MYSQL_USER>'@'%' WITH GRANT OPTION">

#> Make our changes take effect
mysql -u root -e "FLUSH PRIVILEGES;"

login.php

RequestBody

{
	"email": "@god",
	"password": "god",
	"stayloggedin": true,
	"type": "login"
}

ResponseBody

{
	"session": {
		"sessionkey": "@god\ngod",
		"lastlogintime": 0,
		"ispremium": true,
		"premiumuntil": 0,
		"status": "active",
		"returnernotification": false,
		"showrewardnews": false,
		"isreturner": true,
		"fpstracking": false,
		"optiontracking": false,
		"tournamentticketpurchasestate": 0,
		"emailcoderequest": false
	},
	"playdata": {
		"worlds": [
			{
				"id": 0,
				"name": "OTServBR-Global",
				"externaladdress": "192.168.128.1",
				"externalport": 7172,
				"externaladdressprotected": "192.168.128.1",
				"externalportprotected": 7172,
				"externaladdressunprotected": "192.168.128.1",
				"externalportunprotected": 7172,
				"previewstate": 0,
				"location": "BRA",
				"anticheatprotection": false,
				"pvptype": "pvp",
				"istournamentworld": false,
				"restrictedstore": false,
				"currenttournamentphase": 2
			}
		],
		"characters": [
			{
				"worldid": 0,
				"name": "GOD",
				"ismale": true,
				"tutorial": false,
				"level": 2,
				"vocation": "No Vocation",
				"outfitid": 75,
				"headcolor": 95,
				"torsocolor": 113,
				"legscolor": 39,
				"detailcolor": 115,
				"addonsflags": 0,
				"ishidden": false,
				"istournamentparticipant": false,
				"ismaincharacter": false,
				"dailyrewardstate": 0,
				"remainingdailytournamentplaytime": 0
			}
		]
	}
}

NGROK

# https://ngrok.com/
# https://tech.aufomm.com/how-to-use-ngrok-with-docker/
docker network create ngrok_net

docker container run --rm -it \
  --name ngrok \
  --env NGROK_AUTHTOKEN=$(cat .ngrok_token) \
  --network ngrok_net \
  ngrok/ngrok http nginx:80

docker container run --rm -it \
  --name nginx \
  --network ngrok_net \
  nginx