Docker: Plataforma de produção

Esta documentação faz parte do guia Node.js. Consulte o guia completo aqui: Como usar e implementar uma aplicação Node.js com Docker.

Bem-vindo à documentação da Stackhero

A Stackhero disponibiliza uma plataforma Docker cloud CaaS (Containers as a Service) pronta a usar, concebida para implementações de contentores rápidas e fiáveis:

  • Implemente em produção com um simples docker-compose up. Não é necessária qualquer configuração adicional: basta iniciar os seus contentores.
  • Escolha o seu próprio nome de domínio, automaticamente protegido com HTTPS (por exemplo: https://api.sua-empresa.com, https://www.sua-empresa.com ou https://backoffice.sua-empresa.com).
  • Beneficie de elevado desempenho e segurança robusta numa infraestrutura privada e dedicada.
  • Aplique atualizações com um clique para uma manutenção simples e sem esforço.

Pode ter os seus contentores em produção em cerca de cinco minutos. A Stackhero gere a infraestrutura, as atualizações e a segurança por si, para que se possa focar na entrega das suas aplicações. Saiba mais sobre alojamento cloud Docker CaaS.

Se ainda não tiver um serviço Stackhero for Docker, pode criar um facilmente a partir do seu painel Stackhero. Será ativado em aproximadamente 2 minutos.

Se é novo no Stackhero, pode experimentar o alojamento em cloud de contêineres Docker gratuitamente durante um mês.

Antes de implementar a sua aplicação em produção, precisa preparar alguns ficheiros de configuração:

  1. Copie secrets/global.production.example para secrets/global.production.
  2. Edite secrets/global.production e substitua <XXXXXX>.stackhero-network.com pelo nome de host do seu serviço Docker a partir do seu painel Stackhero.
  3. Copie secrets/my-app.production.example para secrets/my-app.production.
  4. Edite secrets/my-app.production e insira as suas credenciais.
  5. Atualize docker/docker-compose.production.yml substituindo <XXXXXX>.stackhero-network.com pelo nome de host do seu serviço Docker.

A implementação em produção é simples: execute:

make production-deploy

Este comando cria um contêiner Docker, transfere os dados do seu projeto e envia-os para o seu serviço Docker em produção. Abra o seu navegador e navegue para o nome de host do seu serviço Docker (por exemplo, https://<XXXXXX>.stackhero-network.com). Deverá ver a sua API REST responder "Hello World".

Também pode usar make production, que implementa os seus contêineres e exibe logs em tempo real.

Para monitorizar o seu ambiente de produção ou resolver problemas, pode consultar os seus logs usando estes comandos:

  • Para transmitir logs ao vivo, execute: make production-logs-live
  • Para recuperar todos os logs armazenados, execute: make production-logs
  • Para recuperar logs de um dia específico (substitua YYYY-MM-DD pela data desejada), execute: make production-logs | grep "YYYY-MM-DD"

Se desejar usar um nome de domínio diferente de https://<XXXXXX>.stackhero-network.com, o Stackhero for Docker integra o Traefik para simplificar a gestão de domínios. O Traefik lida com o roteamento HTTP e a encriptação TLS (HTTPS) para si.

Aqui estão alguns exemplos para personalizar os seus nomes de domínio:

  • Para servir api.my-company.com através do seu contêiner my-app na porta 5000 com encriptação TLS, atualize o ficheiro docker/docker-compose.production.yml substituindo a seção labels por:

        labels:
          - "traefik.enable=true" # Ativar Traefik para rotear o tráfego para este contêiner
          - "traefik.http.routers.my-app.rule=Host(`api.my-company.com`)" # Definir o host
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt" # Usar letsencrypt para certificados TLS
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Especificar a porta 5000
    
  • Para servir my-company.com através do seu contêiner my-app na porta 5000 e redirecionar todas as solicitações de www.my-company.com para my-company.com, atualize a seção labels no mesmo ficheiro com:

        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.my-app.rule=Host(`my-company.com`) || Host(`www.my-company.com`)" # Incluir ambos os domínios
          - "traefik.http.routers.my-app.tls.certresolver=letsencrypt"
          - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Especificar a porta 5000
    
          # Redirecionar www.my-company.com para my-company.com:
          - "traefik.http.routers.my-app.middlewares=redirect-www"
          - "traefik.http.middlewares.redirect-www.redirectregex.regex=^https://www.my-company.com/(.*)"
          - "traefik.http.middlewares.redirect-www.redirectregex.replacement=https://my-company.com/$${1}"
          - "traefik.http.middlewares.redirect-www.redirectregex.permanent=true"
    

Não se esqueça de configurar o DNS para my-company.com e www.my-company.com para que cada um aponte como um CNAME para o seu serviço Docker em https://<XXXXXX>.stackhero-network.com.