Self-hosted (On-premises) 가이드

안녕하세요 셀렉트 팀입니다.

셀렉트 클라우드를 이용하고 싶지만 여러가지 보안과 데이터 이슈로 쓰기 어려운 팀들이 많은 문의를 주셨고 이를 위해 설치형 제공을 시작합니다.

데이터베이스 외부 연동으로 인한 복잡한 도입 절차와 방화벽 어려움 없이 셀렉트 어드민을 더 빠르게 테스트하고 문제해결에 이용할 수 있도록 노력하겠습니다. 참고로 클라우드 서비스에서도 여러가지 보안 접속 방법을 제공중입니다.

이 문서에는 셀프호스팅, 셀프호스트, 온프레미스를 '설치형'으로 표기합니다.
로컬에서 빠른 테스트를 원하시면 CLI를 확인해주세요. 자세히보기

목차

  • 이용 신청 (라이센스 키 발급)
  • 프라이빗 레지스트리 설정 (소스코드 다운로드)
  • 환경 변수
  • 서버 실행
  • 기본 테스트
  • 참고
  • 구축 사례

이용 신청

셀렉트 클라우드에 로그인하고 새로운 팀을 만들어주세요. 해당 팀에서 문의, 플랜 변경, 결제, 영수증, 라이센스 키 발급이 가능합니다.

팀 메뉴 접속

서비스 내 오른쪽 아래에 채팅 문의를 통해 사용 신청을 해주세요.

  • Github 아이디
  • 회사 이메일
셀렉트 라이센스 키 발급

Private Registry 설정

Github에 저장된 설치형 소스코드를 공유해드립니다.
셀렉트팀은 공식적으로 hub.docker.com, npmjs.com 에 배포/운영하지 않습니다. 다른 패키지를 설치하지 않도록 주의해주세요.

  • npm package
  • docker container image

설치 방법 (선택1)

도커 이미지로 설치를 원하는 경우, Github Packages를 통해 docker pull 하기 위해 로그인이 필요합니다.

export CR_PAT=ghp_XXXXXXXXXXXXXXXXXXXX

echo $CR_PAT | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin

Github에서 발급한 Personal Access Token이 필요합니다. 참고

설치 방법 (선택2)

CLI(npm)으로 설치를 원하는 경우, Github Packages를 통해 npm install @selectfromuser/select2 하기 위해서 로그인이 필요합니다.

npm login --scope=@selectfromusercom --auth-type=legacy --registry=https://npm.pkg.github.com
npm notice Log in on https://npm.pkg.github.com/
Username: YOUR_GITHUB_USERNAME
Password:
Logged in to scope @selectfromusercom on https://npm.pkg.github.com/.

Github에서 발급한 Personal Access Token이 필요합니다. 참고


환경변수

셀렉트 서버에 필요한 환경변수입니다.

본인의 환경에 맞는 방법으로 -e, docker-compose, kubernetes recipe에 표기합니다. 이 예제에서는 docker-compose를 활용합니다.

VITE_API_URL=http://localhost:9500
VITE_WS_URL=http://localhost:9600
VITE_APP_HOSTNAME=localhost
VITE_APP_HOST=localhost:9500
WEB_BASE_URL=http://localhost:9500

# 라이센스에 따라 일부기능이 제한됩니다.
LICENSE_KEY=ONPREM_***********

# 에러로그 리포팅 여부 (초기도입/문의시 개발환경에서는 켜고, 운영에서는 끄는것을 권장)
# DISABLE_UI_ERROR_REPORT=false
# DISABLE_API_ERROR_REPORT=false

# 로그 표시 여부
DEBUG=select*
# 민감정보 암호화 키
SECRET_AES_KEY=***********
# 세션 암호화 키
SECRET_ACCESS_TOKEN=***********

# 구글 로그인을 하기위해 필요
GOOGLE_CLIENT_ID=497119444288-1s63t0d78nlefabuah8ksq52r6a4no31.apps.googleusercontent.com
GOOGLE_REDIRECT_URI=http://localhost:9500/api/connect/google/callback
GOOGLE_CLIENT_SECRET=***********

# 구글시트 내보내기, 다운로드를 하기위해 필요
GOOGLE_SHEET_CLIENT_ID=497119444288-t0ojqprjhelfhbasq88q6jfit0ot7cb1.apps.googleusercontent.com
GOOGLE_SHEET_REDIRECT_URI=http://localhost:9500/api/connect/google/spreadsheet/callback
GOOGLE_SHEET_CLIENT_SECRET=***********

# 셀렉트 서버가 사용하는 디비
MYSQL_MASTER_HOST=***********.ap-northeast-2.rds.amazonaws.com
MYSQL_MASTER_PORT=3306
MYSQL_MASTER_USER=username
MYSQL_MASTER_PASSWORD=***********
MYSQL_MASTER_DATABASE=selectadmin_onprem

# docker-compose redis를 이용하지 않으면 개별 호스트 입력필요
# REDIS_MASTER_HOST=REDIS_HOST
REDIS_MASTER_PORT=6379
REDIS_MASTER_DB=0

# 이메일OTP, 초대알림, 쿼리공유알림을 위해 필요
SENDGRID_API_KEY=***********
SENDGRID_FROM=notify@selectfromuser.com


