Voltar ao Gerador
Guia Definitivo

Dominando o Docker Swarm

Aprenda a criar uma infraestrutura de produção robusta, escalável e segura usando Docker Swarm e Traefik.

Para quem é este guia?

Desenvolvedores e empreendedores que desejam ter controle total sobre sua infraestrutura, fugir de custos altos de plataformas (PaaS) e escalar aplicações com profissionalismo.

O que você vai conquistar

  • Servidor próprio configurado do zero
  • HTTPS Automático em todos os domínios
  • Gestão visual de containers
1

O que você vai precisar

Hardware Recomendado

  • VPS com Ubuntu 20.04 ou superior
  • • Mínimo 2 vCPUs
  • • Mínimo 4GB de RAM

Acessos Necessários

  • • Um domínio registrado (ex: seudominio.com)
  • • Acesso SSH ao servidor
  • • Permissões de administrador (sudo)
O que é Docker e Containers?
Imagine que uma aplicação é uma casa. Tradicionalmente, você constrói a casa direto no terreno (o servidor). Se quiser mudar a casa de lugar, é difícil.

Com Docker, sua aplicação se torna um trailer (container). Ela tem tudo o que precisa dentro dela (móveis, encanamento). Você pode mover esse trailer para qualquer terreno (qualquer servidor com Docker) e ele funcionará exatamente igual.
O que é Docker Swarm?
Se o Docker gerencia um trailer, o Swarm gerencia um estacionamento inteiro de trailers. Ele decide onde estacionar cada um, garante que não batam uns nos outros, e se um trailer quebrar, ele coloca outro novo no lugar automaticamente. É ele quem permite conectar vários servidores para trabalharem juntos.
O que é Traefik?
O Traefik é o recepcionista do estacionamento. Quando chega uma visita (usuário) perguntando pela "Casa do Joào" (joao.dominio.com), o Traefik sabe exatamente em qual vaga (porta/container) essa casa está e direciona a visita para lá. Além disso, ele dá um crachá de segurança (HTTPS) para todas as visitas automaticamente.
2

Preparando o Servidor

Acesse seu servidor via SSH e execute os comandos abaixo para garantir que tudo está atualizado e seguro.

# Atualizar lista de pacotes e o sistema
sudo apt update && sudo apt upgrade -y

# Instalar ferramentas essenciais
sudo apt install -y curl git apt-transport-https ca-certificates software-properties-common

Instalando o Docker

# Baixar e instalar automaticamente via script oficial
curl -fsSL https://get.docker.com | sh

# Adicionar seu usuário ao grupo do Docker (para não precisar usar sudo sempre)
sudo usermod -aG docker $USER

# ATENÇÃO: É necessário sair e entrar novamente no SSH para aplicar a permissão acima
exit
3

Iniciando o Cluster (Swarm)

Agora vamos transformar este servidor em um "Manager" do Swarm e criar a rede pública onde os serviços irão trafegar.

# Iniciar o Swarm (Substitua PUBLIC_IP pelo IP do seu servidor)
docker swarm init --advertise-addr SEU_IP_PUBLICO

# Criar a rede overlay (rede criptografada do Swarm)
docker network create --driver=overlay traefik_public
4

Instalando o Traefik & Portainer

Vamos criar nossa stack de gerenciamento. Copie o nosso gerador de stack para Infraestrutura e gere o arquivo. Ou use este modelo base:

Ver Modelo traefik-portainer.yaml
version: "3.8"

services:
  traefik:
    image: traefik:v2.10
    command:
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.swarmMode=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.network=traefik_public"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.letsencrypt.acme.email=admin@seudominio.com"
      - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_letsencrypt:/letsencrypt
    networks:
      - traefik_public
    deploy:
      mode: global
      placement:
        constraints:
          - node.role == manager
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.traefik.rule=Host(`traefik.seudominio.com`)"
        - "traefik.http.routers.traefik.service=api@internal"
        - "traefik.http.services.traefik.loadbalancer.server.port=8080"
        - "traefik.http.routers.traefik.entrypoints=websecure"
        - "traefik.http.routers.traefik.tls.certresolver=letsencrypt"

  portainer:
    image: portainer/portainer-ce:latest
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    volumes:
      - portainer_data:/data
    networks:
      - traefik_public
      - portainer_agent
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.portainer.rule=Host(`portainer.seudominio.com`)"
        - "traefik.http.routers.portainer.entrypoints=websecure"
        - "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
        - "traefik.http.services.portainer.loadbalancer.server.port=9000"

  agent:
    image: portainer/agent:latest
    environment:
      AGENT_CLUSTER_ADDR: tasks.agent
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - portainer_agent
    deploy:
      mode: global
      placement:
        constraints:
          - node.platform.os == linux

volumes:
  traefik_letsencrypt:
  portainer_data:

networks:
  traefik_public:
    external: true
  portainer_agent:
    driver: overlay
    attachable: true

Salve o conteúdo acima em um arquivo chamado infra.yaml e execute:

docker stack deploy -c infra.yaml infra

Pronto para a ação?

Agora que você entende os conceitos e tem a infraestrutura base, use nosso gerador automatizado para criar as configurações para N8N, Evolution API, Typebot e muito mais.