Criando um blog - O minimo para começar a escrever na internet.

Introdução

Vou começar esclarecendo o título. Claramente, para começar a escrever na internet, não é necessário desenvolver e, muito menos, subir um blog autohospedado para que suas informações estejam visíveis para o resto do mundo. Hoje em dia, as redes sociais fazem esse trabalho por você, e o alcance pode ser até maior.

Você quer fazer posts com visibilidade na área de tecnologia? Experimente o TabNews. Quer uma forma simples de publicar seus artigos, com a mesma facilidade de escrever no Word e receber um link público? Experimente o Notion, pois ele possui funcionalidades desse tipo.

Meu ponto aqui é desconstruir a ideia de que precisamos de um blog autohospedado, como este. Para a maior parte do público geral que pode estar lendo isso, qualquer uma das duas opções já resolve o problema.

Mas vamos aos pontos positivos: independência. Além de poder testar meus conceitos de deploy, também posso modificar o sistema ao meu gosto — desde adicionar ferramentas novas até suportar qualquer tipo de visualização ou layout futuro que eu deseje.

Atualmente, o lendário Fábio Akita trocou o framework de seu blog, o que me deixou curioso, pois houve um salto de design e experiencia de usuário, então em um dos posts dele, este: akitaonrails.com, minha vontade de escrever para um blgo reacendeu como uma chama!

Mão na massa

Eu utilizo o Hugo, que é um gerador de sites estáticos, o qual utiliza a licença Apache 2.0. Porém, para não precisar moldar toda a interface e funcionalidades básicas do zero, escolhi um template chamado hextra-starter-template. Falarei sobre como o Hextra lida com a indexação no próximo tópico. Na configuração base deste repositório, é possivel notar que existe um arquivo de configuração para o Netlify.

netlify.toml
[build]
publish = "public"
command = "hugo --gc --minify"

[build.environment]
HUGO_VERSION = "0.147.9"

Podemos notar os comandos de construção; eles serão úteis futuramente. Embora seja fácil subir este projeto no Netlify, neste post focaremos na Vercel. Atualmente, é possivel definir um build atravez de um arquivo na raiz chamado vercel.json. vercel-project-configuration Nele, precisamos definir alguns parametros essênciais: $schema, buildCommand e outputDirectory.

vercel.json
{
  "$schema": "https://openapi.vercel.sh/vercel.json",
  "buildCommand": "source ./go_install.sh && source ./hugo_install.sh && hugo --gc --minify",
  "outputDirectory": "public"
}
  • $schema
    • validação do formato do arquivo.
  • buildCommand
    • comando para gerar o site.
  • outputDirectory
    • pasta com arquivos prontos.

Você deve ter notado a existencia de dois outros arquivos no buildCommand. Sim, eles são essenciais para funcionar. Precisamos da linguagem Golang para compilar e instalar o Hugo, e do Hugo para gerar os arquivos estáticos do site.

Após essa geração, não é necessário manter esses binários instalados. A estratégia ideal é compilar e construir tudo até obter os arquivos estáticos, para então passar esses dados ao servidor definitivo. Com uma maquina/container performático, a escalabilidade aumenta consideravelmente.

Foi usada IA Gerativa para criar os seguintes scripts de instalação, e eles cumprem bem o objetivo.

Important

Leia os principais requisitos para os seguintes scripts funcionarem corretamente no ambiente linux.

  • go_install.sh

    • Precisa ser executado antes do hugo_install.sh.
    • Precisa ser executado com source antes.
    • Se houver alguma variavel de ambiente GO_VERSION definida, esta será a versão instalada, se não, latest.
  • hugo_install.sh

    • Precisa ser executado com source antes.
    • Se houver alguma variavel de ambiente HUGO_VERSION definida, esta será a versão instalada, se não, latest.

Aqui estão os arquivos.

go_install.sh
#!/bin/bash

# Diretório de instalação (user space do Vercel)
INSTALL_DIR="$HOME/go_local"
OS="linux"
ARCH="amd64"

echo "--- Configuração do Go no Vercel ---"

# 1. Lógica para determinar a versão
if [ -z "$GO_VERSION" ]; then
  echo "Variável GO_VERSION não definida. Buscando a versão 'latest'..."
  # Obtém a versão mais recente diretamente do site oficial do Go
  # O comando retorna algo como "go1.25.4"
  VERSION_TAG=$(curl -s https://go.dev/VERSION?m=text | head -n 1)
else
  echo "Variável GO_VERSION detectada: $GO_VERSION"
  # Garante que o prefixo 'go' exista (ex: transforma 1.25.4 em go1.25.4)
  if [[ "$GO_VERSION" == go* ]]; then
    VERSION_TAG="$GO_VERSION"
  else
    VERSION_TAG="go${GO_VERSION}"
  fi
fi

# Nome do arquivo final
GO_FILE="${VERSION_TAG}.${OS}-${ARCH}.tar.gz"
GO_URL="https://go.dev/dl/${GO_FILE}"

echo "Versão selecionada: ${VERSION_TAG}"
echo "URL de download: ${GO_URL}"

# 2. Baixar o arquivo
echo "Baixando ${GO_FILE}..."
curl -L -o "${GO_FILE}" "${GO_URL}"

# Verifica se o download foi bem sucedido
if [ $? -ne 0 ]; then
  echo "Erro ao baixar o Go. Verifique se a versão existe."
  exit 1
fi

# 3. Limpar instalação antiga
if [ -d "${INSTALL_DIR}/go" ]; then
  echo "Removendo instalação anterior em ${INSTALL_DIR}..."
  rm -rf "${INSTALL_DIR}/go"
fi

# Criar diretório
mkdir -p "${INSTALL_DIR}"

# 4. Extrair
echo "Extraindo..."
tar -C "${INSTALL_DIR}" -xzf "${GO_FILE}"

# 5. Configurar PATH para a sessão atual do script
export PATH="${INSTALL_DIR}/go/bin:$PATH"

# 6. Verificar e Limpar
echo "Verificação final:"
go version
rm "${GO_FILE}"

echo "--- Instalação concluída ---"

E, da mesma forma, o script para o Hugo:

hugo_install.sh

… Ainda escrevendo, então será completado futuramente.

Precisamos falar sobre SEO?