Nova Página

# Wiki — Instalação do Ambiente pm.ro.gov.br 

 

 > **Autor:** moraes 

 > **Data:** 06/05/2026 

 > **Objetivo:** Replicar o ambiente de produção do site WordPress `pm.ro.gov.br` em um servidor de homologação. 

 > **Ambiente testado:** Debian GNU/Linux 13 (trixie) — `sirius-web-hml-01` 

 

 --- 

 

 ## ⚠️ Diferenças entre Produção e Homologação 

 

 | Componente | Produção | Homologação (este guia) | 

 |--------------|---------------------------|----------------------------| 

 | SO | Ubuntu 22.04.5 LTS | Debian 13 (trixie) | 

 | Apache | 2.4.52 | 2.4.66 ✅ | 

 | PHP | 8.1.2 | 8.1.34 ✅ (via sury.org) | 

 | MariaDB | 10.6.22 | 11.8.6 ⚠️ (ver nota) | 

 | WordPress | 6.9.4 | 6.9.4 ✅ | 

 | SSL/Proxy | Proxy reverso 172.16.139.3| Sem proxy (HTTP local) | 

 | MariaDB bind | 0.0.0.0 (risco em prod) | 127.0.0.1 ✅ (mais seguro) | 

 

 > **Nota MariaDB:** O Debian trixie não oferece suporte ao MariaDB 10.6 nos repositórios oficiais da MariaDB. A versão 11.8.6 é totalmente compatível com WordPress 6.9.4. 

 

 --- 

 

 ## 1. Pré-requisitos 

 

 - Servidor com Debian 13 (trixie) instalado 

 - Acesso sudo 

 - Conexão com a internet 

 

 --- 

 

 ## 2. Atualização do sistema e pacotes base 

 

 ```bash 

 sudo apt update 

 sudo apt install -y curl wget unzip git apt-transport-https ca-certificates gnupg lsb-release 

 ``` 

 

 --- 

 

 ## 3. Apache 2.4 

 

 ### Instalação 

 

 ```bash 

 sudo apt install -y apache2 

 ``` 

 

 ### Ativar módulos necessários 

 

 ```bash 

 sudo a2enmod rewrite headers proxy proxy_http 

 sudo systemctl restart apache2 

 ``` 

 

 ### Validação 

 

 ```bash 

 sudo apache2ctl -v # deve exibir Apache/2.4.x 

 sudo systemctl is-active apache2 # deve retornar: active 

 ``` 

 

 --- 

 

 ## 4. PHP 8.1 

 

 O Debian trixie não inclui PHP 8.1 nos repositórios padrão. É necessário usar o repositório **sury.org**: 

 

 ### Adicionar repositório 

 

 ```bash 

 curl -sSLo /tmp/sury.gpg https://packages.sury.org/php/apt.gpg 

 sudo install -o root -g root -m 644 /tmp/sury.gpg /etc/apt/trusted.gpg.d/sury-php.gpg 

 echo "deb https://packages.sury.org/php/ trixie main" | sudo tee /etc/apt/sources.list.d/sury-php.list 

 sudo apt update 

 ``` 

 

 ### Instalar PHP 8.1 e extensões 

 

 ```bash 

 sudo apt install -y \ 

 php8.1 \ 

 php8.1-mysql \ 

 php8.1-xml \ 

 php8.1-curl \ 

 php8.1-mbstring \ 

 php8.1-zip \ 

 php8.1-gd \ 

 php8.1-intl \ 

 php8.1-bcmath \ 

 php8.1-soap \ 

 php8.1-opcache \ 

 libapache2-mod-php8.1 

 ``` 

 

 ### Validação 

 

 ```bash 

 php8.1 -v 

 # PHP 8.1.x (cli) ... with Zend OPcache 

 

 php8.1 -m | grep -E "^(curl|mbstring|mysqli|zip|gd|xml|intl|bcmath|soap|Zend OPcache)$" 

 # deve listar todas as extensões acima 

 ``` 

 

 --- 

 

 ## 5. MariaDB 

 

 ### Instalar (versão do repositório Debian) 

 

 ```bash 

 sudo apt install -y mariadb-server mariadb-client 

 sudo systemctl enable mariadb 

 sudo systemctl start mariadb 

 ``` 

 

 ### ✅ Restringir bind para 127.0.0.1 (segurança) 

 

 ```bash 

 sudo sed -i 's/^bind-address\s*=.*/bind-address = 127.0.0.1/' \ 

 /etc/mysql/mariadb.conf.d/50-server.cnf 

 

 sudo systemctl restart mariadb 

 ``` 

 

 ### Validação 

 

 ```bash 

 mariadb --version 

 sudo systemctl is-active mariadb # deve retornar: active 

 grep bind-address /etc/mysql/mariadb.conf.d/50-server.cnf 

 # deve mostrar: bind-address = 127.0.0.1 

 ``` 

 

 --- 

 

 ## 6. Banco de dados WordPress 

 

 > ⚠️ Altere a senha `SenhaSitepm@2026` para uma senha forte antes de usar em produção. 

 

 ```bash 

 sudo mysql -u root <<'SQL' 

 CREATE DATABASE IF NOT EXISTS sitepm 

 CHARACTER SET utf8mb4 

 COLLATE utf8mb4_unicode_ci; 

 

 CREATE USER IF NOT EXISTS 'pessoa'@'localhost' 

 IDENTIFIED BY 'SenhaSitepm@2026'; 

 

 GRANT ALL PRIVILEGES ON sitepm.* TO 'pessoa'@'localhost'; 

 FLUSH PRIVILEGES; 

 SQL 

 ``` 

 

 ### Validação 

 

 ```bash 

 sudo mysql -u root -e "SHOW DATABASES LIKE 'sitepm';" 

 # deve listar o banco sitepm 

 ``` 

 

 --- 

 

 ## 7. WordPress 6.9.4 

 

 ### Download e extração 

 

 ```bash 

 cd /tmp 

 curl -O https://wordpress.org/wordpress-6.9.4.tar.gz 

 tar -xzf wordpress-6.9.4.tar.gz 

 sudo rsync -a --delete wordpress/ /var/www/html/ 

 sudo chown -R www-data:www-data /var/www/html 

 sudo find /var/www/html -type d -exec chmod 755 {} \; 

 sudo find /var/www/html -type f -exec chmod 644 {} \; 

 rm -rf /tmp/wordpress /tmp/wordpress-6.9.4.tar.gz 

 ``` 

 

 ### Criar wp-config.php 

 

 ```bash 

 sudo cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php 

 

 sudo sed -i \ 

 "s/database_name_here/sitepm/; \ 

 s/username_here/pessoa/; \ 

 s/password_here/SenhaSitepm@2026/; \ 

 s/'localhost'/'127.0.0.1'/" \ 

 /var/www/html/wp-config.php 

 ``` 

 

 ### ⚠️ Inserir bloco de proxy reverso (CRÍTICO) 

 

 Este bloco corrige o loop de redirecionamento HTTPS (incidente 28/04/2026). 

 **Nunca remova este bloco se o ambiente usar proxy reverso.** 

 

 Insira manualmente no `wp-config.php`, **antes** da linha `require_once ABSPATH . 'wp-settings.php'`: 

 

 ```php 

 /* Detecta HTTPS quando atrás de proxy reverso */ 

 if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 

 'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) { 

 $_SERVER['HTTPS'] = 'on'; 

 } 

 ``` 

 

 Ou via linha de comando: 

 

 ```bash 

 sudo sed -i "/require_once ABSPATH . 'wp-settings.php';/i \\ 

 \/* Detecta HTTPS quando atras de proxy reverso *\\/\\ 

 if ( isset( \$_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&\\ 

 'https' === strtolower( \$_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) {\\ 

 \$_SERVER['HTTPS'] = 'on';\\ 

 }" /var/www/html/wp-config.php 

 ``` 

 

 ### Gerar chaves secretas 

 

 Acesse: https://api.wordpress.org/secret-key/1.1/salt/ 

 Substitua o bloco de chaves no `wp-config.php`. 

 

 ### Permissões finais 

 

 ```bash 

 sudo chmod 640 /var/www/html/wp-config.php 

 sudo chown www-data:www-data /var/www/html/wp-config.php 

 ``` 

 

 --- 

 

 ## 8. VirtualHost Apache 

 

 ```bash 

 sudo bash -c 'cat > /etc/apache2/sites-available/wordpress.conf <<EOF 

 <VirtualHost *:80> 

 ServerName localhost 

 DocumentRoot /var/www/html 

 

 <Directory /var/www/html> 

 Options FollowSymLinks 

 AllowOverride All 

 Require all granted 

 </Directory> 

 

 ErrorLog \${APACHE_LOG_DIR}/error.log 

 CustomLog \${APACHE_LOG_DIR}/access.log combined 

 </VirtualHost> 

 EOF' 

 

 sudo a2dissite 000-default.conf 

 sudo a2ensite wordpress.conf 

 sudo systemctl reload apache2 

 ``` 

 

 ### Validação 

 

 ```bash 

 curl -s -o /dev/null -w "%{http_code}" http://localhost/ 

 # 302 = WordPress aguardando configuração inicial (esperado) 

 # 200 = WordPress já configurado 

 ``` 

 

 --- 

 

 ## 9. Segurança 

 

 ### fail2ban (proteção brute-force) 

 

 ```bash 

 sudo apt install -y fail2ban 

 sudo systemctl enable fail2ban 

 sudo systemctl start fail2ban 

 sudo systemctl is-active fail2ban # deve retornar: active 

 ``` 

 

 ### auditd (auditoria de syscalls) 

 

 ```bash 

 sudo apt install -y auditd 

 sudo systemctl enable auditd 

 sudo systemctl start auditd 

 sudo systemctl is-active auditd # deve retornar: active 

 ``` 

 

 --- 

 

 ## 10. Ferramentas de diagnóstico 

 

 ```bash 

 sudo apt install -y htop ncdu net-tools 

 ``` 

 

 --- 

 

 ## 11. Finalização — WP Admin 

 

 Acesse: `http://<IP-DO-SERVIDOR>/wp-admin/install.php` 

 

 Complete o assistente de instalação do WordPress e em seguida instale os plugins abaixo via **Plugins → Adicionar novo**: 

 

 ### Plugins (replicar da produção) 

 

 | Plugin | Função | 

 |--------|--------| 

 | elementor | Page builder | 

 | elementor-pro | Page builder Pro (licença necessária) | 

 | astra-sites | Importador de templates Astra | 

 | astra-widgets | Widgets do tema Astra | 

 | all-in-one-wp-migration | **Usar para importar backup da produção** | 

 | wps-hide-login | Oculta `/wp-login.php` | 

 | wp-mail-smtp | Relay SMTP de e-mail | 

 | wp-seopress | SEO | 

 | wpfront-user-role-editor | Permissões de usuários | 

 | loginpress | Personalização da tela de login | 

 | nextgen-gallery | Galeria de imagens | 

 | hide-admin-menu | Restrição de menu administrativo | 

 | header-footer-code-manager | Código no header/footer | 

 | header-footer-elementor | Header e footer via Elementor | 

 | custom-css-js | CSS/JS customizado | 

 | duplicate-page | Duplicar páginas | 

 | duplicate-menu | Duplicar menus | 

 | classic-editor | Editor clássico (desativa Gutenberg) | 

 | re-add-underline-justify | Botões de formatação extra | 

 | ele-custom-skin | Skin para Elementor | 

 

 ### Tema 

 

 1. Instalar **Astra** (tema pai) 

 2. Instalar **astra-child** (tema filho) 

 3. Ativar o **astra-child** 

 

 ### Arquivos customizados (copiar da produção) 

 

 ```bash 

 # Copiar do servidor de produção: 

 scp moraes@172.16.139.59:/var/www/html/hardesec.php /var/www/html/ 

 scp moraes@172.16.139.59:/var/www/html/index.js /var/www/html/ 

 sudo chown www-data:www-data /var/www/html/hardesec.php /var/www/html/index.js 

 ``` 

 

 --- 

 

 ## 12. Importar banco da produção (via all-in-one-wp-migration) 

 

 1. No servidor de **produção**: Plugins → All-in-One WP Migration → Exportar → Arquivo 

 2. Baixe o arquivo `.wpress` gerado 

 3. No servidor de **homologação**: Plugins → All-in-One WP Migration → Importar → Arquivo 

 4. Após a importação, atualizar as URLs no banco: 

 

 ```bash 

 sudo mysql -u root sitepm <<'SQL' 

 UPDATE wp_options SET option_value = 'http://localhost' 

 WHERE option_name IN ('siteurl', 'home'); 

 SQL 

 ``` 

 

 --- 

 

 ## 13. Validação final do ambiente 

 

 ```bash 

 echo "=== Serviços ===" 

 sudo systemctl is-active apache2 mariadb fail2ban auditd 

 

 echo "=== Versões ===" 

 sudo apache2ctl -v | head -1 

 php8.1 -v | head -1 

 mariadb --version 

 

 echo "=== Banco ===" 

 sudo mysql -u root -e "SHOW DATABASES LIKE 'sitepm';" 

 

 echo "=== WordPress ===" 

 ls /var/www/html/wp-login.php 

 

 echo "=== HTTP ===" 

 curl -s -o /dev/null -w "Status: %{http_code}\n" http://localhost/ 

 ``` 

 

 ---