Como instalar WordPress em VPS com Docker
Instalar WordPress em VPS com Docker é a forma mais prática de ter controle total sobre o seu site: você define os recursos, gerencia as atualizações e paga apenas pela VPS. A stack mínima precisa de três serviços — WordPress (PHP-FPM), MariaDB e Nginx (proxy reverso) — configurados em um único docker-compose.yml.
Pré-requisitos
Você precisa de uma VPS com Ubuntu 22.04+, Docker instalado e um domínio apontando para o IP da VPS. Confirme que o ambiente está pronto:
docker --version # 24.x ou superior
docker compose version # v2.x ou superior
# Porta 80 e 443 liberadas no firewall
ufw allow 80 && ufw allow 443docker-compose.yml completo para WordPress
Crie o diretório /opt/wordpress e salve o arquivo abaixo. A stack usa PHP-FPM (mais leve que a imagem Apache) e volumes nomeados para persistência:
services:
db:
image: mariadb:11
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: wordpress
MYSQL_USER: wp
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
wordpress:
image: wordpress:6-php8.3-fpm-alpine
restart: always
depends_on:
db:
condition: service_healthy
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
nginx:
image: nginx:alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- wp_data:/var/www/html:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- certbot_conf:/etc/letsencrypt
- certbot_www:/var/www/certbot
depends_on:
- wordpress
certbot:
image: certbot/certbot
volumes:
- certbot_conf:/etc/letsencrypt
- certbot_www:/var/www/certbot
volumes:
db_data:
wp_data:
certbot_conf:
certbot_www:Configuração do Nginx
Crie o arquivo nginx.conf para proxy reverso com suporte a PHP-FPM. Primeiro em HTTP para o desafio do Certbot, depois adicione HTTPS:
server {
listen 80;
server_name seudominio.com.br www.seudominio.com.br;
root /var/www/html;
index index.php;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
client_max_body_size 64M;
}Subir e gerar o certificado SSL
Com os arquivos prontos, suba o stack e gere o certificado Let's Encrypt:
cd /opt/wordpress
# Subir todos os containers
docker compose up -d
# Aguardar containers ficarem saudáveis
docker compose ps
# Gerar certificado SSL
docker compose run --rm certbot certonly \
--webroot --webroot-path=/var/www/certbot \
--email seu@email.com --agree-tos --no-eff-email \
-d seudominio.com.br -d www.seudominio.com.brRenovação automática do certificado
Certificados Let's Encrypt expiram em 90 dias. Configure um cron para renovar automaticamente:
# Adicionar ao crontab do root (crontab -e)
0 3 * * * cd /opt/wordpress && docker compose run --rm certbot renew --quiet && docker compose exec nginx nginx -s reload$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o WordPress em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.