# 서비스내에 리소스 정보를 입력하지 않고 전달하고 싶은 경우
# ENV_MYSQL_HOST=aaaa.ap-northeast-2.rds.amazonaws.com
# ENV_MYSQL_DATABASE=dbname
# ENV_MYSQL_USER=username
# ENV_MYSQL_PASSWORD=password

.env (파일)

서버 실행

  • 데이터베이스 마이그레이션 스크립트는 자동으로 실행됩니다. 최신인경우 No migrations are pending 표시됩니다.
  • 서비스 Redis가 정상 연결된 경우 config[redis] connected 표시됩니다.
  • 서비스 MySQL이 정상 연결된 경우 config[db] connected 표시됩니다.
  • API 서비스가 정상 실행된 경우 api connected 표시됩니다.
  • 웹소켓 서비스가 정상 연결된 경우 ws connected 표시됩니다.

Docker Container 이용 (선택1)

docker-compose.yml 파일을 설정합니다.

version: "3.8"
services:
  app:
    image: ghcr.io/selectfromusercom/select2:latest
    environment:
      - VITE_API_URL
      - VITE_WS_URL
      - VITE_APP_HOSTNAME
      - VITE_APP_HOST
      - LICENSE_KEY
      - DISABLE_UI_ERROR_REPORT
      - DISABLE_API_ERROR_REPORT
      - DEBUG
      - SECRET_AES_KEY
      - SECRET_ACCESS_TOKEN
      - GOOGLE_CLIENT_ID
      - GOOGLE_REDIRECT_URI
      - GOOGLE_CLIENT_SECRET
      - GOOGLE_SHEET_CLIENT_ID
      - GOOGLE_SHEET_REDIRECT_URI
      - GOOGLE_SHEET_CLIENT_SECRET
      - WEB_BASE_URL
      - MYSQL_MASTER_HOST
      - MYSQL_MASTER_PORT
      - MYSQL_MASTER_USER
      - MYSQL_MASTER_PASSWORD
      - MYSQL_MASTER_DATABASE
      - REDIS_MASTER_HOST=redis
      - REDIS_MASTER_PORT
      - REDIS_MASTER_DB
      - SENDGRID_API_KEY
      - SENDGRID_FROM
      - PORT=9500

      # - ENV_MYSQL_HOST
      # - ENV_MYSQL_DATABASE
      # - ENV_MYSQL_USER
      # - ENV_MYSQL_PASSWORD
    ports:
      - "9500:9500"
    links:
      - redis
  
  websocket:
    image: ghcr.io/selectfromusercom/select2-ws:latest
    environment:
      - VITE_API_URL
      - VITE_WS_URL
      - VITE_APP_HOSTNAME
      - VITE_APP_HOST
      - LICENSE_KEY
      - DISABLE_UI_ERROR_REPORT
      - DISABLE_API_ERROR_REPORT
      - DEBUG
      - SECRET_AES_KEY
      - SECRET_ACCESS_TOKEN
      - GOOGLE_CLIENT_ID
      - GOOGLE_REDIRECT_URI
      - GOOGLE_CLIENT_SECRET
      - GOOGLE_SHEET_CLIENT_ID
      - GOOGLE_SHEET_REDIRECT_URI
      - GOOGLE_SHEET_CLIENT_SECRET
      - WEB_BASE_URL
      - MYSQL_MASTER_HOST
      - MYSQL_MASTER_PORT
      - MYSQL_MASTER_USER
      - MYSQL_MASTER_PASSWORD
      - MYSQL_MASTER_DATABASE
      - REDIS_MASTER_HOST=redis
      - REDIS_MASTER_PORT
      - REDIS_MASTER_DB
      - SENDGRID_API_KEY
      - SENDGRID_FROM
      - PORT=9600
    ports:
      - "9600:9600"
    links:
      - redis  

  redis:
    image: redis

docker-compose.yml

docker-compose up 을 입력합니다.

실행 결과물

정상적으로 실행되었습니다.

CLI, NPM 이용 (선택2)

npm install @selectfromuser/select2

npx slt API/APP 서버를 실행합니다.

npx slt ws 웹소켓 서버를 실행합니다.

.env 에서 환경변수를 가져옵니다.

정상적으로 실행되었습니다.

기본 테스트

이제 주소로 접속하면 화면이 뜹니다. 정상작동 여부를 확인합니다.

결제 및 일부 기능은 클라우드에서만 실행 가능합니다.
초대 알림 메일을 보내려면 sendgrid key 설정이 필요합니다.
로컬 주소를 입력하거나, ENV 값을 불러올 수 있습니다.
YAML로 입력 가능합니다.
로컬, 사설망 접근시 UserResourcePolicy 테이블에 private_cidr 추가 필요합니다.
[수정페이지 생성] 클릭
콘솔로그 이상시 websocket 서버 확인필요
어드민 사용자 페이지 접속
어드민 CNAME URL 로그인 (커스텀 도메인)
어드민 CNAME URL 페이지 (커스텀 도메인)
구글시트 다운로드 확인
모니터링 쿼리 통계 확인
정책 확인
IP 정책 확인

참고

  • Troubleshooting 추가 예정

구축사례

  • Case Studies 추가 예정

감사합니다.

셀렉트팀 드림