개요
|Fess|의 멀티테넌시 기능을 사용하면 단일 |Fess| 인스턴스에서 여러 테넌트(조직, 부서, 고객 등)를 분리하여 운영할 수 있습니다.
가상 호스트 기능을 사용하여 각 테넌트에 대해:
독립된 검색 UI
분리된 콘텐츠
커스터마이즈된 디자인
을 제공할 수 있습니다.
가상 호스트 기능
가상 호스트는 HTTP 요청의 호스트명에 따라 다른 검색 환경을 제공하는 기능입니다.
구조
가상 호스트 헤더 설정
가상 호스트 기능을 활성화하려면 virtual.host.headers 속성을 설정합니다. 이 속성은 ``fess_config.properties``에서 정의합니다.
설정 형식
각 줄에 헤더명:헤더값=가상호스트키 형식으로 지정합니다:
# fess_config.properties
virtual.host.headers=Host:tenant1.example.com=tenant1\n\
Host:tenant2.example.com=tenant2
여러 가상 호스트를 설정하는 경우 줄바꿈으로 구분합니다.
가상 호스트 키 제약
가상 호스트 키에는 다음 제약이 있습니다:
사용 가능한 문자는 영숫자와 밑줄(
a-zA-Z0-9_)뿐입니다. 그 외 문자는 자동으로 제거됩니다.다음 키 이름은 예약어이므로 사용할 수 없습니다:
admin,common,error,login,profile
관리 화면에서 설정
크롤 설정
웹 크롤 설정에서 가상 호스트를 지정하여 콘텐츠를 분리할 수 있습니다:
관리 화면에 로그인
“크롤러” -> “웹”에서 크롤 설정 생성
“가상 호스트” 필드에서 ``virtual.host.headers``에서 정의한 가상 호스트 키를 선택
이 설정으로 크롤된 콘텐츠는 지정한 가상 호스트에서만 검색 가능
접근 제어
가상 호스트와 역할의 조합
가상 호스트와 역할 기반 접근 제어를 조합하여 더 세밀한 접근 제어가 가능합니다:
크롤 설정에서 가상 호스트와 퍼미션을 함께 설정합니다:
# 크롤 설정의 가상 호스트
tenant1
# 크롤 설정의 퍼미션
{role}tenant1_user
역할 기반 검색
자세한 내용은 :doc:`security-role`를 참조하세요.
UI 커스터마이즈
각 가상 호스트에 대해 UI를 커스터마이즈할 수 있습니다.
테마 적용
가상 호스트별로 다른 테마 적용:
“시스템” -> “디자인”에서 테마 설정
가상 호스트 설정에서 테마 지정
커스텀 CSS
가상 호스트별로 커스텀 CSS를 적용하려면 관리 화면의 “시스템” -> “디자인”에서 CSS 파일을 편집합니다. 가상 호스트 키에 해당하는 뷰 디렉토리에 커스텀 템플릿을 배치할 수도 있습니다.
라벨 설정
가상 호스트별로 표시할 라벨 제한:
라벨 유형 설정에서 가상 호스트 지정
지정한 가상 호스트에서만 라벨이 표시됨
API 인증
가상 호스트별로 API 접근 제어:
액세스 토큰
가상 호스트에 연결된 액세스 토큰 발급:
“시스템” -> “액세스 토큰”에서 토큰 생성
토큰에 가상 호스트 연결
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;
}
}
데이터 분리
완전한 데이터 분리가 필요한 경우 다음 접근 방식을 검토:
인덱스 레벨 분리
각 테넌트에 별도의 Fess 인스턴스와 인덱스를 사용:
# 테넌트1용 Fess 인스턴스 (fess_config.properties)
index.document.search.index=fess_tenant1.search
# 테넌트2용 Fess 인스턴스 (fess_config.properties)
index.document.search.index=fess_tenant2.search
참고
``index.document.search.index``는 인스턴스당 하나의 값만 설정할 수 있습니다. 인덱스 레벨의 완전한 분리를 위해서는 테넌트별로 별도의 Fess 인스턴스를 실행하거나 커스텀 구현이 필요합니다. 일반적인 멀티테넌시에서는 가상 호스트 기능에 의한 논리적 분리로 충분합니다.
모범 사례
명확한 명명 규칙: 가상 호스트와 역할에 일관된 명명 규칙 사용
테스트: 각 테넌트에서의 동작을 충분히 테스트
모니터링: 테넌트별 리소스 사용량 모니터링
문서화: 테넌트 설정 문서화
제한 사항
관리 화면은 모든 테넌트에서 공유됩니다
시스템 설정은 모든 테넌트에 영향을 미칩니다
일부 기능은 가상 호스트에 대응하지 않을 수 있습니다
참고 정보
역할 기반 검색 설정 - 역할 기반 접근 제어
가상 호스트 - 가상 호스트 설정 상세
페이지 디자인 - 디자인 커스터마이즈