멀티테넌시 설정

개요

|Fess|의 멀티테넌시 기능을 사용하면 단일 |Fess| 인스턴스에서 여러 테넌트(조직, 부서, 고객 등)를 분리하여 운영할 수 있습니다.

가상 호스트 기능을 사용하여 각 테넌트에 대해:

  • 독립된 검색 UI

  • 분리된 콘텐츠

  • 커스터마이즈된 디자인

을 제공할 수 있습니다.

가상 호스트 기능

가상 호스트는 HTTP 요청의 호스트명에 따라 다른 검색 환경을 제공하는 기능입니다.

구조

  1. 사용자가 ``tenant1.example.com``에 접속

  2. |Fess|가 호스트명 식별

  3. 해당하는 가상 호스트 설정 적용

  4. 테넌트 고유의 콘텐츠와 UI 표시

가상 호스트 설정

관리 화면에서 설정

  1. 관리 화면에 로그인

  2. “크롤러” -> “가상 호스트”로 이동

  3. “새로 만들기” 클릭

  4. 다음을 설정:

    • 호스트명: tenant1.example.com

    • 경로: ``/tenant1``(선택사항)

크롤 설정과의 연계

웹 크롤 설정에서 가상 호스트를 지정하여 콘텐츠를 분리할 수 있습니다:

  1. “크롤러” -> “웹”에서 크롤 설정 생성

  2. “가상 호스트” 필드에서 대상 가상 호스트 선택

  3. 이 설정으로 크롤된 콘텐츠는 지정한 가상 호스트에서만 검색 가능

접근 제어

가상 호스트와 역할의 조합

가상 호스트와 역할 기반 접근 제어를 조합하여 더 세밀한 접근 제어가 가능합니다:

# 설정 예
virtual.host=tenant1.example.com
permissions=role_tenant1_user

역할 기반 검색

자세한 내용은 :doc:`security-role`를 참조하세요.

UI 커스터마이즈

각 가상 호스트에 대해 UI를 커스터마이즈할 수 있습니다.

테마 적용

가상 호스트별로 다른 테마 적용:

  1. “시스템” -> “디자인”에서 테마 설정

  2. 가상 호스트 설정에서 테마 지정

커스텀 CSS

가상 호스트별로 커스텀 CSS 적용:

# 가상 호스트 고유 CSS 파일
/webapp/WEB-INF/view/tenant1/css/custom.css

라벨 설정

가상 호스트별로 표시할 라벨 제한:

  1. 라벨 유형 설정에서 가상 호스트 지정

  2. 지정한 가상 호스트에서만 라벨이 표시됨

API 인증

가상 호스트별로 API 접근 제어:

액세스 토큰

가상 호스트에 연결된 액세스 토큰 발급:

  1. “시스템” -> “액세스 토큰”에서 토큰 생성

  2. 토큰에 가상 호스트 연결

API 요청

curl -H "Authorization: Bearer TENANT_TOKEN" \
     "https://tenant1.example.com/api/v1/search?q=keyword"

DNS 설정

멀티테넌시를 구현하기 위한 DNS 설정 예:

동일 서버로의 서브도메인

# DNS 설정
tenant1.example.com    A    192.168.1.100
tenant2.example.com    A    192.168.1.100

# 또는 와일드카드
*.example.com          A    192.168.1.100

리버스 프록시 설정

Nginx를 사용한 리버스 프록시 설정 예:

server {
    server_name tenant1.example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    server_name tenant2.example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

데이터 분리

완전한 데이터 분리가 필요한 경우 다음 접근 방식을 검토:

인덱스 레벨 분리

각 테넌트에 별도 인덱스 사용:

# 테넌트1용 인덱스
index.document.search.index=fess_tenant1.search

# 테넌트2용 인덱스
index.document.search.index=fess_tenant2.search

참고

인덱스 레벨 분리에는 커스텀 구현이 필요할 수 있습니다.

모범 사례

  1. 명확한 명명 규칙: 가상 호스트와 역할에 일관된 명명 규칙 사용

  2. 테스트: 각 테넌트에서의 동작을 충분히 테스트

  3. 모니터링: 테넌트별 리소스 사용량 모니터링

  4. 문서화: 테넌트 설정 문서화

제한 사항

  • 관리 화면은 모든 테넌트에서 공유됩니다

  • 시스템 설정은 모든 테넌트에 영향을 미칩니다

  • 일부 기능은 가상 호스트에 대응하지 않을 수 있습니다

참고 정보