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/
```
---
No comments to display
No comments to display