Eu Que Fiz (Quase)
Um guia rápido e alto nível de como eu configurei esse blog/site/whatever
Básico - as ferramentas
Estou usando a plataforma Hugo, um gerador de site estático - não é um CMS, como o Wordpress ou coisa do tipo - e que portanto precisa só de uma hospedagem básica, não precisa nem de um banco de dados ou outro tipo de infra.
Para escrever os posts e editar os arquivos de configuração eu uso o vscode na minha máquina. Os posts em si, no Hugo, são escritos no formato Markdown, então você tem tudo salvo em arquivos de texto e poderia ser editado até mesmo no notepad. Ah, depois de escrever ou configurar eu posso gerar/compilar tudo local e só publicar o resultado no servidor remoto.
Intermediário - informações técnicas
Claro que, como bom nerd, não fiz isso.
Tenho um VPS na Linode, na instância “Nanode” (menor e mais barata), e configurei um nginx como servidor e apontei meu domínio por lá, além de ter confiurado o certificado da Let’s Encrypt utilizando o Certbot.
Além disso, tenho um repositório no github no qual eu publico o meu projeto Hugo do site, e através do Github Actions faço a compilação e depois, via rsync, publico diretamente no diretório do meu vps de onde o ngnix serve o site.
Se você não sabe do que se tratam essas palavras, não se preocupe, tudo que precisa saber é que é só jogar em uma pasta da hospedagem. Por outro lado, se você sabe, não tem nenhum segredo por aqui, fiz só o mínimo necessário.
Avançado - os detalhes divertidos da publicação (Continuous deploy?)
O Hugo não tem nenhum segredo, basta um comando pra gerar a pasta “public” com os arquivos devidamente organizados, sass compilado, tema aplicado, etc.
Mas no mundinho Github Actions, tem que ficar fazendo checkout, configurar env, e por aí vai. Por sorte encontrei alguém que já tinha o caminho das pedras.
Eu basicamente copiei a action dele, configurei pra rodar no push pra main do meu repositório e… apanhei do trecho do rsync e chave ssh. Meu problema foi usar uma chave com passphrase, o que dificultou um pouco o processo.
Felizmente, depois de apanhar por umas 2h, descobri uma action que já lida com tudo isso, e bastou configurar os apontamenos, chave e passphrase nos secrets do Github Actions e depois chamar a tal action. Tudo roda em questão de segundos e cabe no free tier do Actions sem medo.
O meu repositório está privado, mas como a action ficou sem nenhum valor hardcoded, vou deixar aqui uma cópia exata dela, se alguém precisar:
name: Publish Blog
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-22.04
steps:
# CHEKCOUT REPOSITORY
- name: Git checkout
uses: actions/checkout@v3
with:
submodules: 'true'
# SETUP HUGO
# Read environemnt variable for subsequent actions.
# See: https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable
- name: Read .env
run: |
. ./.env
echo "HUGO_VERSION=${HUGO_VERSION}" >> $GITHUB_ENV
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '${{ env.HUGO_VERSION }}'
extended: true
- name: Cache Hugo
uses: actions/cache@v3
with:
path: /tmp/hugo_cache
key: ${{ runner.os }}-hugomod-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-hugomod-
- name: Build Blog
env:
TZ: 'America/Sao_Paulo'
run: hugo --minify
- name: rsync deployments
uses: burnett01/rsync-deployments@7.0.1
with:
switches: -avzr --delete
path: ./public/
remote_path: ${{ secrets.DEPLOY_PATH }}
remote_host: ${{ secrets.DEPLOY_HOST_IP }}
remote_user: ${{ secrets.DEPLOY_USER }}
remote_key: ${{ secrets.DEPLOY_KEY }}
remote_key_pass: ${{ secrets.DEPLOY_PASSPHRASE }}