Prefácio: Por que você precisa criar manualmente um espaço de trabalho da Dify?
Normalmente.Dify
Os espaços de trabalho (ou "locatários") são criados por meio de sua interface gráfica. No entanto, em determinados cenários, como implementações automatizadas, criação de locatários em massa, migração de dados ou gerenciamento em um ambiente de servidor sem uma interface de front-end, a criação manual de espaços de trabalho diretamente do banco de dados e da linha de comando torna-se uma solução eficiente.
Este guia detalhará como criar manualmente e passo a passo Dify
Espaço de trabalho. Antes de começar, verifique se você tem os seguintes itens:
- direito
Dify
O sistema de arquivos do servidor back-end tem permissões de leitura e gravação. - acessível
Dify
(usado em uma expressão nominal)PostgreSQL
Banco de dados. - instalado no sistema
OpenSSL
Ferramentas de linha de comando.
Etapa 1: Preparar e inserir registros no banco de dados
A essência da criação de um novo espaço de trabalho é adicionar dois registros-chave ao banco de dados: um no tenants
para definir o novo locatário, e outra entrada na tabela tenant_account_joins
A tabela associa um locatário a uma conta existente.
1. acesso account_id
Primeiro, você precisa de uma conta de usuário para ser o proprietário do novo espaço de trabalho. O ID dessa conta, o account_id
que é a base para as operações subsequentes. Você pode fazer isso consultando o accounts
para obter o ID de um usuário existente.
Por exemplo, para localizar a caixa de correio de um usuário por meio do account_id
::
SELECT id FROM accounts WHERE email = 'user@example.com';
Anotar a consulta UUID
formal account_id
.
2. inserção de locatários e registros associados
ganho account_id
Depois disso, faça o seguinte SQL
para criar um novo locatário e estabelecer uma associação. Substitua os espaços reservados na declaração por seus valores reais.
tenants
um medidor (que mede algo)Espaço de trabalho: Define informações básicas sobre o espaço de trabalho.tenant_account_joins
um medidor (que mede algo)Conta de usuário: Define a conta especificada como "PROPRIETÁRIO" desse espaço de trabalho.
-- 向 tenants 表插入新工作空间记录,将 'My New Workspace' 替换为你的工作空间名称
INSERT INTO tenants (id, name, plan, status, created_at, updated_at)
VALUES (uuid_generate_v4(), 'My New Workspace', 'professional', 'active', now(), now())
RETURNING id; -- 执行后会返回新生成的 tenant_id,请务必记下它
-- 向 tenant_account_joins 表插入关联记录
-- 将 '<the_tenant_id_from_above>' 替换为上一步返回的 tenant_id
-- 将 '<your_account_id>' 替换为你在 1.1 节获取的 account_id
INSERT INTO tenant_account_joins (tenant_id, account_id, role, created_at, updated_at)
VALUES ('<the_tenant_id_from_above>', '<your_account_id>', 'owner', now(), now());
Implementação do artigo 1 INSERT
o banco de dados retornará um arquivo tenant_id
. Isso. ID
Ela é vital, portanto, certifique-se de copiá-la e salvá-la, pois todas as etapas subsequentes girarão em torno dela.
Anexo: Referência da estrutura da folha de dados
estrutura da tabela de locatários
Estrutura da tabela tenant_account_joins
P.S. Descrições de funções e status
Função de Conta do Locatário (role
)
caráter | conta para |
---|---|
OWNER |
Proprietário com o privilégio mais alto para gerenciar todos os recursos e usuários. |
ADMIN |
Administrador com menos privilégios do que o proprietário. |
EDITOR |
Editor com privilégios de edição de conteúdo. |
NORMAL |
Usuários comuns com direitos de acesso básicos. |
DATASET_OPERATOR |
Operador de conjunto de dados, especializado em gerenciamento de conjunto de dados. |
Status da conta (status
)
estado das coisas | valor enumerado | instruções |
---|---|---|
PENDING |
"pendente" | Uma conta foi criada, mas a verificação não foi concluída. |
UNINITIALIZED |
"uninitialized" (não inicializado) | Uma conta foi criada, mas a configuração inicial não foi concluída. |
ACTIVE |
"ativo" | A conta está normalmente ativa. |
BANNED |
"banido" | Conta desativada. |
CLOSED |
"fechado" | A conta foi encerrada. |
Etapa 2: Gerar pares de chaves RSA
Todo espaço de trabalho precisa de um par de RSA
As chaves são usadas para criptografia de dados. Isso inclui uma chave privada e uma chave pública.
1. geração de chaves privadas
Execute o seguinte OpenSSL
para gerar um comando 2048
local RSA
chave privada e salve-a como private.pem
Documentação.genpkey
é o comando moderno recomendado que passa o -algorithm
O parâmetro especifica que o algoritmo é RSA
e através de -pkeyopt
Defina o comprimento da chave.
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048
2. extração de chaves públicas
Em seguida, a partir da chave privada que acabou de ser gerada private.pem
A chave pública correspondente é extraída e salva no public.pem
Documentação.rsa
coordenação do subcomando -pubout
é usada exclusivamente para essa finalidade.
openssl rsa -pubout -in private.pem -out public.pem
Após a execução, você obterá private.pem
(chave privada) e public.pem
(chave pública) dois arquivos.
Etapa 3: Atualize a chave pública no banco de dados
show (um ingresso) public.pem
copie o arquivo -----BEGIN PUBLIC KEY-----
responder cantando -----END PUBLIC KEY-----
todo o conteúdo entre eles. Em seguida, use essa string de chave pública para atualizar o tenants
Tabela correspondente à tabela de encrypt_public_key
Campos.
Execute o seguinte SQL
lembre-se de substituir os espaços reservados:
-- 将 '<the_tenant_id_from_step_1>' 替换为第一步中记下的 tenant_id
-- 将 '<your_public_key_string>' 替换为你复制的公钥内容
UPDATE tenants
SET encrypt_public_key = '<your_public_key_string>'
WHERE id = '<the_tenant_id_from_step_1>';
Etapa 4: implantar o arquivo de chave privada
A etapa final é pegar o arquivo de chave privada gerado private.pem
colocar Dify
na estrutura de diretório esperada pelo aplicativo back-end.Dify
Ele se baseará nos seguintes dados do locatário ID
Carregue dinamicamente a chave privada correspondente.
comandante-em-chefe (militar) private.pem
O arquivo é movido ou copiado para o seguinte caminho:
dify/api/privkeys/{tenant_id}/private.pem
favor incluir {tenant_id}
Substitua-o pelo atual que você obteve na etapa 1 tenant_id
. Se privkeys
não existe em um diretório que começa com o seu tenant_id
você precisa criá-la manualmente.
Por motivos de segurança, é altamente recomendável definir os direitos de acesso ao arquivo de chave privada para garantir que somente aqueles que executam o Dify
Os usuários do serviço podem lê-lo:
chmod 600 dify/api/privkeys/{tenant_id}/private.pem
Após a conclusão de todas as etapas acima, o novo espaço de trabalho foi criado e configurado com sucesso.