Pessoal,
Migrei para o WordPress e mudei o endereço do blog de “jaymebc.blogspot.com” para este atual: “chicletes.jaymebc.com“.
1. Por Que Saí do Blogger?
Desde 2010 eu usava o Blogger para fazer meu blog pessoal (o que é exatamente o propósito dele). Fácil de editar, mais fácil ainda de manter, totalmente de graça.
Só que há umas duas semanas eu fui fazer um post sobre o Windows 95 que está completando 30 anos. Pesquisei, escrevi, corrigi, tudo com muito detalhe (do jeito que eu gosto). Tinha instalação em VM, migração para o Proxmox, tudo funcionando. De repente deu um erro e: o post sumiu.
Tentei recuperar:
– Fui em Configurações → Outros → Fazer backup do conteúdo → baixei o arquivo, mas o post não estava lá.
– Tentei cache do Google → vazio.
– Tentei Wayback Machine → não tinha arquivado.
Perdi o post de vez.
Aí, junto com a puteza e frustração, vieram outras motivações para mudar a hospedagem do blog:
- No Blogger não dá pra mexer no código da página 404 (aquela de página não encontrada).
- Não dá pra fazer upload de fonte personalizada.
- Não dá pra ter controle total.
- É do Google. Se apagar, não tem volta.
- O WordPress tem como salvar as revisões e recuperar a m*erda.
Resolvi, então! Vou migrar!
Procurei vários serviços mas ou eram pagos, ou eram complicados, ou eram proprietários. Resolvi então aproveitar a infra que já tenho aqui em casa, instalar o WordPress local, self-hosted, 100% meu, usar o meu domínio “jaymebc.com” e aprender pra c*aralho com isso! Ora, se o WP é o serviço utilizado por mais de 40% de TODOS os sites da internet, talvez seja o momento de migrar para essa plataforma…
2. Criação da VM “chicletes” no Proxmox para hospedar os serviços e instalação do WordPress e dependências
Entrei no Proxmox pelo IP local (192.168.1.100), cliquei em Create VM e configurei:
– Node: o meu servidor
– VM ID: 100
– Name: chicletes
– OS Type: Linux 5.x – 2.6 Kernel
– ISO image: Ubuntu Server 22.04 LTS (já tinha baixado do site oficial, aqui)
– Disk size: 20 GB
– CPU: 2 cores
– Memory: 2048 MB
– Network: Bridge `vmbr0`, modelo VirtIO
Iniciei a VM e instalei o Ubuntu:
– Usuário: <username> (recomendo que não use admin ou muito menos root, por segurança!)
– Senha: <senha segura>
– Marquei <OpenSSH server> para acessar por SSH
Depois de instalar, abri o terminal do Mac e, via SSH, e atualizei e instalei tudo o que precisava:
sudo apt update && sudo apt upgrade -y sudo apt autoremove -y
Desativei o login com o “root” por ssh:
sudo nano /etc/ssh/sshd_config
e, dentro do arquivo, mudei isso:
PermitRootLogin no PasswordAuthentication no sudo systemctl restart ssh
Também criei uma chave SSH no meu Mac para conectar com a VM que hospeda o site e agora só entra com chave criptografada:
ssh-keygen -t ed25519 -C "jayme@chicletes" ssh-copy-id [email protected]
Depois instalei o Fail2ban.
Ele é um sistema que monitora logs de login (SSH, Apache, etc.) e bloqueia IPs que tentam muitas senhas erradas. Exemplo: alguém tentando brute-force no SSH, após 5 tentativas, o IP é bloqueado por 10 minutos. Serve para evitar ataques automatizados.
sudo apt install fail2ban -y
Também configurei o UFW (Uncomplicated Firewall), firewall básico e simples do Ubuntu. Basicamente liberei as portas que preciso e bloqueei todas as outras:
sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status
E também desativei o IPv6 (que não uso):
sudo nano /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 sudo sysctl -p
Pronto! Agora é instalar o WP e dependências:
3. Instalei o WordPress do Zero (com Segurança em Cada Etapa)
Instalei o LAMP:
LAMP (Linux + Apache + MySQL + PHP) é o conjunto básico para rodar o WordPress.
- Apache: servidor web (entrega páginas)
- MySQL: banco de dados (guarda posts, usuários)
- PHP: linguagem que roda o WordPress
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-bcmath php-zip php-imagick -y
Configurei o MySQL com segurança:
Rodei o script oficial de segurança:
sudo mysql_secure_installation
O script pergunta várias coisas. Aqui está exatamente o que respondi:
-
- Enter current password for root (enter for none): → [Enter] (não tinha senha ainda)
- Set root password? [Y/n] →
Y→ Digitei uma senha forte de 32 caracteres (gerei em passwordsgenerator.net, com letras maiúsculas, minúsculas, números e símbolos — ex.:X7pQ9rT2vW5yZ8mA3bC6dF9gH1jK4lN7oP0qR) - Remove anonymous users? [Y/n] →
Y→ Removeu o usuário anônimo que vem por padrão (evita acesso sem senha) - Disallow root login remotely? [Y/n] →
Y→ Desativou login do root pela rede (só localhost, para evitar ataques remotos) - Remove test database and access to it? [Y/n] →
Y→ Removeu o banco “test” que vem vazio (evita vazamentos em testes) - Reload privilege tables now? [Y/n] →
Y→ Aplicou todas as mudanças imediatamente
Resultado: MySQL agora está seguro, sem brechas comuns. O script mysql_secure_installation é oficial do MySQL e limpa configurações perigosas que vêm por padrão.
Criei o banco de dados:
sudo mysql -u root
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'senha_aleatoria_32_caracteres'; GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
Baixei o WordPress com verificação:
cd /tmp wget https://wordpress.org/latest.tar.gz wget https://wordpress.org/latest.tar.gz.asc gpg --verify latest.tar.gz.asc latest.tar.gz
Saída: Good signature → tudo certo.
cd /var/www/html sudo tar -xvzf /tmp/latest.tar.gz sudo mv wordpress/* . sudo rmdir wordpress sudo rm /tmp/latest*
Permissões corretas:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
sudo find /var/www/html -type f -exec chmod 644 {} \;
Configurei o wp-config.php:
sudo cp wp-config-sample.php wp-config.php sudo nano wp-config.php
Preenchi:
define('DB_NAME', 'wordpress');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'senha_aleatoria_32_caracteres');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', '');
O WordPress precisa de algumas chaves de segurança para o banco de dados. O site do WP tem um serviço quer gera essas chaves automaticamente (aqui). É só copiar e colar:
// Chaves de segurança (gerei em https://api.wordpress.org/secret-key/1.1/salt/)
define('AUTH_KEY', 'coloca-aqui');
...
define('DISALLOW_FILE_EDIT', true);
Apache seguro:
sudo nano /etc/apache2/sites-available/000-default.conf
Dentro do <VirtualHost>:
ServerSignature Off ServerTokens Prod Header always set X-Content-Type-Options nosniff Header always set X-Frame-Options DENY Header always set X-XSS-Protection "1; mode=block" Header always set Referrer-Policy "strict-origin-when-cross-origin"
sudo a2enmod headers sudo a2enmod ssl sudo a2enmod rewrite sudo systemctl restart apache2
Instalei pelo navegador:
Acessei: http://192.168.1.100/chicletes
-
-
- Título: Chicletes para o Cérebro
- Usuário:
admin - Senha: 20+ caracteres, aleatória
- Email: [meu email]
- Desmarquei “Permitir que mecanismos de busca indexem”
-
Agora que o WP, o Apache e o MySQL estão instalados e funcionando, é hora de instalar os famosos “plugins” do WP!
4. Instalando os Plugins
Se tem uma coisa que o WP faz muito e faz bem é abrir espaço para você usar plugins. Esse plugins deixam o WP extremamente seguro (ou não) e altamente flexível!
Fui em Plugins → Adicionar novo:
| Plugin | Função | Configuração |
|---|---|---|
| Astra | Tema leve | Ativei, configurei cabeçalho branco |
| Classic Editor | Editar HTML puro | Ativei |
| 404page | Usar 404-3 como 404 | Ativei |
| WP File Manager | Upload de arquivos | Ativei, criei pasta /fonts/ |
| Redirection | Redirecionar links | Ativei |
| Wordfence | Firewall, login seguro | Ativei, configurei 2FA, bloqueio de IP |
| UpdraftPlus | Backup diário | Ativei, configurei backup no Google Drive |
São milhares de plugins no WP. Muitos gratuitos, muitos fremiuns, muitos pagos! Escolha os que você precisa. A internet está aí para ajudá-lo!
5. Migrei o Conteúdo do Blogger
O Google, por óbvio, que criar dificuldades para que a gente saia do Blogger. Se há algum tempo atrás o próprio Blogger tinha uma ferramenta para “portar” o seu blog para o WP, essa ferramenta já deixou de existir. Assim, dentro do Blogger, fui em Configurações -> Gerenciar blog -> Fazer backup do conteúdo -> Fazer Download e baixei todo o conteúdo do blog.
É claro que isso vai demorar e ocupar espaço a depender do tamanho do blog, número de postagens, fotos e vídeos presentes, etc. Comigo foi quase uma hora!
O importante, para a migração, é um arquivo que tem no download: feed.atom. Lá dentro tem o texto dos posts, dados sobre categorias, tags e links para imagens e vídeos.
Para importar o conteúdo do Blogger, usei o plugin nativo do WordPress — nada extra. Ele vem embutido no núcleo do WP e suporta RSS/Atom perfeitamente.
No WordPress:
-
- Fui em Ferramentas → Importar
- Cliquei em RSS (última opção da lista)
- Cliquei em Instalar agora (se não estiver ativo)
- Depois em Executar Importador
- Fiz upload do arquivo
feed.atom - Marquei “Baixar e importar anexos” (as imagens, categorias, tags e quase todos os vídeos vieram certinho, mas alguns vídeos eu tive que subir depois)
- Cliquei em Enviar
Resultado: Todos os posts, categorias, tags e datas vieram perfeitamente. O post do Windows 95 não apareceu — já estava perdido no Blogger 🙁 Comentários não vieram (usei Disqus depois).
Importante lembrar que o importador RSS do WordPress é leve, seguro e não precisa de plugin extra. Funciona com qualquer feed Atom/RSS válido.
Depois foi ajustar algumas coisas:
- Imagens: vieram todas
- Vídeos: alguns faltaram, ainda estou subindo o que faltou
- Comentários: Disqus com mesmo ID → comentários voltaram
- Links internos: usei Search & Replace no banco (plugin)
- Categorias/Tags: vieram, mas corrigi manualmente alguns
Por fim, foi redirecionar os post. Como blog no Blogger não será mais atualizado, fiz um redirecionamento para que, quem procurá-lo no Google seja reencaminhado automaticamente para o chicletes.jaymebc.com! O plano é fazer o seguinte redirecionamento:
Do Blogger:
jaymebc.blogspot.com/2023/01/titulo-do-post.html
Para o WordPress:
chicletes.jaymebc.com/2023/01/titulo-do-post/
Ou seja, mantive o ano, o mês e o título do post, só removi o .html e troquei por uma barra / no final (já que o WP não usa .html no final).
Usei o plugin Redirection com uma expressão regular (regex) para fazer isso automaticamente em todos os posts:
- Fui em Ferramentas → Redirection
- Cliquei em Add new redirection
- Preenchi assim:
- Source URL (URL de origem):
^/([0-9]{4})/([0-9]{2})/(.*)\.html$(Explicação: captura ano, mês e o resto do título até o .html)
- Target URL (URL de destino):
/$1/$2/$3/
(Reconstrói: /ano/mês/título/)
- Regex: marcado
- Match: URL only
- Action: Redirect to URL
- Code: 301 Moved Permanently
- Source URL (URL de origem):
Exemplo real:
/2023/01/como-instalar-ms-dos.html → /2023/01/como-instalar-ms-dos/
Testei com 15 posts antigos (de 2021 a 2024) e todos redirecionam corretamente!
Importante: Como o domínio mudou de jaymebc.blogspot.com para chicletes.jaymebc.com, configurei isso no servidor (DNS/Apache), e o Redirection só trata o caminho. Funciona 100%.
Com a VM funcionando, o WP, Apache e MySQL configurados e funcionando, os posts migrados e o redirecionamento concluído, foi a hora de criar a famosa página 404, aquela que aparece quando o site não é encontrado.
A idéia era criar uma página com uma mensagem divertida, relembrando o MSX.
Para isso:
- Baixei a fonte:
https://www.ateijelo.com/assets/misc/MSX-Screen0.ttf - Criei pasta:
/wp-content/uploads/fonts/via WP File Manager - Fiz upload do
MSX-Screen0.ttf
Criei uma página estática: 404-msx.html
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 - MSX BASIC</title>
<style>
@font-face {
font-family: 'MSX Screen 0';
src: url('/wp-content/uploads/fonts/MSX-Screen0.ttf') format('truetype');
font-weight: normal;
font-style: normal;
font-display: swap;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body {
background: #000;
color: #FFFFFF;
font-family: 'MSX Screen 0', monospace !important;
font-size: 22px;
line-height: 1.4;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.msx {
background: #0000AA;
color: #FFFFFF;
border: 60px solid #00FFFF;
padding: 50px;
white-space: pre;
max-width: 800px;
box-shadow: 0 0 60px rgba(0, 255, 255, 1);
}
.error { color: #FF5555; font-weight: bold; text-shadow: 0 0 8px #FF5555; }
.cursor {
display: inline-block;
width: 12px;
height: 1.4em;
background: #00FFFF;
animation: blink 1s infinite;
vertical-align: middle;
}
@keyframes blink { 0%,50%{opacity:1} 51%,100%{opacity:0} }
</style>
</head>
<body>
<pre class="msx">MSX BASIC version 3.0
Copyright 1983 by Microsoft
23414 Bytes free
Disk BASIC version 1.0
Ok
10 print "? SYNTAX ERROR IN LINE <span class="error">404</span>"<span class="cursor"></span>
color auto goto list run
</pre>
</body>
</html>
E criei o CSS para esta página:
<style>
.entry-title, .page-title, h1.entry-title, .ast-title, .entry-header, .page-header, .ast-page-header { display: none !important; visibility: hidden !important; }
html, body, .site, .page, .site-content, .ast-container, .site-main, .entry-content, body.page { background: #000 !important; padding: 0 !important; margin: 0 !important; min-height: 100vh !important; }
.site-header { background: #FFF !important; color: #000 !important; }
</style>
<iframe src="/404-msx.html" frameborder="0" scrolling="no" style="width:100%; height:calc(100vh - 80px); border:none; margin:0; padding:0; display:block; position:absolute; top:80px; left:0;"></iframe>
No plugin 404page, escolhi esta página como página de erro.

Resultado Final:
- Site:
https://chicletes.jaymebc.com - Seguro: SSL, firewall, 2FA, backups diários
- Links redirecionados com 301
- 404 com MSX, fonte real, borda ciano, cursor piscando
- Nada some
- Controle total
Essa foi a confusão que o Blogger me fez passar!
Agora é aprender a usar direito isso aqui e escrever sobre o Windows 95!
É isso por enquanto, pessoal!
