MontandoOT Já sou aluno

Como colocar um OTServer online: guia completo do zero à VPS

16/08/2026 · 12 min de leitura

Este é o caminho completo para tirar um OTServer do zero e deixar ele online de verdade — não só rodando na sua tela, mas no ar depois que você fechar o terminal e ir dormir.

O exemplo usa CrystalServer em Ubuntu 22.04, mas a lógica vale para qualquer distro moderna baseada em TFS. No fim tem a parte que a maioria dos tutoriais pula, e que é justamente o que separa "consegui rodar" de "está online".

Antes de começar

Você vai precisar de uma VPS Linux com pelo menos 2 GB de RAM e acesso root, e de um cliente SSH. Compilar o servidor consome bastante memória — se a sua VPS tem só 1 GB, a compilação provavelmente vai falhar por falta de RAM no meio do caminho.

1. Atualizar o sistema e instalar as dependências

sudo apt update && sudo apt dist-upgrade -y
sudo apt install git cmake build-essential autoconf libtool ca-certificates \
  curl zip unzip tar pkg-config ninja-build ccache -y

São as ferramentas de compilação. O cmake prepara o projeto e o ninja faz a build.

2. Atualizar o CMake e o compilador

O código moderno do CrystalServer exige versões mais novas do que vêm no repositório padrão.

sudo apt remove --purge cmake -y
sudo apt install snapd -y
sudo snap install cmake --classic

sudo apt install gcc-12 g++-12 -y
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 --slave /usr/bin/g++ g++ /usr/bin/g++-12
sudo update-alternatives --set gcc /usr/bin/gcc-12
gcc-12 --version

3. Instalar o VCPKG

sudo apt install acl -y
cd /home
git clone https://github.com/microsoft/vcpkg
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install --triplet x64-linux-release

O VCPKG resolve as bibliotecas sozinho — Boost, Zlib, LuaJIT, Crypto++. Essa etapa é demorada: em VPS modesta pode passar de meia hora. É normal.

4. Baixar e compilar o servidor

cd /home
git clone --depth 1 https://github.com/zimbadev/crystalserver.git
sudo chmod -R 775 crystalserver
cd crystalserver
mv config.lua.dist config.lua
mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=/home/vcpkg/scripts/buildsystems/vcpkg.cmake .. --preset linux-release
cmake --build linux-release
cd /home/crystalserver
cp -r build/linux-release/bin/crystalserver .
sudo chmod +x crystalserver

Se a compilação morrer sem mensagem clara, quase sempre é falta de memória. Dá para contornar criando swap temporário ou limitando a build a um job por vez.

5. Banco de dados

sudo apt install mariadb-server mariadb-client -y
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

Rode o mysql_secure_installation mesmo. Ele define senha de root e remove o usuário anônimo — dois minutos que evitam problema depois.

sudo mysql -u root -p
CREATE DATABASE crystalserver CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'otuser'@'localhost' IDENTIFIED BY 'UMA_SENHA_FORTE_AQUI';
GRANT ALL PRIVILEGES ON crystalserver.* TO 'otuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Não use senha fraca aqui. Tutorial usa ot123 para ficar curto; servidor de verdade com senha assim é invadido, e junto vai o banco dos seus jogadores. Gere uma com openssl rand -hex 16.

mysql -u otuser -p crystalserver < /home/crystalserver/schema.sql

6. Conectar o servidor ao banco

cd /home/crystalserver
sudo nano config.lua
sqlType = "mysql"
sqlHost = "127.0.0.1"
sqlPort = 3306
sqlUser = "otuser"
sqlPass = "A_MESMA_SENHA_QUE_VOCE_CRIOU"
sqlDatabase = "crystalserver"

Nome do banco, usuário e senha precisam bater exatamente com o que você criou. Divergência aqui é a causa número um de "compilou mas não sobe".

7. PHP e nginx para o site

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-xml php8.3-curl \
  php8.3-zip php8.3-gd php8.3-mbstring nginx -y

8. Instalar o MyAAC

cd /var/www/html
sudo git clone https://github.com/zimbadev/crystalserver-myacc.git myaac
sudo chown -R www-data:www-data myaac
sudo chmod -R 775 myaac

9. Configurar o nginx

sudo nano /etc/nginx/sites-available/myaac.conf
server {
    listen 80;
    server_name SEU_DOMINIO_OU_IP;

    root /var/www/html/myaac;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht { deny all; }
}
sudo ln -s /etc/nginx/sites-available/myaac.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx php8.3-fpm

10. Instalar o MyAAC pelo navegador

Acesse http://SEU_IP/ e preencha com host 127.0.0.1, banco crystalserver, usuário otuser e a senha que você criou.

Terminada a instalação, apague ou proteja a pasta de install do MyAAC. Deixar ela acessível é convite para alguém reinstalar seu site por cima.

11. O que quase todo tutorial esquece

Se você rodar ./crystalserver direto e fechar o SSH, o servidor cai junto. Para ficar realmente online, ele precisa virar um serviço do sistema.

sudo nano /etc/systemd/system/crystalserver.service
[Unit]
Description=CrystalServer
After=network.target mariadb.service

[Service]
Type=simple
User=root
WorkingDirectory=/home/crystalserver
ExecStart=/home/crystalserver/crystalserver
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now crystalserver
sudo systemctl status crystalserver

Com isso o servidor sobe sozinho quando a VPS reinicia e volta sozinho se travar. Para ver o log em tempo real: journalctl -u crystalserver -f.

Firewall

Libere só o que precisa:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 7171/tcp
sudo ufw allow 7172/tcp
sudo ufw enable

A 7171 é o login e a 7172 é o jogo. Sem as duas abertas o jogador não entra.

Backup, antes de ter jogador

Configure agora, não depois. Um cron diário do banco já resolve o essencial:

0 4 * * * mysqldump crystalserver | gzip > /root/ot-$(date +\%Y\%m\%d).sql.gz

E leve a cópia para fora da máquina. Backup que mora no mesmo servidor não salva de nada quando a VPS é que morre.

HTTPS no site

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d seudominio.com.br -d www.seudominio.com.br

Site sem cadeado assusta jogador na hora de doar.

Está online. E agora?

Servidor no ar é metade do trabalho. A outra metade é jogador entrar — e isso não acontece sozinho. Cadastre o servidor nas listas de OT, divulgue nos fóruns e no Discord, e mantenha o uptime alto: lista de servidor ordena por tempo no ar, e servidor que cai some do topo.

Hospedagem especializada em OTServer

Anti-DDoS L3/L4/L7, CPU de alta frequência e suporte de quem roda servidor todo dia. De R$ 89 a R$ 370, entrega no mesmo dia e sem fidelidade.

Ver os planos