Como Instalar o Dify no Portainer para Iniciantes – LowCode

Passo 1

Antes de começarmos a configuração do Dify no Portainer.io no Docker Swarm, é essencial garantir um desempenho ótimo e tempo de resposta rápido. Recomendamos contratar um servidor VPS, de preferência localizado no Brasil, para otimizar a experiência. Abaixo, fornecemos um link para contratação, juntamente com nosso suporte para auxiliá-lo durante o processo.

Pré-requisitos:

Passo 2

Acesse seu terminal de comando e execute os comandos a seguir:

Este comando é para copiar o repositório oficial da Dify

				
					git clone https://github.com/langgenius/dify.git
				
			

Já este comando é para mover a pasta do nginx para dentro do caminho correto, você pode verificar nos seus arquivos FTP.

				
					sudo mv /root/dify/docker/nginx /root/nginx
				
			

Passo 3

Gerando Senha App com Gmail

Passo 1: Acesse suas Configurações de Conta do Google

Passo 2: Acesse a seção “Segurança”

  • Depois de fazer login, vá para a seção “Segurança”. Você pode encontrar isso no menu à esquerda da página.

Passo 3: Encontre a opção “Senhas de app”

  • Role para baixo até encontrar a opção “Senhas de app” e clique nela. Isso geralmente está sob a seção “Fazer login no Google”.

Passo 4: Selecione o aplicativo

  • Você verá uma lista de aplicativos compatíveis com senhas de app. Escolha o aplicativo para o qual deseja gerar uma senha.

Passo 5: Crie a senha de app

  • Selecione o tipo de dispositivo (por exemplo, “Outro (personalizado)”) e clique em “Gerar”. O Google irá gerar uma senha exclusiva para o aplicativo escolhido.

Passo 6: Use a senha de app

  • Copie a senha gerada e cole-a no aplicativo onde está configurando a conta. Certifique-se de usar essa senha em vez da sua senha regular do Gmail.

Passo 7: Guarde sua senha de app em um local seguro

  • Depois de usar a senha de app, é recomendável que você a armazene em um local seguro, como em um gerenciador de senhas, para referência futura.

Passo 4

Configurando sua stack:

				
					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=<altere_aqui> #atenção
      - CONSOLE_WEB_URL=
      - INIT_PASSWORD=
      - CONSOLE_API_URL=
      - SERVICE_API_URL=
      - FILES_URL=
      ## Url Dify
      - APP_WEB_URL=https://seudominio.com.br #atenção
      ## Dados Postgres
      - MIGRATION_ENABLED=true
      - DB_USERNAME=postgres
      - DB_PASSWORD=<altere_aqui> #atenção
      - 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=s3.seudominio.com.br #atenção
      - S3_BUCKET_NAME=dify
      - S3_ACCESS_KEY=<altere_aqui> #atenção
      - S3_SECRET_KEY=<altere_aqui> #atenção
      ## Dados Weaviate
      - VECTOR_STORE=weaviate
      - WEAVIATE_ENDPOINT=http://weaviate:8080
      - WEAVIATE_API_KEY=<altere_aqui> #atenção
      - WEAVIATE_CLIENT_TIMEOUT=20
      ## Dados do Email
      - MAIL_TYPE=smtp
      - MAIL_DEFAULT_SEND_FROM=seuemail@gmail.com (eg=no-reply seuemail@gmail.com) #atenção
      - SMTP_SERVER=smtp.gmail.com
      - SMTP_PORT=587
      - SMTP_USERNAME=seuemail@gmail.com #atenção
      - SMTP_PASSWORD=<altere_aqui> #atenção
      ## Sentry
      - SENTRY_DSN=
      - SENTRY_TRACES_SAMPLE_RATE=1.0
      - SENTRY_PROFILES_SAMPLE_RATE=1.0

    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == 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=<altere_aqui> #atenção Igual a primeira
      ## Dados Postgres
      - DB_USERNAME=postgres
      - DB_PASSWORD=<altere_aqui> #atenção
      - 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=http://weaviate:8080
      - WEAVIATE_API_KEY=<altere_aqui> #atenção
      - WEAVIATE_CLIENT_TIMEOUT=20
      ## Dados do Email
      - MAIL_TYPE=smtp
      - MAIL_DEFAULT_SEND_FROM=seuemail@gmail.com (eg=no-reply seuemail@gmail.com) #atenção
      - SMTP_SERVER=smtp.gmail.com
      - SMTP_PORT=587
      - SMTP_USERNAME=seuemail@gmail.com #atenção
      - SMTP_PASSWORD=<altere_aqui> #atenção

    depends_on:
      - postgres
      - redis          
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == 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=https://seudominio.com.br #atenção
      - SENTRY_DSN=
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager
      resources:
        limits:
          cpus: "1"
          memory: 1024M

  nginx:
    image: nginx:latest
    entrypoint: ["sh", "-c", "chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh"]
    volumes:
      - /root/nginx/nginx.conf.template:/etc/nginx/nginx.conf.template
      - /root/nginx/proxy.conf.template:/etc/nginx/proxy.conf.template
      - /root/nginx/conf.d:/etc/nginx/conf.d
      - /root/nginx/docker-entrypoint.sh:/docker-entrypoint.sh
      - /root/nginx/ssl:/etc/ssl
    networks:
      - traefik_public
      - digital_network
    environment:
      - NGINX_SSL_CERT_FILENAME=dify.crt
      - NGINX_SSL_CERT_KEY_FILENAME=dify.key
      - 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:
          - node.role == manager
      resources:
        limits:
          cpus: "0.5"
          memory: 2048M
      labels:
        - traefik.enable=true
        - traefik.http.routers.nginx.rule=Host(`seudominio.com.br`) # Url do Dify
        - traefik.http.routers.nginx.entrypoints=websecure
        - traefik.http.routers.nginx.tls.certresolver=le
        - traefik.http.services.nginx.loadbalancer.server.port=80
        - traefik.http.services.nginx.loadbalancer.passHostHeader=true
        - traefik.http.routers.nginx.service=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: <altere_aqui> #atenção
      AUTHENTICATION_APIKEY_USERS: hello@dify.ai
      AUTHORIZATION_ADMINLIST_ENABLED: 'true'
      AUTHORIZATION_ADMINLIST_USERS: hello@dify.ai
    networks:
      - traefik_public
      - digital_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == 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
				
			

Passo 5 - Criando Banco de Dados no Postgres

2. Acesse o terminal do postgres:

  • Em User: Em vez de “root” acesse com “postgres”
  • Dentro do terminal digite os comandos abaixo:
				
					psql
				
			
				
					CREATE DATABASE difydb;
				
			
Subindo-Stack-Portainer-Traefik

Após o Deploy - Aguarde de 5 à 10 min

Salve sua senha para efetuar o login após o primeiro cadastro, utilize o mesmo email cadastrado no SMTP da sua Stack.

Gostou do conteúdo? Quer apoiar nosso trabalho?

Você pode fazer uma doação e nos ajudar a continuar criando conteúdo de qualidade. Acesse o link para ver as formas de pagamento disponíveis: https://www.asaas.com/c/io73sms6maiim7ud

Chave Pix: (15) 99855-8323

Share the Post:

Post Relacionados