Como publicar um site PHP com banco de dados na Hostinger (sem VPS)

Ilustração do hPanel da Hostinger com arquivos PHP e banco de dados sendo publicados

Fala aí, beleza? Montou aquele site em PHP com MySQL rodando liso na sua máquina e agora quer colocar no ar sem virar administrador de servidor? Dá pra fazer isso na hospedagem de sites da Hostinger, sem VPS 🙂

O fluxo é este: criar o site no hPanel escolhendo PHP/HTML website, conferir a versão do PHP, enviar os arquivos para public_html, importar o banco pelo phpMyAdmin, ajustar a conexão (host localhost) e ativar o SSL

Esse caminho serve pra site PHP/HTML feito localmente, sem processos que precisem ficar rodando o tempo todo. Se é o seu caso, a hospedagem de sites da Hostinger dá conta do recado (link de afiliado da Hostinger: se você contratar por ele, o blog recebe uma comissão)

Hospedagem de sites ou VPS: quando este tutorial serve para o seu projeto

Este tutorial serve quando o projeto é um site PHP com MySQL que recebe a requisição, responde e pronto, no máximo com algumas tarefas agendadas

A diferença entre os dois mundos é de responsabilidade

Na hospedagem gerenciada, configuração, segurança e manutenção do servidor fazem parte do serviço. Já os planos VPS da Hostinger são autogerenciados: você recebe acesso root e cuida do software, da segurança e da manutenção

Pensa assim: hospedagem de sites é um apê mobiliado com o condomínio cuidando do prédio, VPS é receber a chave do terreno e o resto é contigo haha

Serve bem para:

  • Site PHP/HTML com banco MySQL
  • Tarefas agendadas criadas por cron job no próprio hPanel (planos Web e Cloud)
  • Quem não quer mexer em configuração de servidor Linux

Não serve (ou pede outra solução) quando você precisa de:

  • Diretório raiz fora do padrão: nos planos Web, WordPress e Cloud ele é fixo
  • Editar o crontab direto ou ter mais controle de horário das tarefas: isso só no VPS
  • Compiladores ou acesso root: só no VPS, segundo a página de recursos suportados da Hostinger
  • Aceitar conexões WebSocket de entrada: em Web e Cloud só existe WebSocket de saída
  • Processos que precisam ficar sempre ativos, como filas, bots e timers infinitos

Se liga num detalhe: a regra documentada de requisições encerradas após 120 segundos e a ausência de suporte a workers sempre ativos é dos apps Node.js em Web e Cloud, e a orientação ali é mover tarefas longas pra cron job. A documentação encontrada não diz que vale igualzinho pra PHP

Isso não quer dizer que todo projeto precisa de VPS, tá? Só se você precisa de algo rodando de pé o tempo todo, tipo uma orquestração n8n com bancos SQL, aí o cenário é outro e este tutorial não atende

O que você precisa antes de publicar o site PHP

Antes de abrir o painel, deixa isso separado:

  • Plano de hospedagem de sites ativo e um domínio
  • Código compatível com PHP 8.2 a 8.5: versões abaixo da 8.2 foram descontinuadas e nem aparecem pra seleção, e sites novos vêm com PHP 8.3 por padrão
  • Lista das extensões que o projeto usa: por exemplo, se a conexão é via PDO com MySQL, anota isso pra conferir no painel
  • Arquivos do site compactados em um único pacote
  • Dump do banco em .sql ou .sql.zip de até 256 MB pro phpMyAdmin (acima disso, o caminho é SSH)
  • Conexão com o banco isolada em um arquivo de configuração, com as credenciais fora do repositório

Esse último item parece frescura, mas é ele que deixa a troca de credenciais local pra produção em um lugar só 😀

Passo a passo: publicar site PHP com banco de dados na Hostinger

Os caminhos de menu abaixo seguem o guia oficial da Hostinger para subir um site e as páginas de suporte linkadas em cada passo. Bora!

  1. Crie o site no hPanel

Caminho: Websites, escolha o plano de hospedagem, clique em Create website, selecione PHP/HTML website, preencha os dados, informe o domínio e clique em Continue

Na tela seguinte, "How do you want to set up your website?", dá pra escolher Upload website files e enviar o pacote do site: inclusive o arquivo do banco: de uma vez só (formatos aceitos: .zip, .sql, .tar, .tar.gz, .tgz, .7z, .gz e .sql.gz). Se preferir ir com calma, segue o passo a passo com File Manager e phpMyAdmin separados, como nos próximos itens

Resultado esperado: o site aparece na lista de Websites, com Dashboard próprio

