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
DifyO sistema de arquivos do servidor back-end tem permissões de leitura e gravação. - acessível
Dify(usado em uma expressão nominal)PostgreSQLBanco de dados. - instalado no sistema
OpenSSLFerramentas 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_idque é 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.
tenantsum medidor (que mede algo)Espaço de trabalho: Define informações básicas sobre o espaço de trabalho.tenant_account_joinsum 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 é RSAe 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.





































