n8n Embed 설정
Embed를 사용하려면 embed 라이선스가 필요합니다. 사용자 관리, n8n의 내장 인증 기능을 설정하여 n8n을 보호할 수 있습니다. n8n은 LDAP 및 SAML을 지원합니다. 사용자에게 OAuth 로그인을 제공하려면 전역적으로 자격증명을 덮어쓸 수 있습니다.
Embed를 사용하려면 embed 라이선스가 필요합니다. Embed 사용 시기, 비용 및 라이선스 절차에 대한 자세한 내용은 n8n 웹사이트의 Embed를 참조하세요.
인증#
사용자 관리, n8n의 내장 인증 기능을 설정하여 n8n을 보호할 수 있습니다.
자격증명 덮어쓰기#
사용자에게 OAuth 로그인을 제공하려면 전역적으로 자격증명을 덮어쓸 수 있습니다. 이 자격증명 데이터는 사용자에게 표시되지 않지만 백엔드에서 자동으로 사용됩니다.
편집기 UI에서 n8n은 덮어쓴 모든 필드를 기본적으로 숨깁니다. 이는 사용자가 자격증명의 "연결" 버튼을 눌러 OAuth를 사용하여 인증할 수 있음을 의미합니다.
n8n은 자격증명 덮어쓰기를 적용하는 두 가지 방법을 제공합니다: 환경 변수 사용 및 REST API 사용.
환경 변수 사용#
CREDENTIALS_OVERWRITE_DATA를 { CREDENTIAL_NAME: { PARAMETER: VALUE }}로 설정하여 환경 변수를 사용하여 자격증명 덮어쓰기를 설정할 수 있습니다.
가능하긴 하지만 권장하지 않습니다. 환경 변수는 n8n에서 보호되지 않으므로 데이터가 사용자에게 유출될 수 있습니다.
REST API 사용#
권장 방법은 사용자 정의 REST 엔드포인트를 사용하여 데이터를 로드하는 것입니다. CREDENTIALS_OVERWRITE_ENDPOINT를 이 엔드포인트를 사용할 수 있게 할 경로로 설정합니다. CREDENTIALS_OVERWRITE_ENDPOINT_AUTH_TOKEN을 설정하여 엔드포인트 접근에 토큰을 요구할 수 있습니다. 이 토큰이 구성되면 Authorization 헤더에 Bearer 토큰으로 포함된 경우에만 엔드포인트에 접근할 수 있습니다.
보안상의 이유로 엔드포인트는 CREDENTIALS_OVERWRITE_ENDPOINT_AUTH_TOKEN이 설정되지 않는 한 한 번만 호출할 수 있습니다.
예를 들어:
-
n8n이 실행되는 환경의 환경 변수를 설정하여 엔드포인트를 활성화합니다:
export CREDENTIALS_OVERWRITE_ENDPOINT=send-credentials -
그런 다음 덮어쓸 자격증명이 포함된 JSON 파일이 필요합니다. 예를 들어, Asana 및 GitHub의 자격증명을 덮어쓰기 위한
oauth-credentials.json파일은 다음과 같습니다:{ "asanaOAuth2Api": { "clientId": "<id>", "clientSecret": "<secret>" }, "githubOAuth2Api": { "clientId": "<id>", "clientSecret": "<secret>" } } -
그런 다음 curl을 사용하여 인스턴스에 적용합니다:
curl -H "Content-Type: application/json" --data @oauth-credentials.json http://localhost:5678/send-credentials
자격증명이 다른 자격증명을 기반으로 하는 경우가 있습니다. 예를 들어, googleSheetsOAuth2Api는 googleOAuth2Api를 확장합니다.
이 경우 모든 하위 자격증명(googleSheetsOAuth2Api)이 사용할 수 있도록 부모 자격증명(googleOAuth2Api)에 파라미터를 설정할 수 있습니다.
CREDENTIALS_OVERWRITE_ENDPOINT_AUTH_TOKEN이 secure-token으로 설정된 경우, curl 명령은 다음과 같습니다:
```sh
curl -H "Content-Type: application/json" -H "Authorization: Bearer secure-token" --data @oauth-credentials.json http://localhost:5678/send-credentials
```
영속성#
데이터베이스에 자격증명 덮어쓰기를 저장하고 멀티 인스턴스/큐 모드에서 모든 워커에 자동으로 전파하려면 다음을 활성화합니다:
export CREDENTIALS_OVERWRITE_PERSISTENCE=true
활성화되면 n8n은 암호화된 덮어쓰기를 settings 테이블에 저장하고 워커가 최신 값을 다시 로드하도록 reload-overwrite-credentials 이벤트를 브로드캐스트합니다. 비활성화되면 덮어쓰기는 로드한 프로세스의 메모리에 남아 있으며 워커에 전파되거나 재시작 후에도 보존되지 않습니다.
환경 변수#
n8n에는 설정할 수 있는 많은 환경 변수가 있습니다. 다음은 호스팅 솔루션에 가장 관련성이 높은 환경 변수입니다:
| 변수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
EXECUTIONS_TIMEOUT |
Number | -1 |
n8n이 실행을 중지하는 모든 워크플로에 대한 기본 타임아웃(초)을 설정합니다. 사용자는 EXECUTIONS_TIMEOUT_MAX에 설정된 기간까지 개별 워크플로에 대해 이를 재정의할 수 있습니다. 비활성화하려면 EXECUTIONS_TIMEOUT을 -1로 설정합니다. |
EXECUTIONS_DATA_PRUNE |
Boolean | true |
롤링 방식으로 과거 실행 데이터를 삭제할지 여부. |
EXECUTIONS_DATA_MAX_AGE |
Number | 336 |
삭제되기 전의 실행 기간(시간). |
EXECUTIONS_DATA_PRUNE_MAX_COUNT |
Number | 10000 |
데이터베이스에 유지할 최대 실행 수. 0 = 제한 없음 |
NODES_EXCLUDE |
Array of strings | [\"n8n-nodes-base.executeCommand\", \"n8n-nodes-base.localFileTrigger\"] |
로드하지 않을 노드를 지정합니다. 예를 들어, 사용자를 신뢰할 수 없는 경우 보안 위험이 될 수 있는 노드를 차단합니다: NODES_EXCLUDE: "[\"n8n-nodes-base.executeCommand\", \"n8n-nodes-base.readWriteFile\"]". 모든 노드를 활성화하려면 NODES_EXCLUDE: "[]"를 지정합니다. |
NODES_INCLUDE |
Array of strings | - | 로드할 노드를 지정합니다. |
N8N_TEMPLATES_ENABLED |
Boolean | true |
워크플로 템플릿을 활성화(true) 또는 비활성화(false)합니다. |
N8N_TEMPLATES_HOST |
String | https://api.n8n.io |
자체 워크플로 템플릿 라이브러리를 만드는 경우 변경합니다. 자체 워크플로 템플릿 라이브러리를 사용하려면 API가 n8n과 동일한 엔드포인트 및 응답 구조를 제공해야 합니다. 자세한 내용은 워크플로 템플릿을 참조하세요. |
백엔드 훅#
특정 작업이 실행될 때마다 n8n이 실행하는 외부 훅을 정의할 수 있습니다. 예를 들어, 데이터 로깅, 데이터 변경 또는 오류를 발생시켜 작업을 금지하는 데 사용할 수 있습니다.
사용 가능한 훅#
| 훅 | 인수 | 설명 |
|---|---|---|
credentials.create |
[credentialData: ICredentialsDb] |
새 자격증명이 생성되기 전에 호출됩니다. 자격증명 수를 제한하는 데 사용합니다. |
credentials.delete |
[id: credentialId] |
자격증명이 삭제되기 전에 호출됩니다. |
credentials.update |
[credentialData: ICredentialsDb] |
기존 자격증명이 저장되기 전에 호출됩니다. |
frontend.settings |
[frontendSettings: IN8nUISettings] |
n8n 시작 시 호출됩니다. 예를 들어, 표시된 OAuth URL과 같은 프론트엔드 데이터를 덮어쓰는 데 사용합니다. |
n8n.ready |
[app: App] |
n8n이 준비되면 호출됩니다. 예를 들어, 사용자 정의 API 엔드포인트를 등록하는 데 사용합니다. |
n8n.stop |
n8n 프로세스가 중지될 때 호출됩니다. 일부 프로세스 데이터를 저장하는 데 사용합니다. | |
oauth1.authenticate |
[oAuthOptions: clientOAuth1.Options, oauthRequestData: {oauth_callback: string}] |
OAuth1 인증 전에 호출됩니다. OAuth 콜백 URL을 덮어쓰는 데 사용합니다. |
oauth2.callback |
[oAuth2Parameters: {clientId: string, clientSecret: string | undefined, accessTokenUri: string, authorizationUri: string, redirectUri: string, scopes: string[]}] |
OAuth2 콜백에서 호출됩니다. OAuth 콜백 URL을 덮어쓰는 데 사용합니다. |
workflow.activate |
[workflowData: IWorkflowDb] |
워크플로가 활성화되기 전에 호출됩니다. 활성 워크플로 수를 제한하는 데 사용합니다. |
workflow.afterCreate |
[workflowId: string] |
워크플로가 생성된 후 호출됩니다. |
workflow.afterDelete |
[workflowId: string] |
워크플로가 삭제된 후 호출됩니다. |
workflow.afterUpdate |
[workflowData: IWorkflowBase] |
기존 워크플로가 저장된 후 호출됩니다. |
workflow.create |
[workflowData: IWorkflowBase] |
워크플로가 생성되기 전에 호출됩니다. 저장된 워크플로 수를 제한하는 데 사용합니다. |
workflow.delete |
[workflowId: string] |
워크플로가 삭제되기 전에 호출됩니다. |
workflow.postExecute |
[run: IRun, workflowData: IWorkflowBase] |
워크플로가 실행된 후 호출됩니다. |
workflow.preExecute |
[workflow: Workflow: mode: WorkflowExecuteMode] |
워크플로가 실행되기 전에 호출됩니다. 워크플로 실행 수를 카운트하거나 제한하는 데 사용합니다. |
workflow.update |
[workflowData: IWorkflowBase] |
기존 워크플로가 저장되기 전에 호출됩니다. |
workflow.afterArchive |
[workflowId: string] |
워크플로를 아카이브한 후 호출됩니다. |
workflow.afterUnarchive |
[workflowId: string] |
아카이브에서 워크플로를 복원한 후 호출됩니다. |
훅 등록#
훅 함수가 포함된 훅 파일을 등록하여 훅을 설정합니다.
훅을 등록하려면 환경 변수 EXTERNAL_HOOK_FILES를 설정합니다.
변수를 단일 파일로 설정할 수 있습니다:
EXTERNAL_HOOK_FILES=/data/hook.js
또는 콜론으로 구분된 여러 파일을 포함하도록 설정할 수 있습니다:
EXTERNAL_HOOK_FILES=/data/hook1.js:/data/hook2.js
백엔드 훅 파일#
훅 파일은 다음 형식을 가진 일반 JavaScript 파일입니다:
module.exports = {
"frontend": {
"settings": [
async function (settings) {
settings.oauthCallbackUrls.oauth1 = 'https://n8n.example.com/oauth1/callback';
settings.oauthCallbackUrls.oauth2 = 'https://n8n.example.com/oauth2/callback';
}
]
},
"workflow": {
"activate": [
async function (workflowData) {
const activeWorkflows = await this.dbCollections.Workflow.count({ active: true });
if (activeWorkflows > 1) {
throw new Error(
'Active workflow limit reached.'
);
}
}
]
}
}
백엔드 훅 함수#
훅 또는 훅 파일에는 여러 훅 함수가 포함될 수 있으며, 모든 함수는 차례로 실행됩니다.
훅 함수의 파라미터가 객체인 경우 해당 파라미터의 데이터를 변경하여 n8n의 동작을 변경할 수 있습니다.
this.dbCollections를 사용하여 모든 훅 함수에서 데이터베이스에 접근할 수도 있습니다(백엔드 훅 파일의 코드 샘플 참조).
프론트엔드 외부 훅#
백엔드 외부 훅처럼, 사용자가 특정 작업을 수행할 때마다 n8n에 의해 실행되는 외부 훅을 프론트엔드 코드에 정의할 수 있습니다. 예를 들어, 데이터를 로깅하고 변경하는 데 사용할 수 있습니다.
사용 가능한 훅#
| 훅 | 설명 |
|---|---|
credentialsEdit.credentialTypeChanged |
기존 자격증명 유형이 변경될 때 호출됩니다. |
credentials.create |
누군가 새 자격증명을 생성할 때 호출됩니다. |
credentialsList.dialogVisibleChanged |
|
dataDisplay.nodeTypeChanged |
|
dataDisplay.onDocumentationUrlClick |
누군가 도움말 문서 링크를 선택할 때 호출됩니다. |
execution.open |
기존 실행이 열릴 때 호출됩니다. |
executionsList.openDialog |
누군가 기존 워크플로 실행에서 실행을 선택할 때 호출됩니다. |
expressionEdit.itemSelected |
|
expressionEdit.dialogVisibleChanged |
|
nodeCreateList.filteredNodeTypesComputed |
|
nodeCreateList.nodeFilterChanged |
누군가 노드 패널 필터를 변경할 때 호출됩니다. |
nodeCreateList.selectedTypeChanged |
|
nodeCreateList.mounted |
|
nodeCreateList.destroyed |
|
nodeSettings.credentialSelected |
|
nodeSettings.valueChanged |
|
nodeView.createNodeActiveChanged |
|
nodeView.addNodeButton |
|
nodeView.createNodeActiveChanged |
|
nodeView.mount |
|
pushConnection.executionFinished |
|
showMessage.showError |
|
runData.displayModeChanged |
|
workflow.activeChange |
|
workflow.activeChangeCurrent |
|
workflow.afterUpdate |
누군가 기존 워크플로를 업데이트할 때 호출됩니다. |
workflow.open |
|
workflowRun.runError |
|
workflowRun.runWorkflow |
워크플로가 실행될 때 호출됩니다. |
workflowSettings.dialogVisibleChanged |
|
workflowSettings.saveSettings |
누군가 워크플로 설정을 저장할 때 호출됩니다. |
훅 등록#
페이지에 훅 스크립트를 로드하여 훅을 설정할 수 있습니다. 한 가지 방법은 프로젝트에 훅 파일을 만들고 editor-ui/public/index.html 파일에 스크립트 태그를 추가하는 것입니다:
<script src="frontend-hooks.js"></script>
프론트엔드 훅 파일#
프론트엔드 외부 훅 파일은 다음 형식을 가진 일반 JavaScript 파일입니다:
window.n8nExternalHooks = {
nodeView: {
mount: [
function (store, meta) {
// 무언가 수행
},
],
createNodeActiveChanged: [
function (store, meta) {
// 무언가 수행
},
function (store, meta) {
// 다른 작업 수행
},
],
addNodeButton: [
function (store, meta) {
// 무언가 수행
},
],
},
};
프론트엔드 훅 함수#
훅당 여러 훅 함수를 정의할 수 있습니다. 각 훅 함수는 다음 인수로 호출됩니다:
store: Vuex 스토어 객체. 스토어에서 데이터를 변경하거나 가져오는 데 사용할 수 있습니다.metadata: 훅에서 제공하는 데이터가 포함된 객체. 전달되는 내용을 보려면editor-ui패키지에서 훅을 검색하세요.
