O maior portal de MU Online do Brasil — desde 2003
Tutorial Intermediário Tutoriais

Como Criar o Website do Seu Servidor de MU Online do Zero

Guia completo para criar o website do seu servidor MU Online: instalação do stack web, integração com banco de dados SQL Server e configuração de painel.

EQ Equipe ViciadosMU · Atualizado em 3 jul 2026 · ⏱ 12 min de leitura

Visão Geral

Criar o website do seu servidor de MU Online é uma etapa fundamental para oferecer aos jogadores um ponto centralizado de registro de contas, ranking, informações de eventos e suporte. Este guia cobre a instalação completa do stack web, integração com o banco de dados SQL Server do MuServer e configuração de funcionalidades essenciais.

Nota: Este tutorial utiliza Windows Server 2019 com IIS, PHP 8.1, SQL Server 2019 e o banco de dados padrão do MuServer Season 6 (banco MuOnline). Adapte os caminhos e versões conforme o seu ambiente.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Windows Server 2008 R2 ou superior (ou Windows 10/11 para testes locais)
  • SQL Server 2012 ou superior com o banco MuOnline já criado pelo MuServer
  • Acesso de administrador ao servidor
  • Um domínio ou IP público apontado para o servidor (para produção)

Passo 1 — Instalar o IIS e o PHP

1.1 Abra o Gerenciador do ServidorAdicionar Funções e Recursos → selecione Servidor Web (IIS).

Marque os componentes adicionais:

  • CGI (necessário para PHP via FastCGI)
  • Autenticação Básica
  • Compactação de Conteúdo Estático e Dinâmico
  • Reescrita de URL (URL Rewrite Module — baixe separado no site da Microsoft)

1.2 Baixe o PHP 8.1 (Non-Thread-Safe, x64) em https://windows.php.net/download/ e extraia para C:\PHP\.

1.3 Renomeie C:\PHP\php.ini-production para C:\PHP\php.ini e edite as seguintes linhas:

; C:\PHP\php.ini — configurações essenciais para MU website

extension_dir = "C:\PHP\ext"
extension=pdo_sqlsrv       ; driver para SQL Server
extension=sqlsrv           ; alternativa para SQL Server
extension=mbstring
extension=openssl
extension=curl
extension=gd

date.timezone = "America/Sao_Paulo"
upload_max_filesize = 10M
post_max_size = 10M
max_execution_time = 60

1.4 Configure o IIS para usar o PHP como handler FastCGI:

Abra o Gerenciador do IIS → site padrão → Mapeamentos de ManipuladorAdicionar Mapeamento de Módulo:

Caminho de solicitação: *.php
Módulo: FastCgiModule
Executável: C:\PHP\php-cgi.exe
Nome: PHP_via_FastCGI

Passo 2 — Criar a Estrutura de Diretórios do Website

Defina a raiz do site como C:\inetpub\muweb\ e crie a estrutura abaixo:

C:\inetpub\muweb\
├── index.php
├── register.php
├── ranking.php
├── events.php
├── admin\
│   ├── index.php
│   └── players.php
├── assets\
│   ├── css\
│   ├── js\
│   └── img\
├── includes\
│   ├── db.php          ← conexão com SQL Server
│   ├── functions.php
│   └── config.php
└── web.config          ← regras de reescrita do IIS

Crie o diretório e aplique permissões via PowerShell:

New-Item -ItemType Directory -Path "C:\inetpub\muweb\includes"
New-Item -ItemType Directory -Path "C:\inetpub\muweb\admin"
New-Item -ItemType Directory -Path "C:\inetpub\muweb\assets\css"

# Permissão de leitura para o IIS_IUSRS
icacls "C:\inetpub\muweb" /grant "IIS_IUSRS:(OI)(CI)R" /T

Passo 3 — Configurar a Conexão com o Banco de Dados SQL Server

Edite o arquivo C:\inetpub\muweb\includes\config.php:

<?php
// includes/config.php — configuração central do website MU

define('DB_HOST',     '127.0.0.1');   // IP do SQL Server (localhost ou IP externo)
define('DB_NAME',     'MuOnline');    // nome padrão do banco do MuServer
define('DB_USER',     'mu_web');      // usuário SQL com permissão limitada
define('DB_PASS',     'SuaSenhaAqui');
define('DB_PORT',     1433);

define('SITE_NAME',   'Meu Servidor MU');
define('SITE_URL',    'http://seudominio.com');
define('MAX_CHARS',   4);             // personagens por conta
define('SERVER_VERSION', 'Season 6 Episódio 3');

