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.
Preparar o seu primeiro deploy em produção
Antes de implementar a sua aplicação em produção, precisa preparar alguns ficheiros de configuração:
- Copie
secrets/global.production.exampleparasecrets/global.production. - Edite
secrets/global.productione substitua<XXXXXX>.stackhero-network.compelo nome de host do seu serviço Docker a partir do seu painel Stackhero. - Copie
secrets/my-app.production.exampleparasecrets/my-app.production. - Edite
secrets/my-app.productione insira as suas credenciais. - Atualize
docker/docker-compose.production.ymlsubstituindo<XXXXXX>.stackhero-network.compelo nome de host do seu serviço Docker.
Implementar em produção
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.
Exibir logs
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-DDpela data desejada), execute:make production-logs | grep "YYYY-MM-DD"
Personalizar nomes de domínio
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.comatravés do seu contêinermy-appna porta 5000 com encriptação TLS, atualize o ficheirodocker/docker-compose.production.ymlsubstituindo a seçãolabelspor: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.comatravés do seu contêinermy-appna porta 5000 e redirecionar todas as solicitações dewww.my-company.comparamy-company.com, atualize a seçãolabelsno 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.comewww.my-company.compara que cada um aponte como um CNAME para o seu serviço Docker emhttps://<XXXXXX>.stackhero-network.com.