Como instalar e configurar o xamp e phpmyadmin na vps Ubuntu.
Aprenda a montar um ambiente equivalente ao XAMPP na sua VPS Linux usando Nginx, MariaDB, PHP-FPM e phpMyAdmin — passo a passo para iniciantes.
Este guia é voltado pra quem está montando sua primeira VPS. Vamos do servidor recém-provisionado até o phpMyAdmin acessível pelo navegador com uma página PHP funcionando.
Pré-requisitos
Antes de começar, confirme que você tem o ambiente mínimo.
Você precisa de uma VPS com Ubuntu 24.04 LTS (Debian 12 também funciona com pequenos ajustes), acesso SSH como root ou usuário com sudo, e ao menos 1 GB de RAM livre. Tenha em mãos o IP público da máquina e, opcionalmente, um domínio apontado pra ela.
Ubuntu 24.04 LTS 1 GB 22, 80, 443, 3306 SSH com sudo Nenhum dos pacotes deste guia exige compilação manual. Tudo vem dos repositórios oficiais do Ubuntu.
Atualização do sistema
Comece com o sistema em estado limpo. Repositórios desatualizados causam metade dos problemas em tutoriais como este.
Atualize o índice de pacotes e aplique upgrades pendentes:
sudo apt update && sudo apt upgrade -yEsse comando lê os repositórios em /etc/apt/sources.list, baixa os manifestos atualizados e instala qualquer versão mais nova dos pacotes já presentes. Pode levar de 30 segundos a alguns minutos.
Instale utilitários básicos que vamos usar no caminho:
sudo apt install -y curl wget unzip software-properties-commonInstalação do Nginx
O Nginx vai exercer o papel que o Apache desempenha no XAMPP padrão. Receber requisições HTTP e, quando o arquivo é PHP, repassar pro PHP-FPM via socket.
Instale o pacote do Nginx:
sudo apt install -y nginxHabilite e inicie o serviço:
sudo systemctl enable --now nginxAcessando http://SEU_IP no navegador, você deve ver a página padrão “Welcome to nginx”. Se o firewall estiver bloqueando, libere as portas HTTP/HTTPS (80 e 443):
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enableSempre libere a porta 22 (OpenSSH) antes de ativar o UFW. Esquecer essa regra desconecta sua sessão atual e bloqueia futuras conexões. Você precisaria do console emergencial do painel da VPS pra recuperar.
Instalação do MariaDB
MariaDB é um fork drop-in do MySQL e é o que vem por padrão no XAMPP atual. Os comandos mysql continuam funcionando igual.
Instale o servidor:
sudo apt install -y mariadb-serverRode o assistente de segurança pra remover defaults inseguros:
sudo mysql_secure_installationResponda às perguntas assim:
Enter current password for root: deixe em branco (Enter)Switch to unix_socket authentication: nChange the root password?: Y — defina uma senha forte e anoteRemove anonymous users?: YDisallow root login remotely?: YRemove test database?: YReload privilege tables now?: Y
Crie um usuário administrativo separado pro phpMyAdmin (mais seguro do que usar root):
sudo mysql -u root -pDentro do prompt do MariaDB:
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'TROQUE_ESTA_SENHA';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;Instalação do PHP-FPM
PHP-FPM (FastCGI Process Manager) é o processo que o Nginx vai chamar pra executar scripts PHP. No XAMPP isso fica embutido no Apache via mod_php; com Nginx separamos em um daemon próprio.
Instale o PHP e as extensões mais comuns:
sudo apt install -y php-fpm php-mysql php-mbstring php-zip php-gd \
php-curl php-xml php-bcmath php-intlNo Ubuntu 24.04 isso instala PHP 8.3 por padrão. Confirme com:
php -vVerifique se o socket do PHP-FPM está ativo:
sudo systemctl status php8.3-fpmDeve mostrar active (running). O socket fica em /run/php/php8.3-fpm.sock — é esse caminho que o Nginx vai referenciar.
Configuração do Nginx para servir PHP
Agora vinculamos os três componentes. Vamos criar um site dedicado que substitui a configuração padrão.
Crie o diretório web e ajuste permissões:
sudo mkdir -p /var/www/local
sudo chown -R www-data:www-data /var/www/localCrie o arquivo de configuração do site:
sudo nano /etc/nginx/sites-available/localCole o conteúdo abaixo (substitua seu_dominio.com pelo seu domínio ou pelo IP da VPS):
server {
listen 80;
server_name seu_dominio.com;
root /var/www/local;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}Ative o site, desative o padrão e recarregue o Nginx:
sudo ln -s /etc/nginx/sites-available/local /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginxO comando nginx -t valida a sintaxe antes do reload. Se mostrar syntax is ok e test is successful, está pronto.
Crie um arquivo de teste pra confirmar que o PHP está sendo processado:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/local/info.phpAcesse http://SEU_IP/info.php no navegador. Você deve ver a tela colorida do phpinfo() com todas as informações da versão. Depois de confirmar, apague o arquivo — ele expõe detalhes que não devem ser públicos:
sudo rm /var/www/local/info.phpInstalação do phpMyAdmin
Com Nginx, PHP e MariaDB funcionando, agora adicionamos o painel de administração do banco.
Instale o pacote:
sudo apt install -y phpmyadminDurante a instalação:
- Quando perguntar
Web server to reconfigure automatically, não selecione nada (Apache nem Lighttpd) — pressione Tab e Enter pra pular. O Nginx não está na lista. - Em
Configure database for phpmyadmin with dbconfig-common: Yes - Defina uma senha pro usuário interno do phpMyAdmin
Crie um symlink do phpMyAdmin pro diretório web:
sudo ln -s /usr/share/phpmyadmin /var/www/local/phpmyadminAcesse http://SEU_IP/phpmyadmin no navegador. Faça login com o usuário admin e a senha definida no Passo 07.
Expor /phpmyadmin publicamente é um vetor comum de ataque por força bruta. Em produção, adicione restrição por IP no bloco de location ou proteja com autenticação básica do Nginx via auth_basic e arquivo .htpasswd.
Verificação final
Uma série rápida de checagens confirma que tudo está conectado.
systemctl is-active nginx php8.3-fpm mariadb
O output deve ser três linhas com active. Caso algum mostre inactive ou failed, rode systemctl status NOME_DO_SERVICO pra ver o motivo.
No navegador, valide os dois endpoints:
http://SEU_IP/— página em branco ou listagem (semindex.phpainda, é esperado)http://SEU_IP/phpmyadmin— tela de login do phpMyAdmin
Resolução de problemas
Erro 502 Bad Gateway ao acessar arquivo PHP
Quase sempre é o caminho do socket do PHP-FPM errado. Verifique a versão real instalada:
ls /run/php/
Se o arquivo for php8.2-fpm.sock em vez de php8.3-fpm.sock, ajuste a linha fastcgi_pass no arquivo de configuração do Nginx e recarregue.
phpMyAdmin retorna 404
O symlink não foi criado ou o diretório web está diferente. Confira:
ls -la /var/www/local/phpmyadmin
Deve aparecer uma seta apontando pra /usr/share/phpmyadmin. Se não, refaça o ln -s do Passo 15.
Acesso negado ao logar no phpMyAdmin
O usuário admin precisa existir no MariaDB. Entre como root:
sudo mysql -u root -p
E rode SELECT User, Host FROM mysql.user;. Se admin não aparecer, refaça o CREATE USER do Passo 07.
Próximos passos
Com a stack funcionando, considere os próximos pontos:
- HTTPS com Let’s Encrypt: instale o
certbote gere certificado gratuito pro seu domínio comsudo certbot --nginx. - Backups automáticos do MariaDB: configure
mysqldumpem cron diário com rotação semanal. - Ajuste de pools do PHP-FPM: em
/etc/php/8.3/fpm/pool.d/www.conf, calibrepm.max_childrenconforme a RAM disponível. - Separação de usuário pra cada site: rode cada projeto sob um usuário Linux dedicado pra isolar permissões.
Se você está colocando essa stack em produção, uma VPS Hostini já vem com filtro de pacotes em kernel pra mitigar ataques DDoS — relevante quando o phpMyAdmin fica exposto, mesmo com restrição de IP.
Perguntas frequentes
Posso instalar o XAMPP original em uma VPS Linux ao invés de montar a stack manualmente?
Tecnicamente sim, o XAMPP tem instalador `.run` pra Linux, mas não é recomendado em servidor: ele roda como root por padrão, fica fora do gerenciador de pacotes (sem atualizações de segurança via apt), traz binários próprios que conflitam com os do sistema e usa Apache. Pra ambiente de produção, montar Nginx + PHP-FPM + MariaDB nativamente é mais seguro e leve.
Por que o Nginx não aparece na lista de servidores web quando instalo o phpMyAdmin?
O pacote `phpmyadmin` do Debian/Ubuntu só oferece configuração automática pra Apache e Lighttpd. Pra usar com Nginx, você pula essa etapa e cria manualmente um symlink do diretório `/usr/share/phpmyadmin` pra dentro do seu web root, como mostrado no tutorial.
Qual a diferença entre PHP-FPM e mod_php do Apache?
O `mod_php` roda dentro do processo do Apache, então cada requisição (mesmo de arquivos estáticos) carrega o interpretador PHP em memória. O PHP-FPM é um daemon separado que processa só requisições PHP, chamado via FastCGI pelo Nginx. Resultado: menor consumo de RAM e melhor isolamento entre o servidor web e o runtime PHP.
Preciso reiniciar o PHP-FPM toda vez que mudo um arquivo PHP?
Não. Arquivos `.php` são lidos a cada requisição automaticamente. Você só precisa reiniciar o PHP-FPM (`sudo systemctl restart php8.3-fpm`) quando muda configurações do próprio PHP — arquivos em `/etc/php/8.3/fpm/` como `php.ini` ou os pools.
É seguro deixar o phpMyAdmin acessível em /phpmyadmin?
Não em produção. Esse path é alvo constante de bots tentando força bruta. As mitigações comuns são: mover pra URL não-óbvia (ex: `/admin-db-x7k2`), restringir por IP no bloco location do Nginx (`allow IP; deny all;`), adicionar autenticação HTTP básica antes do login do phpMyAdmin, ou acessar só via túnel SSH.
Como sei qual versão do PHP foi instalada e como atualizo?
Rode `php -v` pra ver a versão atual. No Ubuntu 24.04 vem PHP 8.3 por padrão. Pra usar uma versão mais nova (ex: 8.4) você precisa do PPA `ondrej/php`: `sudo add-apt-repository ppa:ondrej/php && sudo apt update && sudo apt install php8.4-fpm`. Lembre de atualizar o caminho do socket no Nginx ao trocar a versão.