Como instalar o WordPress em uma VPS
Executar o WordPress na sua própria VPS dá controle sobre o aplicativo, o banco de dados e os backups. Este tutorial implanta os contêineres oficiais do WordPress e MySQL com Docker Compose, coloca-os atrás de HTTPS e explica as primeiras tarefas de configuração e manutenção.
Pré-requisitos
Prepare uma VPS Ubuntu 22.04 ou 24.04 nova, com acesso SSH, IP público e pelo menos 2 GB de RAM. Reserve mais memória se esperar usar vários plugins, processar imagens com frequência ou ter editores trabalhando simultaneamente. Crie um registro A, como www.example.com, apontando para o servidor e confirme que o firewall do provedor permite SSH, HTTP e HTTPS.
Você também precisa de um cliente SSH local, conhecimentos de Docker e um destino de backup fora da VPS. É fácil iniciar o WordPress e também é fácil perdê-lo se o banco de dados e os uploads não forem copiados para outro local.
Etapa 1, conectando-se ao servidor
Conecte-se e atualize o servidor:
ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curlCrie um diretório dedicado com permissões restritas:
mkdir -p /opt/wordpress
cd /opt/wordpress
chmod 750 /opt/wordpressNão execute o WordPress a partir do seu diretório pessoal se outras pessoas puderem acessá-lo. Restrinja a leitura do arquivo Compose e do arquivo de ambiente aos administradores.
Etapa 2, instalando o Docker e o Docker Compose
Instale o Docker Engine e o plugin Compose seguindo as instruções atuais do Docker para Ubuntu. Confira o ambiente de execução antes de criar o conjunto de serviços:
docker --version
docker compose version
systemctl enable --now dockerO plugin Compose é invocado com docker compose, não necessariamente com o binário antigo docker-compose. Prefira o comando atual para que o mesmo arquivo funcione em uma instalação Docker com suporte.
Etapa 3, executando o WordPress com Docker Compose
Crie um arquivo .env e substitua todos os marcadores de posição antes de iniciar. Mantenha esse arquivo fora do Git e use valores longos e aleatórios para as duas senhas do banco de dados:
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=REPLACE_WITH_A_RANDOM_VALUE
MYSQL_ROOT_PASSWORD=REPLACE_WITH_ANOTHER_RANDOM_VALUE
WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=REPLACE_WITH_A_RANDOM_VALUECrie compose.yaml:
services:
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: unless-stopped
depends_on:
- db
environment:
WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
ports:
- "127.0.0.1:8080:80"
volumes:
- wordpress_data:/var/www/html
volumes:
db_data:
wordpress_data:A imagem padrão wordpress:latest inclui o Apache e é adequada para a maioria das configurações. Quem está começando deve usar essa imagem. A variante fpm exige um servidor web externo; se optar por ela, nunca publique a porta 9000 no servidor, pois expor o socket FPM é um risco de segurança.
Desde março de 2021, a imagem Docker oficial do WordPress gera automaticamente wp-config.php a partir das variáveis de ambiente fornecidas na primeira inicialização. Não crie nem edite esse arquivo dentro do contêiner, configure o WordPress inteiramente por meio de variáveis de ambiente.
Inicie o conjunto de serviços e confira o estado:
docker compose up -d
docker compose ps
docker compose logs --tail 100 wordpressO banco de dados pode levar um instante para aceitar conexões. Não exclua db_data ao diagnosticar um erro de conexão.
Etapa 4, configurando o proxy reverso
O contêiner do WordPress escuta somente na porta localhost 8080, portanto não fica exposto diretamente à internet. Coloque-o atrás de um proxy no servidor, como Caddy ou Nginx, ou use o proxy fornecido pela plataforma da VPS. O proxy deve encaminhar as solicitações de www.example.com para 127.0.0.1:8080 e obter um certificado pelo fluxo ACME compatível.
Abra as portas 80 e 443 no firewall do provedor e no firewall do servidor. Mantenha a porta 8080 fechada para acesso público. Configure a URL do site WordPress com o endereço HTTPS final durante a configuração no navegador, caso contrário os cookies de login e os redirecionamentos podem usar o esquema errado. Se o WordPress estiver atrás de um proxy HTTPS, o proxy reverso precisa encaminhar o cabeçalho X-Forwarded-Proto para que o WordPress gere links HTTPS corretos. Sem esse cabeçalho, a página de login e os redirecionamentos do painel entram em ciclos infinitos.
Etapa 5, primeiro acesso e configuração inicial
Acesse https://www.example.com. Escolha o idioma, defina o título do site e crie a conta de administrador com uma senha exclusiva. Exclua qualquer conteúdo de exemplo não utilizado, atualize a estrutura de links permanentes e instale somente plugins que você tenha avaliado.
Defina o fuso horário correto e confira se o envio de arquivos de mídia funciona. Se o site estiver atrás de um proxy, confirme que o painel informa HTTPS e que os redirecionamentos canônicos não entram em ciclo. Crie uma conta de editor sem privilégios de administrador para as publicações do dia a dia.
Manutenção
Faça backup dos dois volumes nomeados, wordpress_data (temas, plugins e uploads) e db_data (banco de dados), além dos arquivos Compose e .env, por meio de um processo protegido. Teste a restauração do banco de dados e dos uploads em outra máquina. Atualize o WordPress, os plugins e as imagens em uma janela de manutenção e leia as notas de compatibilidade antes de mudar a versão principal do MySQL.
Monitore disco, memória e logs dos contêineres. Se o site ficar indisponível, confira docker compose ps, os logs do WordPress e os logs do banco de dados antes de reiniciar tudo. Uma reinicialização pode ocultar o primeiro erro útil.
Ferramentas mencionadas
WordPress
↗CMS open source presente em grande parte da web, com plugins, temas e editor de blocos integrado
Software auto-hospedado totalmente gratuito. Hospede em qualquer lugar com PHP e MySQL.