Launcher 추가 방법
Launcher는 실행 중인 워크스페이스 안에서 LabPod이 시작할 수 있는 앱 정의입니다. JupyterLab, code-server, TensorBoard, MLflow, Streamlit 같은 도구가 여기에 해당합니다.
관련된 workflow는 세 가지입니다.
- 내 비공개 워크스페이스 템플릿에 launcher 추가.
- 관리자에게 전역 catalog에 재사용 가능한 launcher 추가 요청.
- 실행 중인 워크스페이스에서 Extra apps로 일회성 앱 노출.
내 워크스페이스 템플릿에 launcher 추가
섹션 제목: “내 워크스페이스 템플릿에 launcher 추가”내가 소유한 워크스페이스 템플릿에서 새 워크스페이스를 만들 때마다 해당 앱이 Manage workspace → App controls 아래에 보이게 하려면 이 방법을 사용합니다.

- 워크스페이스 템플릿이 아직 없다면 Advanced tools 메뉴의 Workspace templates → My workspace templates에서 먼저 만듭니다.
- Advanced tools 메뉴의 Workspace templates → My workspace templates를 엽니다.
- 내 워크스페이스 템플릿을 선택합니다.
- Ports 섹션에서 Import launcher를 클릭합니다.
- catalog에서 launcher를 선택합니다.
- 해당 앱이 워크스페이스 템플릿의 기본 앱이어야 한다면 launcher 하나를 Primary로 표시합니다.
- Save를 클릭합니다.
- 이 워크스페이스 템플릿으로 새 워크스페이스를 만듭니다.
Launcher를 import하면 catalog 정의가 워크스페이스 템플릿으로 복사됩니다. 나중에 catalog가 바뀌어도 내 워크스페이스 템플릿에는 자동으로 반영되지 않습니다.
수동 launcher 추가
섹션 제목: “수동 launcher 추가”Catalog에 아직 없는 앱이면 수동 launcher를 추가합니다.
- Advanced tools 메뉴의 Workspace templates → My workspace templates를 엽니다.
- 내 워크스페이스 템플릿을 선택합니다.
- Ports에서 Add port를 클릭합니다.
- Name을
streamlit이나gradio같은 소문자 identifier로 설정합니다. - Label에 표시 이름을 넣습니다.
- Container port를 앱의 일반 포트로 설정합니다. 예: Streamlit은
8501. - 고급 launcher 필드를 엽니다.
- Command template, Probe command, Readiness path, Install hint를 채웁니다.
- 워크스페이스 템플릿을 저장합니다.
Launcher command는 반드시 ${HOST_PORT}에 bind해야 합니다. LabPod이 runtime에 이 포트를
할당합니다.
Streamlit command 예:
streamlit run ${SCRIPT} --server.address=0.0.0.0 --server.port=${HOST_PORT} --server.baseUrlPath=${BASE_PATH_NO_SLASH} --server.headless=trueOption 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에는 Launch 버튼 대신 install hint가
표시됩니다.
기본 제공 MATLAB 워크스페이스 템플릿은 ${AUTH_TOKEN}으로 앱 자체 인증을 보호하는 예입니다. 이 워크스페이스 템플릿의
command template은 matlab-proxy 자체의 MWI_AUTH_TOKEN=${AUTH_TOKEN}을 설정하고
MWI_ENABLE_TOKEN_AUTH=True를 유지합니다. 그래서 LabPod 세션만으로 인증을 대신하지 않고
matlab-proxy의 공급사 인증을 LabPod 프록시 뒤에서 계속 켜 둡니다.
이미지에 launcher 포함
섹션 제목: “이미지에 launcher 포함”워크스페이스 템플릿 launcher는 이미지 안에 앱 실행 파일이 있어야 동작합니다. 비공개 워크스페이스 템플릿이라면 워크스페이스 템플릿 Dockerfile을 편집해 앱을 설치합니다.
예:
RUN pip install --no-cache-dir streamlit그 다음 워크스페이스 템플릿 이미지를 빌드하고 해당 워크스페이스 템플릿으로 새 워크스페이스를 만듭니다. 기존 워크스페이스가 예전 이미지를 사용 중이면 다시 만들거나, 그 워크스페이스 안에 누락된 패키지를 설치한 뒤 Manage workspace → App controls에서 Refresh를 클릭합니다.
관리자에게 재사용 launcher 추가 요청
섹션 제목: “관리자에게 재사용 launcher 추가 요청”재사용 catalog는 root 관리자만 admin의 Workspace templates 영역 안 Launchers 페이지
(/admin/launchers)에서 편집할 수 있습니다.
관리자는 launcher를 한 번 만들 때 다음 값을 설정합니다.
- Name과 Label.
- 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가 필요하지 않다면 Manage workspace 아래의 Extra apps를 사용합니다.

- 워크스페이스를 시작합니다.
- 워크스페이스 상세 페이지를 열고 Manage workspace를 펼칩니다.
- Extra apps에서 Add app을 클릭합니다.
- preset을 고르거나 custom name을 입력합니다.
- Terminal 안에서 앱을 시작하고 할당된 포트에 bind합니다.
- Extra apps 카드의 Open을 클릭합니다.
예:
streamlit run app.py --server.port $LABPOD_USER_PORT_1Extra apps는 워크스페이스별 설정입니다. 실험에는 Extra apps가 좋고, 새 워크스페이스마다 반복해서 쓰는 도구는 워크스페이스 템플릿 launcher가 더 적합합니다.