Erro comum: escolher outro tipo de site no lugar de PHP/HTML website, sendo que o projeto é PHP puro

  1. Confira a versão do PHP e as extensões

Caminho: Websites > Dashboard > PHP Configuration (na barra lateral), escolha a versão e clique em Update. A troca de versão leva alguns minutos

Na mesma página tem duas abas: PHP extensions (liga e desliga as extensões instaladas além das nativas) e PHP options (configurações básicas, funções desabilitadas e limites de recursos). As Built-in Extensions da versão atual não podem ser desativadas

Resultado esperado: a versão escolhida aparece como ativa e as extensões da sua lista estão ligadas

Erro comum: código preso a PHP abaixo de 8.2. Essas versões não estão mais disponíveis, então o ajuste tem que ser no código, não no painel

  1. Envie os arquivos para public_html

Pelo File Manager: Websites > Dashboard > File Manager, entre em public_html, clique em Upload no canto superior direito, escolha File e envie o pacote compactado. Depois, clique com o botão direito nele e escolha Extract. O limite de upload por ali é de 100 GB

Prefere enviar por FTP? Os dados ficam em Websites > Dashboard > FTP Accounts:

– Host: o IP da sua hospedagem – Usuário: único por site – Porta: 21 (FTP simples) – Pasta de upload do domínio principal: public_html – Senha: não aparece no hPanel, você cria ou troca em Change FTP Password

Resultado esperado: o index.php (ou index.html) fica direto dentro de public_html

Erro comum: o zip tinha uma pasta dentro e o site foi parar em public_html/meu-site/. Aí o domínio abre vazio ou com erro. Move o conteúdo um nível pra cima e apaga o zip depois

  1. Prepare o arquivo .sql

Antes de importar, o dump precisa seguir os requisitos da Hostinger para bancos:

– Formato .sql ou .sql.zip – Sem comandos que criem ou apaguem banco, como DROP DATABASE IF EXISTS ou CREATE DATABASE – Sem comandos que exijam privilégio SUPER – Sem linhas com DEFINER, PROCEDURE ou TRIGGER

Resultado esperado: um arquivo que contém só a criação das tabelas e os dados

Erro comum: exportar do ambiente local com DEFINER no meio do dump e a importação travar. Abre o arquivo num editor e procura por essas palavras antes de subir. Tome cuidado: se o projeto depende de procedures ou triggers, isso precisa ser resolvido no código ou recriado de outro jeito

  1. Crie o banco e importe o dump

Crie o banco e o usuário na área de bancos de dados (Databases Management) do Dashboard do site

Depois, abra o phpMyAdmin, selecione o banco na barra lateral esquerda, clique em Import, escolha o arquivo .sql e clique em Go

Resultado esperado: as tabelas aparecem na barra lateral do phpMyAdmin com os dados

Erro comum: dump acima de 256 MB. Pelo phpMyAdmin não rola, o caminho documentado é SSH, que existe nos planos Web Premium, Web Business e Cloud e fica restrito ao diretório home

  1. Ajuste a conexão com o banco

Depois de importar, atualize no arquivo de configuração do site o nome do banco, o usuário, a senha e o host

Onde achar esses dados? Em Websites > Dashboard > Databases Management. Nome do banco e usuário aparecem em MySQL Database e MySQL User, o hostname de todos os bancos é localhost e a senha é a que você definiu na criação (dá pra redefinir pelo ícone de reticências vertical ao lado do banco). A documentação de bancos indica a porta 3306

Agora o porquê do arquivo separado: tudo dentro de public_html é público, e a documentação do File Manager orienta não deixar ali configuração com credenciais nem backups. Então o config fica um nível acima

Exemplo didático (credenciais fictícias, troque pelas suas), salvo como config.php FORA de public_html:

<?php
// config.php (fora de public_html)
return [
    'host'   => 'localhost',
    'port'   => 3306,
    'dbname' => 'nome_do_banco',
    'user'   => 'usuario_do_banco',
    'pass'   => 'troque-pela-senha-real',
];

E dentro de public_html, o arquivo que abre a conexão com PDO:

<?php
// public_html/db.php
$config = require dirname(__DIR__) . '/config.php';

$dsn = sprintf(
    'mysql:host=%s;port=%d;dbname=%s;charset=utf8mb4',
    $config['host'],
    $config['port'],
    $config['dbname']
);

