runlot
참조

CLI

runlot — Worker 와 Postgres 를 한 번에 배포하는 CLI. 모든 명령과 옵션의 목록이며, 문장은 runlot --help 가 찍는 것과 같습니다.

정본은 web/apps/cli/src/index.ts 의 usage 표 입니다. 이 페이지는 빌드할 때 그 코드에서 만들어집니다.

설치

npm i -g runlot
runlot login

runlot --help 는 아래 전부를, runlot <명령> --help 는 그 덩어리만 찍습니다.

로그인

  runlot login                     브라우저로 로그인해요 (GitHub 등)
  runlot login <이름>              로컬 개발용 로그인 (개발 서버에서만)
  runlot whoami                    현재 사용자

runlot login 은 브라우저를 열어 계정을 잇습니다. 자격은 ~/.runlot/credentials.json 에 컨트롤 플레인 주소별로 저장됩니다.

어디서나 통하는 것

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)

--org--projectrunlot.json 의 값보다 우선합니다. --api 는 붙을 컨트롤 플레인 주소입니다.

org — 조직

  runlot org create <slug> [name]  조직을 만들어요 (name 생략 시 slug 사용)
  runlot org list                  참여 중인 조직 목록
  runlot org members               조직 멤버 (--org 필요)
  runlot org add-member <p>:<s>    기존 사용자를 조직에 추가해요 (--role, --org 필요)
  runlot org set-role <uid> <역할> 멤버 역할을 바꿔요 (--org 필요)
  runlot org remove-member <uid>   멤버를 조직에서 제외해요 (--org 필요)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)
  --role <r>       admin | member | viewer (org add-member)

project — 프로젝트

  runlot project create <name>     프로젝트를 만들어요 (--org 필요)
  runlot project list              프로젝트 목록 (--org 필요)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)

add — 쓸 것을 켜기

  runlot add <pg|auth|storage>… [dir]  쓸 것을 켜요 (여러 개를 한 번에)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)

deploy — 배포

  runlot deploy [dir]              번들을 만들어 배포해요

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)

pg — 데이터베이스

  runlot pg create [dir]           데이터베이스를 만들고 접속 정보를 보여 줘요
  runlot pg bind [dir]             runlot.json 에 데이터베이스 사용을 기록해요
  runlot pg execute [dir]          SQL 을 실행해요 (-c <sql> 또는 -f <파일>)
  runlot pg migrate [dir]          migrations/NNNN_*.sql 을 적용해요
  runlot pg shell [dir] [-- ...]   psql 로 접속해요 (-- 뒤는 psql 에 그대로 전달)
  runlot pg export [dir]           진단용 덤프를 만들어요 (백업 아님)

  runlot pg generations [dir]      백업 목록 (--json 으로 원본 출력)
  runlot pg restore <e>/<s> [dir]  그 백업으로 되돌려요 (latest 가능, admin)
  runlot pg delete [dir]           데이터베이스를 삭제해요 (admin)
  runlot pg abort <opId> [dir]     진행 중인 작업을 중단해요 (admin)

  runlot pg token [dir]            단기 접속 자격을 발급해요 (--ttl, --json)
  runlot pg token list [dir]       발급된 자격 목록
  runlot pg token revoke <user>    자격을 폐기해요

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  -c, --command    실행할 SQL (pg execute)
  -f, --file       실행할 SQL 파일 (pg execute)
  --migrations <d> 마이그레이션 디렉토리 (기본 <dir>/migrations)
  --ca-dir <path>  로컬 CA 디렉토리 (주면 TLS 검증을 verify-full 로 올려요)
                   (기본 $RUNLOT_CA_DIR)
  -y, --yes        확인 프롬프트를 건너뛰어요 (rollback·secret delete·domain rm·
                   dns rm·dns delete·pg restore·pg delete·domains buy·storage delete·
                   auth delete·auth provider rm)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)
  --ttl <기간>     pg token 의 유효 기간 (기본 1h, 예: 30m·12h·7d)

storage — 파일 저장소

  runlot storage create [dir]      오브젝트 스토리지를 켜요 (Worker 에서 env.storage)
  runlot storage [status] [dir]    사용량과 상한 (--json 으로 원본 출력)
  runlot storage delete [dir]      스토리지를 해제해요 (admin)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  -y, --yes        확인 프롬프트를 건너뛰어요 (rollback·secret delete·domain rm·
                   dns rm·dns delete·pg restore·pg delete·domains buy·storage delete·
                   auth delete·auth provider rm)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·

auth — 앱의 로그인

  runlot auth create [dir]         앱의 로그인을 켜요 (Worker 에서 env.auth)
  runlot auth [status] [dir]       설정·프로바이더·콜백 URL (--json 으로 원본 출력)
  runlot auth provider set <p>     소셜 로그인을 등록해요 (--client-id, --client-secret, admin)
  runlot auth provider rm <p>      소셜 로그인을 떼요 (admin)
  runlot auth set <키> <값>        allow-signup·require-verified on|off, session-days <n>,
                                   brand-name·brand-color·brand-logo <값>
  runlot auth delete [dir]         로그인을 해제해요 (가입자 표는 DB 에 남아요, admin)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  -y, --yes        확인 프롬프트를 건너뛰어요 (rollback·secret delete·domain rm·
                   dns rm·dns delete·pg restore·pg delete·domains buy·storage delete·
                   auth delete·auth provider rm)
  --client-id <id> auth provider set 의 프로바이더 공개 id
  --client-secret <값> auth provider set 의 클라이언트 시크릿 (없으면 물어봐요)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·

