Neste repositório você encontrará scripts shell, arquivos SQL, yaml e PHP para iniciar um ambiente docker e executar um OTserver(open tibia server).
start.sh
com o parâmetro -d
. As execuções subsequentes de start.sh
não precisarão do parâmetro -d
.phpMyAdmin
em http://localhost:9090 utilizando as credenciais root
/noob
ou otserv
/noob
.loginWebService
e clientWebService
no arquivo 127.0.0.1_client.exe
(tutorial).@god
/god
ou @a
/1
.docker-compose down
.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). | 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.
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
.
Antes x Depois:
Tibia 11 Discussion(+Tutorial how to able to use it)
Cliente Tibia 12 com Notepad++
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
$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
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;"
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
}
]
}
}
# 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