$pdo = new PDO($dsn, $config['user'], $config['pass'], [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);

Resultado esperado: as páginas que consultam o banco carregam sem erro de conexão

Erro comum: subir o config com 127.0.0.1 e o usuário root da sua máquina, ou largar o config e o dump .sql dentro de public_html, onde qualquer um pode tentar baixar

  1. Confira a raiz pública

A raiz do site é public_html e o diretório raiz não pode ser alterado nos planos Web, WordPress e Cloud (restrição do painel)

Seu projeto tem uma pasta public que deveria ser a raiz? A alternativa documentada é deixar os arquivos numa subpasta e criar um redirecionamento no .htaccess com RewriteEngine. A regra exata depende da estrutura do seu projeto, então escreve, testa e valida com o passo de rotas lá embaixo

Quem precisa mesmo mudar o diretório raiz pode considerar um VPS

Erro comum: a regra do .htaccess funciona na home, mas as URLs internas dão 404

  1. Aponte o domínio

No provedor onde o domínio foi registrado, troque os nameservers pelos que aparecem no seu painel da Hostinger: os valores variam conforme o domínio, então usa sempre o que está no seu hPanel, não um exemplo genérico. Também dá pra apontar por registro A, se preferir

A propagação pode levar até 24 horas, mas costuma levar algumas horas

Erro comum: esquecer do e-mail. Apontar por nameservers configura o e-mail pra Hostinger Email, então quem usa outro provedor de e-mail precisa ajustar os registros MX (e revisar SPF, DKIM e DMARC)

  1. Ative o SSL

Os planos Web, Cloud e Agency incluem SSL vitalício gratuito pra domínios e subdomínios hospedados. Se não ativou sozinho: Websites > Dashboard > Security > SSL > Install SSL

A renovação é automática enquanto o site estiver hospedado lá e o domínio apontar pra Hostinger. Depois de instalado, o HTTPS é forçado por padrão em Web e Cloud (dá pra desfazer pelas reticências ao lado do domínio, em Unforce HTTPS)

Erro comum: links e assets fixos em http:// no código. Com HTTPS forçado, troca pra caminhos relativos ou https://

Como validar se o site, o banco e as rotas estão funcionando

Com tudo no ar, faz esse checklist antes de comemorar:

  • Abre o domínio em https:// e confere se o cadeado aparece
  • Navega pelas rotas principais clicando nos links do próprio site
  • Digita direto na barra do navegador uma URL interna (tipo /contato ou /produtos/1): é isso que testa de verdade a regra do .htaccess
  • Abre uma página que lê do banco e confere se os dados importados aparecem
  • Tenta abrir pelo navegador o caminho do config e do dump: eles não podem carregar (se estão fora de public_html, nem têm URL)
  • Procura no código por URLs do ambiente local, como localhost com porta de servidor de desenvolvimento, e remove tudo

Criou um arquivo de teste de conexão pra conferir o banco? Apaga depois, ele não precisa ficar público

Erro comum: confundir propagação de DNS em andamento com erro de deploy. Se o domínio ainda abre o site antigo ou não resolve, pode ser só a propagação. Dá um tempo antes de sair mexendo nos arquivos (já vi muita gente desmontar um deploy certinho por causa disso haha)

Curte ver app com banco de dados nascendo de outro jeito? Se liga nesse vídeo do canal: o novo Google AI Studio criando app FullStack com banco de dados, será que tá bom? 🙂

Conteúdo complementar do Hora de Codar para conhecer o canal; não é uma demonstração específica desta notícia ou versão.

Próximo passo depois de publicar

Se ainda não tem plano e o seu projeto cabe no cenário deste tutorial (PHP com MySQL, sem processo sempre ativo), a hospedagem de sites da Hostinger cobre o que você precisa sem te obrigar a administrar servidor: PHP 8.2 a 8.5 selecionável, phpMyAdmin, cron pelo hPanel e SSL vitalício gratuito nos planos Web, Cloud e Agency

Com o site no ar, o trabalho vira manutenção:

  • Guarda os dumps do banco fora de public_html, num lugar só seu
  • Fica de olho na versão do PHP: versões antigas saem da lista, então testa o código na próxima versão antes que a sua seja descontinuada
  • Precisa de tarefa agendada? Configura o cron job pelo hPanel

Agora, se você bateu em algum limite lá de cima (raiz fixa, crontab, root, WebSocket de entrada ou worker rodando direto), aí sim faz sentido estudar VPS. Começa pelo guia de otimizar PHP 8 na VPS, que já parte do servidor configurado por você

Ficou alguma dúvida no deploy? Deixa nos comentários que a gente troca uma ideia

até o próximo post! 😀

Quer aprender mais sobre inteligência artificial e programação na prática? Conheça o canal Hora de Codar no YouTube e acompanhe os próximos vídeos.

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 30min

Blog | Mais populares