Microblog com Hugo na VPS — tutorial prático

Quer colocar um microblog no ar rapidamente e com deploy automático? Neste tutorial eu mostro um fluxo simples usando Hugo, GitHub e uma VPS (Ubuntu/Debian). O objetivo é: editar Markdown localmente, dar push e ver o site atualizado na VPS em segundos.

O que você vai precisar

  • Uma VPS (Ubuntu/Debian) com acesso SSH
  • Um domínio apontando para a VPS (opcional, mas recomendado)
  • Git instalado na VPS e na sua máquina local (sudo apt install git)
  • Hugo instalado localmente para testes (go install github.com/gohugoio/hugo@latest)
  • Conta no GitHub para armazenar o repositório e configurar Actions

Dica: se você quer a versão extended do Hugo (necessária para alguns temas), prefira instalar o pacote .deb ou usar um instalador oficial.


1) Instalar Hugo na VPS

Acesse sua VPS via SSH e instale o Hugo (opção rápida):

sudo apt update && sudo apt install -y hugo
hugo version

2) Criar o site inicial

No diretório onde quer trabalhar:

hugo new site microblog
cd microblog
git init
# Adicione um tema (ex.: Ananke)
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke

Exemplo mínimo de config.toml (ajuste baseURL):

baseURL = 'https://seudominio.com/'
languageCode = 'pt-br'
title = 'Meu Microblog'
theme = 'ananke'

Teste local com hugo server (http://localhost:1313) antes de subir.


3) Preparar o repositório no GitHub

No repositório local:

git add .
git commit -m "Site inicial"
git branch -M main
git remote add origin https://github.com/SEUUSER/seu-microblog.git
git push -u origin main

Clone no seu PC para editar localmente:

git clone https://github.com/SEUUSER/seu-microblog.git ~/microblog-local

4) Configurar deploy via SSH (chave para GitHub Actions)

Na sua VPS, gere uma chave SSH dedicada para o deploy e adicione a pública ao authorized_keys do usuário que rodará o deploy (ex.: www-data ou seu usuário):

ssh-keygen -t ed25519 -C "deploy@vps" -f ~/.ssh/deploy_key
cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/deploy_key
  • Copie o conteúdo da chave privada (~/.ssh/deploy_key) para o GitHub Secret DEPLOY_KEY.
  • Adicione VPS_HOST (IP) e VPS_USER (usuário SSH) também como Secrets.

Segurança: restrinja a chave no servidor (por exemplo, use from="IP_DA_ACTIONS" no authorized_keys) e limite comandos permitidos se necessário.


5) Servir o site com Nginx

Instale e configure Nginx para servir o conteúdo estático:

sudo apt install -y nginx
sudo mkdir -p /var/www/microblog

Exemplo simples de bloco de servidor (/etc/nginx/sites-available/microblog):

server {
    listen 80;
    server_name seudominio.com;
    root /var/www/microblog/public;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Ative a configuração e reinicie o Nginx:

sudo ln -s /etc/nginx/sites-available/microblog /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx

6) Workflow GitHub Actions (build + deploy)

Crie .github/workflows/deploy.yml no repo com algo parecido com isto:

name: Deploy Microblog
on: [push]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v3
        with:
          hugo-version: "latest"
          extended: true

      - name: Build
        run: hugo --minify

      - name: Deploy to VPS (via SSH)
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.VPS_HOST }}
          username: ${{ secrets.VPS_USER }}
          key: ${{ secrets.DEPLOY_KEY }}
          script: |
            set -e
            TMP_DIR="/tmp/microblog_$GITHUB_RUN_ID"
            rm -rf "$TMP_DIR" && mkdir -p "$TMP_DIR"
            git clone --depth 1 https://github.com/${{ github.repository }} "$TMP_DIR"
            cd "$TMP_DIR"
            hugo --minify
            sudo rm -rf /var/www/microblog/public/*
            sudo cp -r public/* /var/www/microblog/
            sudo chown -R www-data:www-data /var/www/microblog
  • Configure os Secrets: VPS_HOST, VPS_USER, DEPLOY_KEY.
  • O workflow builda o site no runner e roda comandos na VPS para atualizar /var/www/microblog.

7) Fluxo de conteúdo (edição rápida)

No PC local (~/microblog-local):

hugo new posts/novo-post.md
# edite o arquivo, coloque `draft: false` quando pronto
git add .
git commit -m "Novo post"
git push

O GitHub Actions fará o build e o deploy automaticamente; seu site estará atualizado poucos segundos depois.


Comandos úteis

# testar localmente
hugo server

# commits e push rápidos
git add . && git commit -m "update" && git push

# deploy manual (na VPS)
cd /tmp/microblog && hugo && sudo cp -r public/* /var/www/microblog/

Pronto — agora você tem um microblog self-hosted, rápido, sem banco de dados e com deploy automático.