Introdução

Neste guia, vamos configurar um site estático utilizando o Hugo Framework, gerar os arquivos estáticos, servi-los com um contêiner Docker rodando Nginx e proteger o site com SSL usando a imagem steveltn/https-portal:1.

O que é o Hugo?

O Hugo é um framework para a criação de sites estáticos desenvolvido em Go, conhecido por sua alta velocidade na geração de páginas. Os sites criados com Hugo são altamente performáticos e fáceis de manter.

Estrutura do Projeto

O projeto terá a seguinte estrutura:

/var/www/html/blog/
├── config.toml  # Configuração do Hugo
├── content/     # Postagens e páginas
├── layouts/     # Templates personalizados
├── static/      # Arquivos estáticos (CSS, JS, imagens)
├── themes/      # Tema do site
├── public/      # Saída gerada pelo Hugo (servida pelo Nginx)
├── Dockerfile   # Dockerfile do Nginx
└── docker-compose.yml  # Configuração do ambiente

Instalação do Hugo

Primeiramente, instalamos o Hugo em nosso servidor Debian 12:

sudo apt update && sudo apt install hugo -y

Para verificar a instalação, rode:

hugo version

Criando o Site Hugo

Agora, criamos o projeto Hugo:

hugo new site /var/www/html/blog
cd /var/www/html/blog

Escolhemos um tema do site oficial e adicionamos como submódulo Git:

git init
git submodule add https://github.com/rhazdon/hugo-theme-hello-friend-ng.git themes/hello-friend-ng

Definimos o tema no arquivo config.toml:

theme = "hello-friend-ng"

Copiamos os arquivos de exemplo do tema:

cp -r themes/hello-friend-ng/exampleSite/* .

Criamos um post de exemplo:

hugo new posts/meu-primeiro-post.md

Editamos o arquivo content/posts/meu-primeiro-post.md e removemos a linha draft: true para que o post seja publicado.

Geramos os arquivos estáticos:

hugo

Isso criará os arquivos na pasta public/.

Configurando o Nginx com Docker

Criamos um Dockerfile para o Nginx:

FROM nginx:latest
COPY public /usr/share/nginx/html

Criamos um docker-compose.yml para orquestrar os contêineres:

version: '3'

services:
  blog:
    build: .
    container_name: hugo_blog
    restart: always
    ports:
      - "8080:80"
    volumes:
      - ./public:/usr/share/nginx/html

  https-portal:
    image: steveltn/https-portal:1
    container_name: ssl_proxy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    environment:
      DOMAINS: 'henrique.hgbsoft.com.br -> http://blog:80'
      STAGE: 'production'
    volumes:
      - ssl_certs:/var/lib/https-portal

volumes:
  ssl_certs:

Agora, construímos e iniciamos os contêineres:

docker-compose up -d --build

O site estará acessível via https://henrique.hgbsoft.com.br com SSL ativo.

Conclusão

Neste guia, instalamos o Hugo, criamos um site estático, servimos os arquivos via Nginx dentro de um contêiner Docker e protegemos o site com SSL via https-portal. Essa abordagem garante segurança e facilidade na manutenção do site. 🚀