access — 배포 접근 제어

  runlot access [dir]              누가 이 배포를 볼 수 있는지 (--json)
  runlot access set <mode> [dir]   public | org | password (--password, admin)
  runlot access bypass --new|--revoke  CI 용 우회 시크릿 (Runlot-Access-Bypass 헤더, admin)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·

secret — 시크릿

  runlot secret set <NAME> [값]    시크릿을 저장해요 (값 생략 시 stdin 에서 읽어요)
  runlot secret list [dir]         시크릿 이름·버전 목록 (값은 보여 주지 않아요)
  runlot secret delete <NAME> [d]  시크릿을 삭제해요

  `secret set` 은 디렉토리 인자를 받지 않아요 (둘째 인자는 값이에요).
  다른 디렉토리의 프로젝트는 --org/--project 로 지정해요.

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  -y, --yes        확인 프롬프트를 건너뛰어요 (rollback·secret delete·domain rm·
                   dns rm·dns delete·pg restore·pg delete·domains buy·storage delete·
                   auth delete·auth provider rm)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)

domain — 커스텀 도메인

  runlot domain add <host> [dir]   커스텀 도메인을 연결해요 (CNAME·TXT 안내를 보여 줘요)
  runlot domain list [dir]         연결된 도메인과 상태
  runlot domain verify <h> [dir]   지금 확인해요 (1 분마다 저절로도 확인해요)
  runlot domain rm <host> [dir]    도메인 연결을 끊어요

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  -y, --yes        확인 프롬프트를 건너뛰어요 (rollback·secret delete·domain rm·
                   dns rm·dns delete·pg restore·pg delete·domains buy·storage delete·
                   auth delete·auth provider rm)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)

dns — DNS 존

  runlot dns zones                 우리 네임서버가 답하는 존 목록 (--org 필요)
  runlot dns create <zone>         존을 만들어요 (--org 필요)
  runlot dns records <zone>        존의 레코드 목록
  runlot dns set <z> <n> <t> <값…> 레코드를 만들거나 바꿔요 (--ttl, 값 전체를 적어요)
  runlot dns rm <zone> <n> <t>     레코드를 지워요
  runlot dns delete <zone>         존을 지워요

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  -y, --yes        확인 프롬프트를 건너뛰어요 (rollback·secret delete·domain rm·
                   dns rm·dns delete·pg restore·pg delete·domains buy·storage delete·
                   auth delete·auth provider rm)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)
  --ttl <기간>     pg token 의 유효 기간 (기본 1h, 예: 30m·12h·7d)

domains — 도메인 구매·갱신

  runlot domains check <이름...>    살 수 있는지와 값을 봐요 (--org 필요)
  runlot domains buy <이름>        도메인을 사요 (--years, --contact-json, -y)
  runlot domains list              가진 도메인 목록
  runlot domains show <이름>       도메인 하나와 최근 기록
  runlot domains import <이름>     이미 가진 도메인을 가져와요
  runlot domains renew <이름>      갱신해요 (--years)
  runlot domains lock|unlock <이름> 이전 잠금을 켜고 꺼요
  runlot domains auth-code <이름>  다른 등록기관으로 옮길 코드를 받아요

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  -y, --yes        확인 프롬프트를 건너뛰어요 (rollback·secret delete·domain rm·
                   dns rm·dns delete·pg restore·pg delete·domains buy·storage delete·
                   auth delete·auth provider rm)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)
  --years <n>      domains buy·renew 의 연수 (1~10, 기본 1)
  --contact-json <f> domains buy 의 등록자 연락처 JSON 파일 (없으면 물어봐요)

logs — 로그

  runlot logs [dir]                Worker 로그를 실시간으로 보여 줘요 (Ctrl-C 로 종료)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  --tail <n>       logs 가 처음에 받을 줄 수 (기본 200, 최대 2000)
  --no-follow      logs 를 최근 줄까지만 보고 끝내요 (기본은 실시간으로 이어 가요)

usage — 사용량

  runlot usage [dir]               시간대별 사용량 (--json 으로 원본 출력)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)
  --hours <n>      usage 가 볼 시간 범위 (기본 24, 최대 720)

port-forward — 로컬 포트 잇기

  runlot port-forward [dir]        로그인 세션으로 로컬 포트를 데이터베이스에 이어요
                                   (--port 15432, --listen 127.0.0.1, Ctrl-C 로 종료)

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  --ca-dir <path>  로컬 CA 디렉토리 (주면 TLS 검증을 verify-full 로 올려요)
                   (기본 $RUNLOT_CA_DIR)
  --port <n>       port-forward 가 열 로컬 포트 (기본 15432)
  --listen <addr>  port-forward 가 붙을 로컬 주소 (기본 127.0.0.1)

rollback — 되돌리기

  runlot rollback <version> [dir]  이전 버전으로 되돌려요

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  -y, --yes        확인 프롬프트를 건너뛰어요 (rollback·secret delete·domain rm·
                   dns rm·dns delete·pg restore·pg delete·domains buy·storage delete·
                   auth delete·auth provider rm)

versions — 배포 이력

  runlot versions [dir]            배포 이력

옵션

  --org <slug>     조직 (runlot.json 의 "org" 보다 우선)
  --project <name> 프로젝트 (runlot.json 의 "name" 보다 우선)
  --api <url>      cp-public 주소 (기본 http://127.0.0.1:8080)
  --json           서버 응답 JSON 을 그대로 출력해요 (목록 명령 전부·usage·
                   pg generations·pg token)

이 페이지에서