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:

    bash
    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 443
    Dica
    Na VPS Runstack você pode instalar Docker diretamente pelo catálogo de apps — ele configura tudo automaticamente, incluindo as regras de firewall.

    docker-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:

    yaml
    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:
    Dica
    Use um arquivo .env no mesmo diretório para guardar DB_ROOT_PASSWORD e DB_PASSWORD — nunca commite senhas em texto puro.

    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:

    nginx
    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:

    bash
    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.br

    Renovação automática do certificado

    Certificados Let's Encrypt expiram em 90 dias. Configure um cron para renovar automaticamente:

    bash
    # 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
    Dica
    nginx -s reload recarrega a configuração sem interromper conexões ativas — não há downtime na renovação.

    $ 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.

    Perguntas frequentes