Introdução

Este tutorial apresenta o processo de configuração do HTTPS para contêineres Docker utilizando a imagem steveltn/https-portal. Essa imagem permite a geração automática de certificados SSL usando Let’s Encrypt e facilita a configuração de serviços seguros.

O guia cobre todo o processo, desde a instalação do Docker no Debian 12 até a configuração do docker-compose.yml para ativar o SSL em aplicações containerizadas.

Requisitos

  • Servidor rodando Debian 12
  • Usuário com permissões de sudo
  • Domínio válido apontando para o servidor

Passo 1: Instalando o Docker e o Docker Compose

Atualização dos pacotes do sistema:

sudo apt update && sudo apt upgrade -y

Instalação dos pacotes necessários:

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

Adição do repositório do Docker:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo tee /usr/share/keyrings/docker-archive-keyring.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Instalação do Docker e do Docker Compose:

sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Verificação da instalação:

docker --version
docker compose version

Ativação e inicialização do serviço Docker:

sudo systemctl enable --now docker

Para evitar o uso do sudo em todos os comandos, o usuário pode ser adicionado ao grupo Docker:

sudo usermod -aG docker $USER

Para que a alteração tenha efeito, é necessário sair e entrar novamente na sessão ou executar:

newgrp docker

Passo 2: Criando a rede Docker

Para que os contêineres possam se comunicar, é necessário criar uma rede Docker personalizada. Isso garante um melhor isolamento e facilita a configuração dos serviços.

Criação da rede:

docker network create \
  --driver=bridge \
  --subnet=192.168.0.0/24 \
  docker_net

Verificação das redes existentes:

docker network ls

A saída deve exibir a rede recém-criada:

NETWORK ID     NAME           DRIVER    SCOPE
62b769362acf   bridge         bridge    local
5b1af52557f3   docker_net     bridge    local

Passo 3: Criando o ambiente Docker

Criação de um diretório para os arquivos do projeto:

mkdir -p ~/docker-projects && cd ~/docker-projects

Criação do arquivo docker-compose.yml:

version: '3'

services:
  https-portal:
    image: steveltn/https-portal:1
    container_name: https-portal
    ports:
      - "80:80"
      - "443:443"
    links:
      - wordpress
      - zabbix-web
      - grafana
      - nginx-blog
    restart: always
    environment:
      DOMAINS: 'hgbsoft.com.br -> http://wordpress:80, www.hgbsoft.com.br -> http://wordpress:80'
      FORCE_SSL: "true"
      REDIRECT: 'www.hgbsoft.com.br -> hgbsoft.com.br'
      STAGE: production  # Altere para 'staging' em ambiente de testes
    volumes:
      - ./ssl_certs:/var/lib/https-portal
    networks:
      docker_net:
        ipv4_address: 192.168.0.10  # Endereço IP fixo para https-portal

  wordpress:
    image: wordpress:latest
    container_name: wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: aksMercGX5YnM!v
    volumes:
      - wordpress_data:/var/www/html
    networks:
      docker_net:
        ipv4_address: 192.168.0.2  # Endereço IP fixo para wordpress

networks:
  docker_net:
    external: true

volumes:
  wordpress_data:
    driver: local

Passo 4: Iniciando os contêineres

Para iniciar os contêineres, execute:

docker compose up -d

Verificação do status dos contêineres:

docker ps

O site poderá ser acessado no navegador através do domínio configurado: https://hgbsoft.com.br

Considerações finais

O https-portal facilita a adição de SSL em contêineres Docker sem necessidade de configuração manual do Let’s Encrypt ou do Nginx. Esse setup pode ser expandido para hospedar outras aplicações, como WordPress, APIs e painéis de monitoramento.