diff --git a/services/n8n.md b/services/n8n.md new file mode 100644 index 0000000..6cbdebf --- /dev/null +++ b/services/n8n.md @@ -0,0 +1,67 @@ +--- +title: n8n +updated: 2026-04-16 +tags: [services, n8n, oidc, gitea] +--- + +## 개요 + +워크플로 자동화. K3s `n8n` 네임스페이스. + +- URL: https://n8n.inouter.com +- 이미지: `n8nio/n8n:latest` +- DB: `pgpool.db.svc.cluster.local:9999` (Patroni 직결, [[../infra/postgresql-ha|postgresql-ha]] 참조) + +## Gitea OIDC SSO + +[n8n-oidc](https://github.com/cweagans/n8n-oidc) 사용 — n8n external hooks 방식, enterprise 불필요. + +### 구성 요소 + +| 리소스 | 내용 | +|---|---| +| ConfigMap `n8n-oidc-hooks` | `hooks.js` (n8n-oidc 프로젝트 원본) | +| Secret `n8n-oidc-secret` | `OIDC_CLIENT_ID`, `OIDC_CLIENT_SECRET` | +| ConfigMap `n8n-app-config` | OIDC 관련 env vars | + +### 환경변수 (`n8n-app-config`) + +``` +EXTERNAL_HOOK_FILES=/opt/n8n-oidc/hooks.js +OIDC_ISSUER_URL=https://gitea.inouter.com +OIDC_REDIRECT_URI=https://n8n.inouter.com/auth/oidc/callback +OIDC_SCOPES=openid profile email +N8N_ADDITIONAL_NON_UI_ROUTES=auth +EXTERNAL_FRONTEND_HOOKS_URLS=/assets/oidc-frontend-hook.js +``` + +### Gitea OAuth2 앱 + +- name: `n8n` +- redirect URI: `https://n8n.inouter.com/auth/oidc/callback` +- confidential client: yes +- Gitea admin → Settings → Applications 에서 관리 + +### 동작 + +1. n8n 로그인 페이지에 "Sign in with SSO" 버튼 표시 +2. 클릭 → Gitea authorize → 콜백 → JIT user provisioning (첫 유저 = owner) +3. SSO 우회: `https://n8n.inouter.com/signin?showLogin=true` 로 로컬 로그인 + +### 볼륨 마운트 + +```yaml +volumes: + - name: oidc-hooks + configMap: + name: n8n-oidc-hooks +volumeMounts: + - name: oidc-hooks + mountPath: /opt/n8n-oidc/hooks.js + subPath: hooks.js + readOnly: true +``` + +## 관련 + +- [[../infra/postgresql-ha]] — pgpool-II 접속 경로