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 oferece uma solução Docker cloud CaaS (Containers as a Service) pronta a usar que proporciona uma série de benefícios, incluindo:

  • Implemente facilmente os seus containers em produção com apenas um docker-compose up.
  • Nome de domínio personalizável seguro com HTTPS (por exemplo, https://api.sua-empresa.com, https://www.sua-empresa.com, https://backoffice.sua-empresa.com).
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.
  • Atualizações sem esforço com apenas um clique.

Poupe tempo e simplifique a sua vida: são necessários apenas 5 minutos para experimentar a solução de hospedagem cloud Docker CaaS da Stackhero e implementar os seus containers em produção!

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.