runlot

psql 과 wire 접속

쓰시던 도구로 그대로 붙습니다. 로그인 세션으로 잇거나, 기계용 자격을 발급받습니다.

가장 빠른 길

runlot pg shell

psql 을 찾아 접속까지 해 줍니다. -- 뒤의 인자는 psql 에 그대로 전달됩니다.

runlot pg shell -- -c "select count(*) from posts"

비밀번호는 PGPASSWORD 환경 변수로 넘깁니다 — argv 는 같은 기계의 아무 사용자나 ps 로 읽기 때문입니다.

로컬 포트로 잇기

GUI 클라이언트나 다른 도구를 쓰시려면 포워딩이 편합니다.

runlot port-forward
127.0.0.1:15432 에서 me/my-app 의 데이터베이스로 연결해요.
psql "postgresql://…@127.0.0.1:15432/…" 처럼 접속하세요. 종료는 Ctrl-C.
runlot port-forward --port 5555 --listen 127.0.0.1
runlot port-forward --port 0      # 빈 포트를 골라 알려 줍니다

비밀번호가 여러분의 기계로 내려오지 않습니다. 포워딩은 runlot login 세션을 그대로 씁니다 — CLI 는 접속 지점(호스트·포트·데이터베이스 이름)만 받아 오고, 인증은 앞단에서 그 세션으로 끝납니다. 토큰이 만료되거나 조직에서 나가시면 다음 연결부터 거절됩니다.

밖에서 직접 붙기

외부 BI 도구나 다른 호스팅의 앱처럼 runlot login 이 없는 곳에서는 pg token 으로 자격을 발급받습니다.

postgresql://<user>:<password>@wire.runlot.app:5433/<database>?sslmode=require

포트는 5433 입니다.

TLS

sslmode=require 는 libpq 의 뜻 그대로 "암호화는 하되 인증서는 검증하지 않는다" 입니다. 검증까지 하시려면 CA 디렉토리를 주세요.

runlot pg shell --ca-dir ./ca      # 또는 RUNLOT_CA_DIR

SNI 는 검증과 무관하게 언제나 채웁니다 — 앞단이 SNI 로 어느 프로젝트인지 정하기 때문입니다. SNI 를 끄면 붙지 않습니다.

드라이버 호환

지금은 텍스트 결과 형식을 쓰는 드라이버만 붙습니다. psql, node-postgres, psycopg(기본 설정)가 여기 해당합니다. pgx · JDBC · Npgsql · asyncpg 처럼 바이너리 결과 형식을 요구하는 드라이버는 아직 0A000 으로 거절됩니다. 엔진 쪽 구현은 끝났고 프로덕션 노드에 올라가는 것이 남았습니다.

바이너리 파라미터는 앞으로도 거절합니다. 대칭 작업이지만 별개이고, 그때까지는 거절이 안전한 쪽입니다.

인증이 서는 자리

앞단이 SNI 로 프로젝트를 정하고, startup 직후에 인증을 끝냅니다. 자격은 둘입니다.

누구자격쓰는 곳
사람runlot login 세션runlot port-forward, 대시보드 SQL 에디터
기계접속 문자열의 비밀번호외부 BI, 다른 호스팅의 앱

들어오는 연결의 runlot_* startup 파라미터는 앞단에서 모두 지워지고, 판정한 역할이 다시 붙습니다. 클라이언트가 위조할 수 없습니다.

이 페이지에서