Crie o arquivo de conexão C:\inetpub\muweb\includes\db.php:

<?php
// includes/db.php — conexão PDO com SQL Server

require_once __DIR__ . '/config.php';

try {
    $dsn = sprintf(
        'sqlsrv:Server=%s,%d;Database=%s;TrustServerCertificate=1',
        DB_HOST, DB_PORT, DB_NAME
    );
    $pdo = new PDO($dsn, DB_USER, DB_PASS, [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::SQLSRV_ATTR_ENCODING    => PDO::SQLSRV_ENCODING_UTF8,
    ]);
} catch (PDOException $e) {
    die('Erro de conexão com o banco de dados: ' . $e->getMessage());
}
Atenção: Nunca use o usuário sa para conexões web. Crie um usuário SQL com permissões restritas apenas às tabelas necessárias. Execute no SQL Server Management Studio: CREATE LOGIN mu_web WITH PASSWORD='SuaSenhaAqui'; USE MuOnline; CREATE USER mu_web FOR LOGIN mu_web; GRANT SELECT, INSERT ON MEMB_INFO TO mu_web;

Passo 4 — Criar o Sistema de Registro de Contas

A tabela principal de contas no MuServer Season 6 é MEMB_INFO no banco MuOnline. Estrutura relevante:

-- Colunas principais da tabela MEMB_INFO (Season 6)
-- memb__id    varchar(10)  -- login (máx 10 chars)
-- memb__pw    varchar(10)  -- senha (plain text no S6 padrão)
-- memb_name   varchar(10)  -- nome do membro
-- memb_guid   int          -- ID único (identity)
-- mail_addr   varchar(60)  -- e-mail
-- bloc_code   tinyint      -- 0=ativo, 1=bloqueado
-- ctl1_code   tinyint      -- nível de conta (0=jogador, 255=GM)

Crie o arquivo C:\inetpub\muweb\register.php:

<?php
require_once 'includes/db.php';
require_once 'includes/functions.php';

$erro = '';
$sucesso = false;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $login  = trim($_POST['login']  ?? '');
    $senha  = trim($_POST['senha']  ?? '');
    $email  = trim($_POST['email']  ?? '');
    $nome   = trim($_POST['nome']   ?? '');

    // Validações básicas
    if (!preg_match('/^[a-zA-Z0-9]{4,10}$/', $login)) {
        $erro = 'Login deve ter entre 4 e 10 caracteres alfanuméricos.';
    } elseif (strlen($senha) < 4 || strlen($senha) > 10) {
        $erro = 'Senha deve ter entre 4 e 10 caracteres.';
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $erro = 'E-mail inválido.';
    } else {
        // Verificar se o login já existe
        $stmt = $pdo->prepare("SELECT COUNT(*) FROM MEMB_INFO WHERE memb__id = ?");
        $stmt->execute([$login]);
        if ($stmt->fetchColumn() > 0) {
            $erro = 'Este login já está em uso.';
        } else {
            // Inserir nova conta
            $stmt = $pdo->prepare("
                INSERT INTO MEMB_INFO
                    (memb__id, memb__pw, memb_name, mail_addr, bloc_code, ctl1_code)
                VALUES
                    (?, ?, ?, ?, 0, 0)
            ");
            $stmt->execute([$login, $senha, $nome, $email]);
            $sucesso = true;
        }
    }
}
?>
Dica: Para servidores Season 9 em diante, a senha pode ser armazenada com hash MD5 ou SHA256, dependendo da build do MuServer. Verifique o campo memb__pw no banco e adapte a inserção: $senha = md5($_POST['senha']);

Passo 5 — Criar a Página de Ranking

O ranking de personagens usa a tabela Character no banco MuOnline:

<?php
// ranking.php — top 10 personagens por resets e level

require_once 'includes/db.php';

