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.
[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.
{
"$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
sourceantes. - Se houver alguma variavel de ambiente
GO_VERSIONdefinida, esta será a versão instalada, se não, latest.
- Precisa ser executado antes do
hugo_install.sh- Precisa ser executado com
sourceantes. - Se houver alguma variavel de ambiente
HUGO_VERSIONdefinida, esta será a versão instalada, se não, latest.
- Precisa ser executado com
Aqui estão os arquivos.
#!/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:
… Ainda escrevendo, então será completado futuramente.