Portainer: Gerenciamento de Contêineres
Portainer: Gerenciamento de Contêineres
O [Link] é uma ferramenta de gerenciamento de contêineres que simplifica o processo de implantar e gerenciar
aplicativos em ambientes de contêineres. Ele fornece uma interface gráfica de usuário intuitiva que torna o
gerenciamento de contêineres muito mais fácil e acessível do que a linha de comando.
Com o [Link], os usuários podem criar, gerenciar e monitorar seus contêineres de maneira visual e eficiente. Ele
suporta vários mecanismos de contêineres populares, como Docker, Swarm e Kubernetes, o que o torna uma solução
abrangente para diferentes ambientes de implantação.
Além disso, o [Link] oferece recursos avançados, como gerenciamento de imagens, implantação de pilhas e
monitoramento de desempenho, tornando-o uma ferramenta poderosa e versátil para equipes de desenvolvimento e
operações que trabalham com contêineres.
Entenda o Docker
O Docker é uma plataforma de computação em contêiner que permite aos desenvolvedores criar, implantar e executar
aplicativos em ambientes isolados chamados contêineres. Essa tecnologia revolucionou a forma como os aplicativos
são desenvolvidos, empacotados e distribuídos.
Com o Docker, os desenvolvedores podem empacotar seu aplicativo e todas as suas dependências em um único
contêiner, garantindo que ele funcione de maneira consistente em qualquer ambiente, seja na máquina do
desenvolvedor, em um servidor na nuvem ou em qualquer outra infraestrutura.
Essa abordagem traz inúmeros benefícios, como maior portabilidade, escalabilidade e eficiência. Os contêineres Docker
são leves, rápidos e fáceis de gerenciar, o que facilita a implantação e a atualização de aplicativos em produção.
Além disso, o Docker fornece uma vasta comunidade e ecossistema de ferramentas e serviços que auxiliam no
gerenciamento e na orquestração de contêineres, tornando-o uma solução completa e robusta para o desenvolvimento
e a implantação de aplicativos modernos.
André Alencar, palestrante, empreendedor serial, graduado em Sistemas para Internet, Engenheiro de Software, Técnico
em Eletrônica e Telecomunicações, programador REACT, REACT NATIVE, ANDROID, PYTHON, DJANGO, especialista
em SEO, sócio fundador dos provedores de Internet MNET, WEB POINT, SPECTRUM Telecomunicações.
CEO e fundador do [Link], [Link], Zigg Downloads, Glix - Buscador de Anúncios Classificados,
Entusiasta de Tecnologia e Startups.
André Alencar já foi premiado com IBEST 2007 e como Melhor Empreendedor individual e já realizou diversas palestras
na feira do empreendedor do SEBRAE e Google for Entrepreneurs.
by André Alencar
Índice
1 Docker na prática
Passo a passo para criar seu primeiro server
2 Docker Swarm
Entenda o Docker Swarm e suas vantagens
4 Conectando ao Servidor
Entenda o básico para conectar no seu servidor
5 Instalando o Portainer
Instalando a última versão do Docker
7 Instalando o Traefik
O Traefik trás funcionalidades perfeitas para gerenciar seus apps no servidor
9 Instalando o n8n
Finalmente instalando n8n
10 Instalando o Dify
Deploy do Dify no portainer em poucos minutos
O Docker na prática
Um exemplo prático de utilização do Docker é o desenvolvimento e
implantação de aplicativos web. Suponha que você tenha uma aplicação
web escrita em Python que utiliza um banco de dados PostgreSQL. Com o
Docker, você pode criar um contêiner para a aplicação web e outro
contêiner para o banco de dados, garantindo que o ambiente de execução
seja idêntico em todos os ambientes, desde o desenvolvimento local até a
produção.
Dessa forma, você pode empacotar toda a pilha tecnológica do seu
aplicativo em contêineres independentes e interconectados. Isso facilita
enormemente o processo de implantação, pois você não precisa se
preocupar com a instalação e configuração de todas as dependências em
cada ambiente.
Além disso, os contêineres Docker são altamente escaláveis. Você pode
facilmente aumentar ou diminuir o número de réplicas de cada componente,
dependendo da demanda de tráfego do seu aplicativo. Isso permite que
você gerencie a capacidade de forma eficiente e evite problemas de
desempenho.
Outro benefício importante do Docker é a portabilidade. Ao empacotar seu
aplicativo em contêineres, você pode movê-lo entre diferentes plataformas
e infraestruturas, como servidores físicos, máquinas virtuais ou nuvem, sem
ter que se preocupar com incompatibilidades ou configurações específicas.
Docker Swarm
O Docker Swarm é uma ferramenta de orquestração de contêineres que permite criar e gerenciar um cluster de hosts
Docker. Essa funcionalidade é especialmente útil quando você precisa escalar sua infraestrutura e gerenciar vários
contêineres em diferentes máquinas.
Com o Docker Swarm, você pode criar um *cluster de hosts Docker, onde cada host é chamado de "nó". Esses nós
podem ser máquinas físicas ou virtuais, localizadas no local ou na nuvem. O Docker Swarm então se encarrega de
distribuir e gerenciar os contêineres entre esses nós de forma transparente e escalável.
Um dos principais benefícios do Docker Swarm é a facilidade de implantação e gerenciamento de aplicativos em larga
escala. Você pode definir serviços, que são conjuntos de contêineres que trabalham juntos para fornecer uma
determinada funcionalidade. O Swarm então cuida da replicação, balanceamento de carga e failover desses serviços,
garantindo a alta disponibilidade do seu aplicativo.
Além disso, o Docker Swarm oferece recursos avançados, como roteamento de tráfego, descoberta de serviços,
atualizações de serviços e muito mais. Isso torna a orquestração de contêineres em ambientes de produção muito mais
simples e eficiente.
cluster : Um cluster é uma coleção de computadores ou servidores que trabalham juntos como um único sistema. No contexto do Docker, um
cluster é um conjunto de hosts Docker que são agrupados e gerenciados como uma única entidade .
Instalando o seu primeiro Servidor na Hostinger
Criar um domínio na Hostinger é um passo importante ao iniciar um projeto online. A Hostinger é uma das principais
empresas de hospedagem web, oferecendo soluções acessíveis e confiáveis para quem deseja ter seu próprio site ou
aplicativo na internet.
O primeiro passo é acessar o site da [Link] e clicar na opção de comprar um novo domínio. Você pode
pesquisar e selecionar um nome de domínio disponível que seja relevante para o seu projeto. A Hostinger oferece uma
ampla variedade de extensões de domínio, como .com, .net, .org, entre outras, para que você possa escolher a que
melhor se ajusta às suas necessidades.
Após selecionar o domínio desejado, você precisará preencher algumas informações básicas, como seus dados
pessoais e de contato. Essa etapa é importante para que a Hostinger possa registrar o domínio em seu nome e fornecer
os serviços de hospedagem associados.
Os domínios com extensão .online tem o melhor custo benefício caso o seu objetivo seja apenas tem um servidor
para automação. Mas se o objetivo por ter um site ou serviço online dê preferência as domínios .com, .net ou .[Link]
Ganhe até 20% de desconto utilizando o link promocional abaixo:
[Link]
Para quem está começando a aprender sobre Docker, um plano mensal com o servidor mais barato da Hostinger é uma
ótima opção. Essa escolha permite que você tenha um ambiente de desenvolvimento e teste sem precisar fazer um
investimento inicial alto.
O plano mensal fornece recursos suficientes para você experimentar e praticar os conceitos do Docker, como criar e
gerenciar contêineres, imagens e redes. Além disso, a Hostinger oferece recursos de hospedagem web que podem ser
integrados aos seus projetos Docker, facilitando o deploy de aplicações.
Ao optar por um plano mensal, você também tem a flexibilidade de testar diferentes configurações e recursos conforme
suas necessidades evoluem. Isso é especialmente útil durante a fase de aprendizado, quando você está explorando as
funcionalidades do Docker e descobrindo a melhor maneira de aplicá-lo em seus projetos.
Portanto, um plano mensal com o servidor mais barato da Hostinger é uma escolha recomendada para quem está
começando a aprender sobre Docker. Essa abordagem permite que você se familiarize com a tecnologia de maneira
gradual e acessível, antes de considerar planos de hospedagem mais robustos no futuro.
Local do Servidor
Escolha a localidade com menor latência (LEG)
para ótima performance do seu servidor.
Senha Forte
Crie uma senha forte ou clique em "gerar
senha" para ter uma senha de acesso ao seu
servidor. Guarde em um local seguro e fácil de
lembrar pois iremos sempre precisar da sua
senha de acesso "root" ao servidor.
Sistema
Escolha a opção "Aplicações" e depois role a
tela até o final até encontrar o servidor com
"Docker" já configurado.
Criar um domínio é um processo simples e rápido. Você pode adquirir um novo domínio diretamente na Hostinger ou
transferir um domínio existente para a sua conta. Após a conclusão desse processo, você poderá configurar o seu
servidor VPS para responder a esse domínio, garantindo que os usuários acessem o seu conteúdo de forma fácil e
intuitiva.
Para testes recomendamos um domínio com extensão .online que tem o custo muito reduzido. Mas para sites e
sistemas para uso público, recomendo o uso do .com, .net.
É importante lembrar que a configuração correta do domínio é essencial para o bom funcionamento do seu servidor.
Certifique-se de seguir as orientações da Hostinger para vincular o seu domínio ao VPS e configurar os serviços
necessários, como servidores web, bancos de dados e outras aplicações que você pretende hospedar.
Configurando o domínio
Antes de iniciarmos a configuração do servidor é necessário fazer alguns ajustes do seu domínio que iremos chamar de
"[Link]".
Entre no menu "VPS" para pegar o IP do seu servidor VPS e salve no bloco de notas ou em outro editor, pois iremos
utilizar este número em vário locais deste tutorial.
Caso utilize uma versão antiga do Windows será necessário instalar um aplicativo para acesso remoto SSH.
Ao clicar no ítem selecionado você verá uma tela semelhante a imagem abaixo:
Sobre o SSH:
SSH, ou Secure Shell, é um protocolo de rede utilizado para estabelecer uma conexão segura e criptografada entre um
cliente e um servidor remoto. Essa conexão permite que você acesse e controle um sistema remoto de forma segura,
realizando tarefas como execução de comandos, transferência de arquivos e gerenciamento de serviços.
O uso do SSH é fundamental quando você precisa acessar e administrar um servidor ou máquina virtual, como aquelas
providas pela Hostinger. Ao se conectar via SSH, você garante que sua comunicação esteja protegida contra
interceptações e ataques, mantendo a privacidade e integridade dos seus dados.
Além da segurança, o SSH também oferece outras vantagens, como a capacidade de executar comandos
remotamente, transferir arquivos entre o seu computador e o servidor, e até mesmo redirecionar portas e túneis de rede
de forma segura. Essas funcionalidades são especialmente úteis quando você está trabalhando com infraestrutura de
TI, desenvolvimento de software ou administração de sistemas.
Instalando o Portainer
Depois que seu servidor estiver funcionando na Hostinger, o próximo passo importante é a instalação do Portainer. Essa
ferramenta de gerenciamento de contêineres Docker vai facilitar muito a administração do seu ambiente.
Como você selecionou uma configuração de VPS que já inclui o Docker pré-instalado, a instalação do Portainer se torna
um processo bastante simples e rápido. Não será necessário realizar nenhuma configuração complexa ou instalar
componentes adicionais.
Com o Portainer, você terá uma interface web amigável e intuitiva para gerenciar todos os seus contêineres Docker.
Será possível criar, iniciar, parar e monitorar os serviços em execução no seu servidor VPS de forma centralizada e
eficiente.
Instalando o Portainer
Conecte na sua VPS usando o IP do servidor, senha de root e o programa SSH de sua escolha:
mkdir portainer
cd portainer
nano [Link]
Conteúdo do arquivo:
version: "3.8"
services:
agent:
image: portainer/agent:2.20.1
volumes:
- /var/run/[Link]:/var/run/[Link]
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [ [Link] == linux ]
portainer:
image: portainer/portainer-ce:2.20.1
command: -H tcp://[Link] --tlsskipverify
ports:
- 9000:9000
volumes:
- portainer_data:/data
networks:
- agent_network
- traefik_public
deploy:
mode: replicated
replicas: 1
placement:
constraints: [ [Link] == manager ]
#labels:
#- "[Link]=true"
#- "[Link]=traefik_public"
#- "[Link]=Host(`portainer.SEU_DOMINIO.com`)"
#- "[Link]=websecure"
#- "[Link]=1"
#- "[Link]=le"
#- "[Link]=portainer"
#- "[Link]=9000"
networks:
traefik_public:
external: true
attachable: true
agent_network:
external: true
volumes:
portainer_data:
external: true
agora para salvar o arquivo tecle CONTROL + O depois CONTROL + X para sair
Deploy do Portainer:
É importante lembrar que o acesso ao Portainer é feito através da porta 9000. Certifique-se de que essa porta está
liberada em seu firewall para que você possa acessá-lo remotamente. Caso contrário, você precisará configurar as
regras de acesso para poder utilizar a ferramenta.
Após a criação da conta no Portainer, você será direcionado para o dashboard da ferramenta. Essa interface inicial é
extremamente importante, pois é a partir dela que você terá acesso a todas as funcionalidades e recursos disponíveis
no Portainer.
O dashboard do Portainer é dividido em diferentes seções, cada uma com uma finalidade específica. Na parte superior,
você encontrará informações gerais sobre o seu ambiente Docker, como a versão do Docker instalada e o número de
contêineres em execução.
Na seção central, você verá uma visão geral de todos os seus recursos Docker, como contêineres, redes, volumes e
imagens. Essa visão centralizada permite que você tenha um entendimento rápido e claro do seu ambiente, facilitando a
administração e o gerenciamento.
Além disso, o dashboard também apresenta opções de ações rápidas, como a criação de novos contêineres, a edição
de configurações de rede e a gerência de volumes. Essas funcionalidades tornam a interação com o Portainer muito
intuitiva e simplificam tarefas que, de outra forma, seriam mais complexas de serem realizadas diretamente na linha de
comando.
Portanto, o dashboard do Portainer é o ponto de partida essencial para você explorar e gerenciar todo o seu ambiente
Docker de forma eficiente e centralizada. Familiarize-se com essa interface, pois ela será sua principal ferramenta de
administração do seu servidor VPS na Hostinger.
Instalando o Traefik
O Traefik é uma ótima ferramenta para gerenciar o tráfego de rede em ambientes Docker. Ele atua como um proxy
reverso e balanceador de carga, simplificando o acesso aos seus serviços e aplicações em contêineres.
Com o Traefik, você pode configurar rotas de rede de forma centralizada, direcionando o tráfego para os contêineres
corretos com base em regras predefinidas. Isso permite que você exponha múltiplos serviços em um único domínio,
com cada serviço acessível por uma rota específica.
Além disso, o Traefik é capaz de descobrir automaticamente novos serviços em execução, configurando as rotas de
rede de forma dinâmica. Isso significa que, à medida que você adiciona ou remove contêineres, o Traefik se ajusta para
manter tudo funcionando corretamente.
Outra funcionalidade importante do Traefik é a geração automática de certificados SSL/TLS, garantindo que o acesso
aos seus serviços seja feito de forma segura e criptografada. Isso evita a necessidade de configurar manualmente os
certificados para cada aplicação.
No contexto do seu servidor VPS na Hostinger, o Traefik se integra perfeitamente com o Portainer, permitindo que você
gerencie todo o ambiente de rede e segurança de forma centralizada e eficiente. Essa combinação de ferramentas
torna a administração do seu ambiente Docker muito mais simples e escalável.
Para criar uma nova Stack, você precisará acessar a seção "Stacks" no Portainer. Nesta área, você encontrará todas as
Stacks existentes e poderá gerenciá-las de forma centralizada.
Para adicionar uma nova Stack, basta clicar no botão "Adicionar Stack". Aqui, você poderá fornecer as informações
necessárias, como o nome da Stack e o arquivo de composição ([Link]) que descreve os serviços que
compõem a aplicação.
Após preencher essas informações, o Portainer irá fazer o deploy da sua nova Stack, provisionando todos os serviços e
contêineres necessários. Você poderá acompanhar o progresso do deploy e, em seguida, visualizar a Stack em
execução no dashboard do Portainer.
Essa funcionalidade de Stacks é extremamente útil, pois permite que você gerencie todo o seu ambiente de aplicações
de forma simplificada. Você pode criar, atualizar, pausar ou remover Stacks inteiras com apenas alguns cliques,
simplificando a administração do seu servidor VPS.
Conteúdo da Stack
No código abaixo substitua o valor "seuemail@[Link]" pelo seu e-mail válido.
version: '3.8'
services:
traefik:
image: traefik:v2.11
command:
- --[Link]=true
- --[Link]=:80
- --[Link]=:443
- --[Link]=false
- --[Link]=true
- --[Link]=traefik_public
- --[Link]=unix:///var/run/[Link]
# Config para SSL Lets Encrypt
# altere para seu e-mail
- --[Link]=web
- --[Link]=seuemail@[Link]
- --[Link]=/letsencrypt/[Link]
- --[Link]=true
# Global HTTP -> HTTPS
- --[Link]=websecure
- --[Link]=https
#- --api
#- --[Link]=DEBUG
ports:
- "80:80"
#- "8080:8080"
- "443:443"
volumes:
- traefik_certificates:/letsencrypt
- "/var/run/[Link]:/var/run/[Link]:ro"
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
networks:
- traefik_public
volumes:
traefik_certificates:
external: true
name: certificados
networks:
traefik_public:
external: true
Para integrar o Traefik com o Portainer, é necessário fazer algumas configurações adicionais no Portainer. Isso garantirá
que o Traefik seja capaz de detectar e gerenciar corretamente todos os serviços implantados no seu ambiente Docker.
Após realizar esses ajustes no Portainer, você terá uma solução completa e escalável para implantar e gerenciar seus
serviços Docker, com o Traefik cuidando do roteamento e balanceamento de carga, e o Portainer fornecendo uma
interface de gerenciamento intuitiva.
Ajustes finais:
Para o TRAEFIK funcionar perfeitamente é necessário que você tenha seguido os passo no capítulo passado onde
criamos um domínio e os registros CNAMES : [Link], [Link], etc ..
Acesse novamente o seu servidor através do SSH e vá na pasta criada anteriormente e edite o arquivo com o comando
a seguir:
cd portainer
nano [Link]
labels:
- "[Link]=true"
#- "[Link]=traefik_public"
- "[Link]=Host(`portainer.SEU_DOMINIO.com`)"
- "[Link]=websecure"
- "[Link]=1"
- "[Link]=le"
- "[Link]=portainer"
- "[Link]=9000"
Tecle CONTROL + O e depois CONTROL + X para sair e depois execute o deploy novamente com o comando abaixo
para colocar o TRAEFIK no ar.
[Link]
Preparando o Portainer para o n8n
O Portainer é uma ferramenta extremamente útil para facilitar a instalação e gerenciamento de sistemas em seu servidor
VPS. Quando se trata de instalar o n8n, um poderoso sistema de automação de fluxos de trabalho, o Portainer torna
esse processo muito mais simples e acessível.
Ao utilizar o Portainer, você pode evitar as complexidades e dificuldades que normalmente estariam envolvidas na
instalação manual do n8n. O Portainer fornece uma interface gráfica intuitiva que permite que você implante e gerencie
o n8n com apenas alguns cliques.
Para ter um n8n instalado em seu servidor, basta seguir os passos guiados pelo Portainer. Ele irá cuidar de todas as
configurações necessárias, garantindo que o n8n seja implantado corretamente e esteja pronto para uso imediato.
Essa integração entre o Portainer e o n8n simplifica enormemente o processo de instalação e configuração, permitindo
que você se concentre em construir seus fluxos de trabalho automatizados, sem se preocupar com as complexidades
técnicas por trás.
Com o Portainer, você terá uma solução abrangente para gerenciar todo o seu ambiente de servidor, incluindo a
implantação de aplicativos como o n8n. Isso torna a administração do seu servidor VPS muito mais eficiente e acessível.
Para o n8n rodar em nosso server precisamos instalar antes 02 softwares essenciais:
Redis
Postgres
Instalando o Redis:
O Redis é uma base de dados open-source, de alto desempenho, que funciona como um servidor de estruturas de
dados em memória. Ele é amplamente utilizado para uma variedade de aplicações, desde cache de dados até
processamento em tempo real.
Uma das principais características do Redis é sua velocidade extremamente rápida. Isso se deve ao fato de que ele
armazena todos os dados na memória RAM, em vez de em disco, o que permite acesso e manipulação de dados muito
mais eficientes.
Além disso, o Redis suporta diversos tipos de estruturas de dados, como strings, hashes, listas, conjuntos e muito mais.
Essa flexibilidade torna o Redis uma escolha popular para uma ampla gama de casos de uso, desde aplicações web até
sistemas de mensageria.
Outra vantagem significativa do Redis é sua escalabilidade. Ele pode ser facilmente implantado em clusters, permitindo
que você aumente a capacidade de processamento e armazenamento conforme sua aplicação cresce.
No contexto do seu servidor VPS na Hostinger, o Redis pode ser uma ferramenta extremamente útil para melhorar o
desempenho e a escalabilidade de suas aplicações. Sua integração com outras tecnologias, como o Docker e o
Portainer, torna a implantação e o gerenciamento do Redis ainda mais simples e eficiente.
Seguindo o mesmo processo do Traefik vamos adcionar um STACK para o Redis:
Crie uma rede no portainer com o nome de 'digital_network':
version: "3.8"
services:
redis:
image: redis:7
command: ["redis-server", "--appendonly", "yes", "--port", "6379"]
# se desejar utilizar com senha, utilize essa linha abaixo.
#command: ["redis-server", "--appendonly", "yes", "--port", "6379", "--requirepass", "SENHA_AQUI"]
networks:
- digital_network
volumes:
- redis_data:/data
deploy:
mode: replicated
replicas: 1
resources:
limits:
cpus: "1"
memory: 1024M
placement:
constraints:
# manager ou worker
- [Link] == manager
volumes:
redis_data:
external: true
networks:
digital_network:
external: true
Coloque o nome da STACK de redis (em minúsculo) e depois clique em "DEPLOY STACK"
Ao final o redis deve aparecer em sua lista de STACKS:
Instalando o POSTGRES
O PostgreSQL, também conhecido simplesmente como Postgres, é um poderoso sistema de gerenciamento de banco
de dados relacional de código aberto. Ele é amplamente utilizado em uma variedade de aplicações, desde pequenos
projetos até grandes sistemas empresariais.
Uma das principais características do PostgreSQL é sua robustez e confiabilidade. Ele é conhecido por sua integridade
de dados, suporte a transações ACID e recursos avançados de segurança e concorrência. Isso o torna uma escolha
popular para aplicações que exigem alto desempenho e confiabilidade.
Além disso, o PostgreSQL é altamente escalável e suporta uma ampla gama de tipos de dados, incluindo números,
textos, datas, JSON, entre outros. Isso o torna extremamente versátil e capaz de atender a uma variedade de requisitos
de aplicações.
No contexto do seu servidor VPS na Hostinger, o PostgreSQL pode ser uma excelente opção para armazenar e
gerenciar os dados de suas aplicações. Sua integração com outras tecnologias, como o Docker e o Portainer, facilita a
implantação e o gerenciamento do banco de dados em seu ambiente de servidor.
Ao utilizar o PostgreSQL em conjunto com outras ferramentas, como o Portainer, você pode criar uma infraestrutura de
servidor robusta e altamente escalável, capaz de suportar suas aplicações de forma eficiente e confiável.
Atenção !
Observe que é necessário criar um senha e alterar no código abaixo no lugar de [sua_senha]. A senha do POSTGRES
será necessária caso deseja acessar os dador contidos neste banco de dados, por isso anote em lugar seguro e de fácil
acesso.
Então crie uma nova STACK conforme o passo anterior.
Conteúdo da STACK:
version: "3.8"
services:
postgres:
image: postgres:16.4
command: [postgres, --max_connections=100]
environment:
- POSTGRES_PASSWORD=[sua_senha]
networks:
- digital_network
volumes:
- postgres_data:/var/lib/postgresql/data
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
#- [Link] == worker
#- [Link] == database
resources:
limits:
cpus: "1"
memory: 2048M
volumes:
postgres_data:
external: true
networks:
digital_network:
external: true
Coloque o nome da STACK de postgres (em minúsculo) e depois clique em "DEPLOY STACK"
psql
Pronto agora o postgres está instalado e com a tabela para o n8n criada.
Finalmente fazendo DEPLOY do n8n
A STACK do n8n é pouco maior, mas com atenção é fácil fazer em poucos cliques. Apenas altere os dados e crie uma
nova STACK com o conteúdo abaixo:
Não esqueça de alterar em todos os pontos onde existir '[Link]' e trocar pelo domínio que você
configurou na [Link] .
No local onde estiver escrito <suachave32caracteres> no campo N8N_ENCRYPTION_KEY substitua por uma
senha gerada no endereço: [Link]
No campo onde estiver escrito <senha postgres> substitua pela senha criado em seu banco de dados postgres
Copie e cole o código abaixo (e depois modificar conforme explicado) para o conteúdo da nova STACK
version: "3.8"
services:
n8n_editor:
image: n8nio/n8n:1.59.4
#command: start
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n_fila
DB_POSTGRESDB_USER: <senha postgres>
DB_POSTGRESDB_PASSWORD: postgres
# criar chave [Link]
N8N_ENCRYPTION_KEY: <suachave32caracteres>
# hosts e URL
N8N_HOST: [Link]
N8N_EDITOR_BASE_URL: [Link]
N8N_PROTOCOL: https
NODE_ENV: production
# webhooks
WEBHOOK_URL: [Link]
# modo de execuçao para fila
EXECUTIONS_MODE: queue
# redis
QUEUE_BULL_REDIS_HOST: redis
QUEUE_BULL_REDIS_PORT: 6379
QUEUE_BULL_REDIS_DB: 2
# bibliotecas utilizadas
NODE_FUNCTION_ALLOW_EXTERNAL: moment,lodash,moment-with-locales
EXECUTIONS_DATA_PRUNE: 'true'
EXECUTIONS_DATA_MAX_AGE: 336
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: '0.3'
memory: 512M
labels:
- [Link]=true
- [Link].n8n_editor.rule=Host(`[Link]`)
- [Link].n8n_editor.service=n8n_editor
- [Link].n8n_editor.entrypoints=websecure
- [Link].n8n_editor.[Link]=le
- [Link].n8n_editor.tls=true
- [Link].n8n_editor.[Link]=5678
networks:
- traefik_public
- digital_network
n8n_webhook:
image: n8nio/n8n:1.59.4
command: webhook
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n_fila
DB_POSTGRESDB_USER: postgres
DB_POSTGRESDB_PASSWORD: <suasenha>
# criar chave [Link]
N8N_ENCRYPTION_KEY: <suachave32caracteres>
# hosts e URL
N8N_HOST: [Link]/
N8N_EDITOR_BASE_URL: [Link]
N8N_PROTOCOL: https
NODE_ENV: production
# webhooks
WEBHOOK_URL: [Link]
# modo de execuçao para fila
EXECUTIONS_MODE: queue
# redis
QUEUE_BULL_REDIS_HOST: redis
QUEUE_BULL_REDIS_PORT: 6379
QUEUE_BULL_REDIS_DB: 2
# bibliotecas utilizadas
NODE_FUNCTION_ALLOW_EXTERNAL: moment,lodash,moment-with-locales
EXECUTIONS_DATA_PRUNE: 'true'
EXECUTIONS_DATA_MAX_AGE: 336
deploy:
mode: replicated
# pode criar replicas
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: '0.5'
memory: 320M
labels:
- [Link]=true
- [Link].n8n_webhook.rule=Host(`[Link]`)
- [Link].n8n_webhook.service=n8n_webhook
- [Link].n8n_webhook.entrypoints=websecure
- [Link].n8n_webhook.[Link]=le
- [Link].n8n_webhook.tls=true
- [Link].n8n_webhook.[Link]=5678
networks:
- traefik_public
- digital_network
n8n_worker:
image: n8nio/n8n:1.59.4
command: worker --concurrency=3
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n_fila
DB_POSTGRESDB_USER: postgres
DB_POSTGRESDB_PASSWORD: <suasenha>
# criar chave [Link]
N8N_ENCRYPTION_KEY: <suachave32caracteres>
# hosts e URL
N8N_HOST: [Link]
N8N_EDITOR_BASE_URL: [Link]
N8N_PROTOCOL: https
NODE_ENV: production
# webhooks
WEBHOOK_URL: [Link]
# modo de execuçao para fila
EXECUTIONS_MODE: queue
# redis
QUEUE_BULL_REDIS_HOST: redis
QUEUE_BULL_REDIS_PORT: 6379
QUEUE_BULL_REDIS_DB: 2
# bibliotecas utilizadas
NODE_FUNCTION_ALLOW_EXTERNAL: moment,lodash,moment-with-locales
EXECUTIONS_DATA_PRUNE: 'true'
EXECUTIONS_DATA_MAX_AGE: 336
deploy:
mode: replicated
# pode criar replicas
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: '0.5'
memory: 384M
networks:
- traefik_public
- digital_network
networks:
traefik_public:
external: true
digital_network:
external: true
Após o DEPLOY do n8n você deverá conseguir acessar a aplicação no endereço [Link]
Instalando o Dify no portainer
O [Link] é uma plataforma de automação de fluxos de trabalho (workflows) que permite a criação de aplicações sem a
necessidade de escrever código. Ela é uma ferramenta poderosa e versátil que pode ser utilizada em uma ampla
variedade de cenários, desde a automatização de tarefas simples até a construção de aplicações complexas.
Uma das principais vantagens do [Link] é sua interface intuitiva e de fácil utilização. Mesmo usuários sem experiência
em programação podem criar fluxos de trabalho sofisticados, conectando diferentes serviços e aplicações de forma
visual e drag-and-drop.
Além disso, o [Link] oferece uma extensa biblioteca de conectores pré-construídos, permitindo a integração com uma
ampla gama de ferramentas populares, como o Google Sheets, o Slack, o Trello e muito mais. Isso facilita a
automatização de processos complexos sem a necessidade de desenvolvimento personalizado.
No contexto do seu servidor VPS na Hostinger, o [Link] pode ser uma ferramenta extremamente útil para automatizar
tarefas e processos, melhorando a eficiência e a produtividade de sua equipe. Sua integração com o Portainer torna a
implantação e o gerenciamento do [Link] ainda mais simples e eficiente.
Ao combinar o poder do [Link] com a infraestrutura escalável e confiável do seu servidor VPS na Hostinger, você pode
criar soluções personalizadas que atendam às necessidades específicas de sua organização, impulsionando sua
produtividade e competitividade no mercado.
O MinIO é uma plataforma de armazenamento de objetos de alta performance e escalável, projetada para ser uma
alternativa open-source e de alta performance ao Amazon S3. Com o MinIO, você pode criar seu próprio serviço de
armazenamento em nuvem, hospedado em sua própria infraestrutura.
Ao integrar o MinIO com seu servidor VPS na Hostinger, você pode desfrutar de uma solução de armazenamento
altamente confiável e segura, com total controle sobre seus dados. O MinIO é conhecido por sua facilidade de
configuração e integração, permitindo que você implemente um serviço de armazenamento em nuvem personalizado
em questão de minutos.
Uma das principais vantagens do MinIO é sua escalabilidade. Ele permite que você adicione nós adicionais conforme
sua necessidade de armazenamento cresce, garantindo que você sempre tenha a capacidade necessária para atender
às demandas de seus usuários ou aplicações.
Além disso, o MinIO oferece recursos avançados de segurança, como criptografia de dados, controle de acesso
granular e integração com sistemas de autenticação existentes. Isso garante que seus dados permaneçam protegidos e
acessíveis apenas para os usuários autorizados.
Ao implantar o MinIO em seu servidor VPS na Hostinger, você pode aproveitar uma solução de armazenamento de
objetos de alto desempenho, escalável e totalmente sob seu controle. Isso lhe dará a flexibilidade e a confiança
necessárias para gerenciar seus dados de maneira eficiente e segura.
Segue abaixo a STACK no MInio, não esqueça de alterar os seguintes pontos:
MINIO_ROOT_PASSWORD : (alterar $%$_lembrar-mudar-1234)
Substituir [Link] pelo seu domínio registrado na hostinger
version: "3.8"
services:
minio:
image: [Link]/minio/minio
command: server /data --console-address ":9001"
networks:
- traefik_public
volumes:
- minio_data:/data
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: $%$_lembrar-mudar-1234
MINIO_BROWSER_REDIRECT_URL: [Link]
MINIO_SERVER_URL: [Link]
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: '0.5'
memory: 1024M
labels:
- [Link]=true
#SSL 2 endereço publico do Minio
- [Link].minio_s3.rule=Host(`[Link]`)
- [Link].minio_s3.[Link]=le
- [Link].minio_s3.entrypoints=websecure
- [Link].minio_s3.tls=true
- [Link].minio_s3.service=minio_s3
- [Link].minio_s3.[Link]=9000
#SSL 1 endereço console do minio
- [Link].minio_console.rule=Host(`[Link]`)
- [Link].minio_console.[Link]=le
- [Link].minio_console.entrypoints=websecure
- [Link].minio_console.tls=true
- [Link].minio_console.service=minio_console
- [Link].minio_console.[Link]=9001
volumes:
minio_data:
external: true
networks:
traefik_public:
external: true
MINIO_ROOT_PASSWORD
Deploy do [Link]
Agora seguindo o mesmo raciocínio e depois de ter instalado todos os pré-requisitos para o [Link] rodar no seu
servidor, precisamos ainda fazer um pequeno ajuste no postgres onde é necessário existir uma tabela de banco de
dados para que o Dify possa usar.
E no servidor é necessário digitar duas linhas de código para instalar o NGNIX.
Como o DIfy também precisa enviar e-mails para autenticação em 2 fatores é preciso ter um servidor de SMTP
(servidor de e-mails). Você pode usar o do Gmail ou em meu caso eu usei um servidor gratuito da [Link].
Neste console você irá colocar duas linhas de código para criar a tabela para o Dify
psql
Agora estamos preparados para copiar a STACK do Dify para o portainer, modificando as variáveis é claro.
Pontos importantes:
Os itens abaixo aparecem mais de uma vez dentro da STACK, muita atenção para evitar os erros de digitação.
Substitua o texto [Link] pelo seu domínio registrado na hostinger;
Substitua a SECRET_KEY por um valor gerado em: [Link]
numbers
Substitua o valor da DB_PASSWORD em <POSTGRES_PASSWORD> pela sua senha do postgres;
Acesse [Link] com o usuário admin e a senha que você criou na STACK no minio e crie uma
chave de API para ser usando em S3_ACCESS_KEY e S3_SECRET_KEY;
Altere também o SMTP_PASSWORD, MAIL_DEFAULT_SEND_FROM, SMTP_USERNAME, SMTP_SERVER,
SENHA_SMTP;
version: "3.8"
services:
api:
image: langgenius/dify-api:latest
volumes:
- storage_data:/app/api/storage
networks:
- traefik_public
- digital_network
environment:
- MODE=api
- LOG_LEVEL=INFO
- SECRET_KEY=e5787297a068ec2fb50c862d6d09f432
- CONSOLE_WEB_URL= [Link]
- INIT_PASSWORD=
- CONSOLE_API_URL=
- SERVICE_API_URL=
- FILES_URL=
## Url Dify
- APP_WEB_URL=[Link]
## Dados Postgres
- MIGRATION_ENABLED=true
- DB_USERNAME=postgres
- DB_PASSWORD=<POSTGRES_PASSWORD>
- DB_HOST=postgres
- DB_PORT=5432
- DB_DATABASE=difydb
## Dados Redis
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_USE_SSL=false
- REDIS_DB=0
- CELERY_BROKER_URL=redis://redis:6379/1
## Liberar acesso a todos os ip
- WEB_API_CORS_ALLOW_ORIGINS=*
- CONSOLE_CORS_ALLOW_ORIGINS=*
## Dados sobre armazenamento s3
- STORAGE_TYPE=local
- STORAGE_LOCAL_PATH=storage
- S3_ENDPOINT=[Link]
- S3_BUCKET_NAME=dify
- S3_ACCESS_KEY=JgdqlYQ3Qqa7tgOicK44
- S3_SECRET_KEY=kvQgZdzOpBoUykfiELKtqt8Q2j1tc9Qq77ytBZ8s
## Dados Weaviate
- VECTOR_STORE=weaviate
- WEAVIATE_ENDPOINT=[Link]
- WEAVIATE_API_KEY=<altere_aqui> #atenção
- WEAVIATE_CLIENT_TIMEOUT=20
## Dados do Email
- MAIL_TYPE=smtp
- MAIL_DEFAULT_SEND_FROM=seuemail@[Link] (eg=no-reply seuemail@[Link]) #atenção
- SMTP_SERVER=[Link]
- SMTP_PORT=587
- SMTP_USERNAME=<SMTP_USERNAME>
- SMTP_PASSWORD=<SENHA_SMTP> #atenção
## Sentry
- SENTRY_DSN=
- SENTRY_TRACES_SAMPLE_RATE=1.0
- SENTRY_PROFILES_SAMPLE_RATE=1.0
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: "1"
memory: 1024M
worker:
image: langgenius/dify-api:latest ## Versão do Dify
volumes:
- storage_data:/app/api/storage
networks:
- traefik_public
- digital_network
environment:
- MODE=worker
- LOG_LEVEL=INFO
- SECRET_KEY=e5787297a068ec2fb50c862d6d09f432
## Dados Postgres
- DB_USERNAME=postgres
- DB_PASSWORD=<POSTGRES_PASSWORD>
- DB_HOST=postgres
- DB_PORT=5432
- DB_DATABASE=difydb
## Dados Redis
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_USE_SSL=false
- REDIS_DB=0
- CELERY_BROKER_URL=redis://redis:6379/1
## Dados Weaviate
- STORAGE_TYPE=local
- STORAGE_LOCAL_PATH=storage
- VECTOR_STORE=weaviate
- WEAVIATE_ENDPOINT=[Link]
- WEAVIATE_API_KEY=<altere_aqui> #atenção
- WEAVIATE_CLIENT_TIMEOUT=20
## Dados do Email
- MAIL_TYPE=smtp
- MAIL_DEFAULT_SEND_FROM=suporte@[Link] (eg=no-reply suporte@[Link])
- SMTP_SERVER=[Link]
- SMTP_PORT=587
- SMTP_USERNAME=<SMTP_USERNAME>
- SMTP_PASSWORD=<SENHA_SMTP>
depends_on:
- postgres
- redis
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: "0.5"
memory: 1024M
web:
image: langgenius/dify-web:latest # Versão do Dify
networks:
- traefik_public
- digital_network
environment:
- EDITION=SELF_HOSTED
- CONSOLE_API_URL=
# Url Dify
- APP_API_URL=[Link]
- SENTRY_DSN=
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: "1"
memory: 1024M
nginx:
image: nginx:latest
entrypoint: ["sh", "-c", "chmod +x /[Link] && /[Link]"]
volumes:
- /root/nginx/[Link]:/etc/nginx/[Link]
- /root/nginx/[Link]:/etc/nginx/[Link]
- /root/nginx/conf.d:/etc/nginx/conf.d
- /root/nginx/[Link]:/[Link]
- /root/nginx/ssl:/etc/ssl
networks:
- traefik_public
- digital_network
environment:
- NGINX_SSL_CERT_FILENAME=[Link]
- NGINX_SSL_CERT_KEY_FILENAME=[Link]
- NGINX_SSL_PROTOCOLS=TLSv1.1 TLSv1.2 TLSv1.3
- NGINX_WORKER_PROCESSES=auto
- NGINX_CLIENT_MAX_BODY_SIZE=15M
- NGINX_KEEPALIVE_TIMEOUT=65
- NGINX_PROXY_READ_TIMEOUT=3600s
- NGINX_PROXY_SEND_TIMEOUT=3600s
- NGINX_SERVER_NAME=_
- NGINX_PORT=80
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: "0.5"
memory: 2048M
labels:
- [Link]=true
- [Link]=Host(`[Link]`) # Url do Dify
- [Link]=websecure
- [Link]=le
- [Link]=80
- [Link]=true
- [Link]=nginx
weaviate:
image: semitechnologies/weaviate:1.19.0
volumes:
- weaviate_data:/var/lib/weaviate
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
PERSISTENCE_DATA_PATH: /var/lib/weaviate
DEFAULT_VECTORIZER_MODULE: none
CLUSTER_HOSTNAME: node1
AUTHENTICATION_APIKEY_ENABLED: 'true'
AUTHENTICATION_APIKEY_ALLOWED_KEYS: e5787297a068ec2fb50c862d6d09f432
AUTHENTICATION_APIKEY_USERS: hello@[Link]
AUTHORIZATION_ADMINLIST_ENABLED: 'true'
AUTHORIZATION_ADMINLIST_USERS: hello@[Link]
networks:
- traefik_public
- digital_network
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- [Link] == manager
resources:
limits:
cpus: "1"
memory: 2048M
volumes:
storage_data:
external: true
name: storage_data
weaviate_data:
external: true
name: weaviate_data
networks:
traefik_public:
external: true
digital_network:
external: true
Agora copie e cole o código (modificado) acima e crie uma nova STACK com o nome de Dify.
Devido ao grande número de parâmetros e configurações recomendamos a análise dos logs dos CONTAINERS para
detectar erros comuns.