$stmt = $pdo->query("
    SELECT TOP 10
        Name        AS nome,
        Class       AS classe,
        cLevel      AS nivel,
        Resets      AS resets,
        PkCount     AS pks,
        GuildName   AS guild
    FROM Character
    ORDER BY Resets DESC, cLevel DESC
");
$ranking = $stmt->fetchAll();

Para exibir o nome da classe em vez do código numérico, use esta função auxiliar:

// includes/functions.php
function nomeClasse(int $codigo): string {
    $classes = [
        0  => 'Dark Wizard',    1  => 'Soul Master',
        16 => 'Dark Knight',    17 => 'Blade Knight',
        32 => 'Fairy Elf',      33 => 'Muse Elf',
        48 => 'Magic Gladiator',
        64 => 'Dark Lord',
        80 => 'Summoner',
        96 => 'Rage Fighter',
    ];
    return $classes[$codigo] ?? "Classe $codigo";
}

Passo 6 — Configurar o web.config para URL Amigáveis

Crie C:\inetpub\muweb\web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="PHP sem extensao" stopProcessing="true">
          <match url="^([^.]+)$" />
          <conditions>
            <add input="{REQUEST_FILENAME}.php" matchType="IsFile" />
          </conditions>
          <action type="Rewrite" url="{R:1}.php" />
        </rule>
      </rules>
    </rewrite>
    <defaultDocument>
      <files>
        <add value="index.php" />
      </files>
    </defaultDocument>
  </system.webServer>
</configuration>

Passo 7 — Configurar Permissões SQL Server para o Usuário Web

Execute no SQL Server Management Studio (SSMS) com o usuário sa:

-- Criar login e usuario para o website
USE [master];
CREATE LOGIN [mu_web] WITH PASSWORD = 'SuaSenhaSegura123!',
    DEFAULT_DATABASE = [MuOnline],
    CHECK_EXPIRATION = OFF,
    CHECK_POLICY = OFF;

USE [MuOnline];
CREATE USER [mu_web] FOR LOGIN [mu_web];

-- Permissoes minimas necessarias
GRANT SELECT ON [dbo].[MEMB_INFO]   TO [mu_web];
GRANT INSERT ON [dbo].[MEMB_INFO]   TO [mu_web];
GRANT SELECT ON [dbo].[Character]   TO [mu_web];
GRANT SELECT ON [dbo].[Guild]       TO [mu_web];
GRANT SELECT ON [dbo].[GuildMember] TO [mu_web];

-- Negar acesso a tabelas sensiveis
DENY SELECT ON [dbo].[WAREHOUSE]    TO [mu_web];
DENY SELECT ON [dbo].[AccountCharacter] TO [mu_web];

Solução de Problemas Comuns

Erro "Could not find driver" ao conectar com SQL Server

Verifique se os drivers PDO do SQL Server estão instalados. Baixe os Microsoft Drivers for PHP for SQL Server em https://learn.microsoft.com/en-us/sql/connect/php/ e coloque os arquivos .dll em C:\PHP\ext\. Confirme que php.ini tem as linhas extension=sqlsrv e extension=pdo_sqlsrv sem ponto e vírgula no início.

Página em branco após configurar o PHP

Ative a exibição de erros temporariamente em C:\PHP\php.ini:

display_errors = On
error_reporting = E_ALL

Reinicie o IIS com iisreset no prompt de comando e recarregue a página.

Personagens não aparecem no ranking

Confirme que a tabela Character existe no banco MuOnline e que o usuário mu_web tem permissão de SELECT. Execute no SSMS:

SELECT TOP 5 Name, cLevel, Resets FROM MuOnline.dbo.Character;
Dica: Para ambientes de teste local, use o XAMPP no Windows em vez do IIS. Instale o XAMPP em C:\xampp\, coloque os arquivos do site em C:\xampp\htdocs\muweb\ e configure a extensão php_sqlsrv.dll no C:\xampp\php\php.ini para conectar ao SQL Server local.

Perguntas frequentes

Qual stack web é recomendado para servidores MU Online?

Para iniciantes, o XAMPP com PHP 7.4 e MySQL é o mais simples. Para servidores Season 6 com SQL Server, prefira o webEngineNET (ASP.NET + IIS) pois ele já possui conectores nativos para MSSQL e templates prontos para MU.

É possível usar MySQL em vez de SQL Server?

Sim, mas exige adaptação das queries. A maioria das estruturas de tabelas do MuServer usam tipos específicos do SQL Server (smalldatetime, tinyint). Se usar MySQL, converta os tipos e ajuste as stored procedures manualmente.

Como proteger o painel de administração do website?

Coloque o diretório /admin fora da raiz pública do servidor web, use HTTPS com certificado SSL (Let's Encrypt), implemente autenticação de dois fatores e restrinja acesso por IP no IIS ou no .htaccess do Apache.

O registro de contas no website cria o personagem automaticamente?

Não. O registro cria apenas o registro na tabela MEMB_INFO do banco MuOnline. O personagem é criado pelo próprio cliente do jogo após o primeiro login, na tela de seleção de personagens.

EQ

Equipe ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Continue lendo

Artigos relacionados