콘텐츠로 이동

Launcher 추가 방법

Launcher는 실행 중인 워크스페이스 안에서 LabPod이 시작할 수 있는 앱 정의입니다. JupyterLab, code-server, TensorBoard, MLflow, Streamlit 같은 도구가 여기에 해당합니다.

관련된 workflow는 세 가지입니다.

  • 내 비공개 템플릿에 launcher 추가.
  • 관리자에게 전역 catalog에 재사용 가능한 launcher 추가 요청.
  • 실행 중인 워크스페이스에서 Extra apps로 일회성 앱 노출.

내가 소유한 템플릿에서 새 워크스페이스를 만들 때마다 해당 앱이 Apps 섹션에 보이게 하려면 이 방법을 사용합니다.

여러 launcher card가 표시된 워크스페이스 Apps 섹션

  1. 템플릿이 아직 없다면 Templates → My templates에서 먼저 만듭니다.
  2. Templates → My templates를 엽니다.
  3. 내 템플릿을 선택합니다.
  4. Ports 섹션에서 Import launcher를 클릭합니다.
  5. catalog에서 launcher를 선택합니다.
  6. 해당 앱이 템플릿의 기본 앱이어야 한다면 launcher 하나를 Primary로 표시합니다.
  7. Save를 클릭합니다.
  8. 이 템플릿으로 새 워크스페이스를 만듭니다.

Launcher를 import하면 catalog 정의가 템플릿으로 복사됩니다. 나중에 catalog가 바뀌어도 내 템플릿에는 자동으로 반영되지 않습니다.

Catalog에 아직 없는 앱이면 수동 launcher를 추가합니다.

  1. Templates → My templates를 엽니다.
  2. 내 템플릿을 선택합니다.
  3. Ports에서 Add port를 클릭합니다.
  4. Namestreamlit이나 gradio 같은 소문자 identifier로 설정합니다.
  5. Label에 표시 이름을 넣습니다.
  6. Container port를 앱의 일반 포트로 설정합니다. 예: Streamlit은 8501.
  7. 고급 launcher 필드를 엽니다.
  8. Command template, Probe command, Readiness path, Install hint를 채웁니다.
  9. 템플릿을 저장합니다.

Launcher command는 반드시 ${HOST_PORT}에 bind해야 합니다. LabPod이 runtime에 이 포트를 할당합니다.

Streamlit command 예:

Terminal window
streamlit run ${SCRIPT} --server.address=0.0.0.0 --server.port=${HOST_PORT} --server.baseUrlPath=${BASE_PATH_NO_SLASH} --server.headless=true

Option schema 예:

{"fields":[{"name":"SCRIPT","type":"file","label":"App script","default":"/work/app.py","required":true}]}

유용한 command token:

Token의미
${HOST_PORT}앱이 bind해야 하는 runtime port입니다. Launcher에는 필수입니다.
${BASE_PATH}trailing slash가 있는 proxy path입니다.
${BASE_PATH_NO_SLASH}trailing slash가 없는 proxy path입니다.
${AUTH_TOKEN}지원되는 credential-aware 앱용 launcher별 token입니다.
${AUTH_TOKEN_SHA256}code-server password auth에 쓰는 SHA-256 형식입니다.
Option key${SCRIPT}${LOGDIR}처럼 option schema에서 받은 값입니다.

Probe command는 컨테이너 안에서 LabPod이 확인하는 실행 파일입니다. 예: streamlit, jupyter, tensorboard. Probe가 없으면 launcher card에는 Start 버튼 대신 install hint가 표시됩니다.

템플릿 launcher는 이미지 안에 앱 실행 파일이 있어야 동작합니다. 비공개 템플릿이라면 템플릿 Dockerfile을 편집해 앱을 설치합니다.

예:

RUN pip install --no-cache-dir streamlit

그 다음 템플릿 이미지를 빌드하고 해당 템플릿으로 새 워크스페이스를 만듭니다. 기존 워크스페이스가 예전 이미지를 사용 중이면 다시 만들거나, 그 워크스페이스 안에 누락된 패키지를 설치한 뒤 Apps 섹션에서 Refresh를 클릭합니다.

관리자에게 재사용 launcher 추가 요청

섹션 제목: “관리자에게 재사용 launcher 추가 요청”

재사용 catalog는 root 관리자만 /admin/launchers에서 편집할 수 있습니다.

관리자는 launcher를 한 번 만들 때 다음 값을 설정합니다.

  • NameLabel.
  • Container port.
  • ${HOST_PORT}를 사용하는 Command template.
  • Probe command.
  • Readiness path.
  • Install hint.
  • 선택 사항인 JSON Option schema.
  • code-server처럼 base path를 지원하지 않는 앱을 위한 선택 사항 Proxy strips prefix.

저장 후 사용자와 관리자는 이 launcher를 템플릿으로 import할 수 있습니다. 기존 템플릿은 자동으로 변경되지 않습니다.

실행 중인 워크스페이스에서 일회성 앱 노출

섹션 제목: “실행 중인 워크스페이스에서 일회성 앱 노출”

재사용 가능한 템플릿 launcher가 필요하지 않다면 Extra apps를 사용합니다.

Apps와 추가 워크스페이스 컨트롤이 있는 워크스페이스 상세 페이지

  1. 워크스페이스를 시작합니다.
  2. 워크스페이스 상세 페이지를 엽니다.
  3. Extra apps에서 Add app을 클릭합니다.
  4. preset을 고르거나 custom name을 입력합니다.
  5. LabPod Terminal 안에서 앱을 시작하고 할당된 포트에 bind합니다.
  6. Extra apps 카드의 Open을 클릭합니다.

예:

Terminal window
streamlit run app.py --server.port $LABPOD_USER_PORT_1

Extra apps는 워크스페이스별 설정입니다. 실험에는 Extra apps가 좋고 새 워크스페이스마다 반복해서 쓰는 도구는 템플릿 launcher가 더 적합합니다.