Hospedar um site do Hugo framework é algo bem fácil rápido e por ser um site estático existem diversos provedores onde você consegue hospeda-lo de forma gratuita.

Nesse artigo vou mostrar como hospedar no Firebase que é uma plataforma da Google e ainda vou mostrar como fazer o CI/CD usando o Git Actions do Github.

Pré-requisitos:

  • Site em Hugo

    Caso não tenha o site em Hugo, nesse tutorial ensino como criar

    https://tiagoscosta.com.br/posts/hugo-framework-criando-o-primeiro-site/

    Ou você pode clonar esse repositório, com o submódulo, pois é ele que uso nesse tutorial

    git clone https://github.com/tiagotsc/hugo-first-site.git --recurse-submodules

  • Conta no Github (É gratuito)

    Esse serviço que é muito popular para armazenar e compartilhar códigos que servirá de ponte para hospedarmos nosso site no Firebase através de CI/CD.

    Caso não tenha conta, segue o link do serviço para criar a sua

    https://github.com

  • Conta no Firebase (É gratuito)

    Esse PaaS (plataforma como serviço) é bem interessante e com recursos bem legais.

    Caso não tenha conta, segue o link do serviço para criar a sua

    https://firebase.google.com/docs/cli?hl=pt-br

  • NodeJS

    Vou usar a versão 18.

    Caso não tenha instalado, segue o link para baixar e instalar

  • https://nodejs.org/en/download/package-manager

  • Firebase Cli

    Faremos uso do Firebase via linha de comando para realizar a configuração do nosso site.

    Caso não tenha, instale com o comando abaixo:

    npm install -g firebase-tools

Criando projeto no Firebase Link para o cabeçalho

Primeiro vamos criar um projeto no Firebase e para isso siga os passos.

Lá no canto superior direito clique em Go to console e na próxima tela clique em Criar um projeto.

Firebase-iniciando projeto

Ensira um nome para o projeto, vou colocar como FirstSite, depois clique em Continuar.

Firebase-definindo nome do projeto

Próxima tela, desative a opção Ativar o Google Analytics neste projeto e clique em Criar projeto.

Firebase-botão criar projeto

Aguarde alguns instantes até seu projeto ser criado, depois clique em Continuar.

Firebase-botão continuar

Configurando o Firebase no site Hugo Link para o cabeçalho

No terminal na raiz do site, execute:

# No meu caso faço uso do fnm para versionar o NodeJs, então preciso rodar
# Talvez na sua máquina não precise desse comando
fnm env --use-on-cd | Out-String | Invoke-Expression

# Se não estiver logado no Firebase, logue e permita acessar sua conta Google
firebase login

# Instala servidor DecapCMS para rodar localmente
firebase init

Coloque as mesmas respostas conforme figura abaixo, se atente as respostas em azul.

Firebase terminal-init config

Configurando no Github Link para o cabeçalho

Crie um repositório no Github, vou definir com o nome de hugo-first-site-firebase.

Github-botão continuar

Agora atribua e envie o site para o repositório criado no Github com os comandos abaixo:

# Transforma o diretório em um repositório git
git init

# Adiciona todos os arquivos
git add .

# Comita os arquivos
git commit -m "first commit"

# Cria a branch main localmente
git branch -M main

# Adiciona o repositório remoto
git remote add origin https://github.com/tiagotsc/hugo-first-site-firebase.git

# Envia para o repositório remoto
git push -u origin main

O Github vai precisar de um FIREBASE_TOKEN para que seja possível realizar o deploy no Firebase.

No terminal, na raiz do seu site, execute:

# Irá solicitar a geração de token
firebase login:ci

Será solicitado confirmação de autenticação e permissão, após confirmar tudo seu token será gerado.

Firebase-token

Agora vá no seu repositório Github, vá em Settings > Secrets and variables > Actions.

Depois clique em New repository secret.

Github-config secret

No campo Name * defina:

  • FIREBASE_TOKEN

No campo Secret * defina o token que obteve anteriormente conforme figura abaixo:

Github-add secret

Depois clique em Add secret.

Ainda no repositório do Github, no menu do topo, clique em Actions, pesquise por manual e clique em Configure.

Github-manual workflow

Coloque o conteúdo abaixo e clique em Commit changes..., depois confirme novamente para concretizar.

name: Deploy-To-Firebase

on:
  push:
    branches:
      - main  # Set a branch to deploy
  pull_request:

jobs:
  deploy:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: true  # Fetch Hugo themes (true OR recursive)
          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod

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

      - name: Build
        run: hugo

      - name: Deploy
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

Github-config workflow git actions

Lá no menu superior, clique em Actions, aguarde alguns instantes e se aparecer um check verde, é sinal que seu deploy ocorreu com sucesso.

Github-manual workflow check verde

Agora lá no Firebase, no projeto que criou, vá no menu esquerdo Criação > Hosting e depois clique em um das URL fornecida pelo Firebase.

Firebase-url

Tudo ok, você verá o site no ar.

Firebase-site no ar

Agora você já pode criar suas páginas, postagens, envie elas para o Github, o Git Actions vai automaticamente reconhecer as novas alterações e vai disponibilizar tudo no Firebase hosting🙂!

Em breve abordarei mais recursos sobre o assunto.

Comandos úteis

# COMANDOS HUGO

# Compila o site, o resultado fica diponível na pasta public
hugo

# Sobe o site localmente sem exibir postagens de rascunhos (padrão do Hugo)
hugo server

# Sobe o site localmente exibindo postagens de rascunhos
hugo server -D

# Sobe o site localmente deixando-o acesssível de qualquer dispositivo na rede
# Bom para acessar de outra máquina ou visualizar no celular
hugo server --bind 0.0.0.0 --baseURL http://0.0.0.0 --port 1313 -D
Ou
hugo server --bind=0.0.0.0 --baseURL=http://0.0.0.0:1313 -D

# Cria uma nova postagem
hugo new content content/posts/my-first-post.md

# Listar comandos
hugo -h

# Mais detalhes dos comandos na documentação oficial
https://gohugo.io/commands

Links úteis

Git Actions com Hugo

https://github.com/peaceiris/actions-hugo

Documentação oficial do Hugo

https://gohugo.io/documentation