프로젝트
projects 카테고리의 API 작업 8개를 다룹니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /v1/orgs/{orgSlug}/projects | — |
| POST | /v1/orgs/{orgSlug}/projects | 프로젝트 생성 |
| GET | /v1/orgs/{orgSlug}/projects/{projectName} | — |
| PATCH | /v1/orgs/{orgSlug}/projects/{projectName} | 프로젝트 이름 변경 (runlot project rename) |
| DELETE | /v1/orgs/{orgSlug}/projects/{projectName} | 프로젝트 삭제 (runlot project delete) |
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/overview | 프로젝트 개요(대시보드 홈) |
| POST | /v1/orgs/{orgSlug}/projects/{projectName}/disable | 프로젝트 비활성화 (데이터 유지) |
| POST | /v1/orgs/{orgSlug}/projects/{projectName}/enable | 비활성화된 프로젝트 활성화 |
GET /v1/orgs/{orgSlug}/projects
operationId listProjects
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 조직의 프로젝트 | object |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/projects
프로젝트를 생성하면 기본 호스트명도 함께 발급됩니다. 아직 아무것도 실행되지 않으며, 프로젝트는 첫 배포 시점부터 서비스를 시작합니다.
플랜의 프로젝트 제한이 여기서 적용되며, 동시 생성 요청도 이 제한을 초과할 수 없습니다.
operationId createProject
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 201 | 생성된 프로젝트 | Project |
| 403 | — | — |
| 409 | 이름이 이미 사용 중이거나(project_name_taken, hostname_taken), 플랜의 프로젝트 제한에 도달했습니다(project_limit). project_limit의 details는 {limit, count, plan}이며, 메시지를 파싱하는 대신 여기서 숫자를 읽으세요. 재시도해도 결과가 바뀌지 않으므로 409입니다. | Error |
GET /v1/orgs/{orgSlug}/projects/{projectName}
operationId getProject
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 프로젝트 | ProjectDetail |
| 403 | — | — |
| 404 | — | — |
PATCH /v1/orgs/{orgSlug}/projects/{projectName}
admin 이상 권한이 필요합니다. project.rename으로 감사 기록되며, 이전 이름은 detail.from에 담깁니다.
조직 슬러그와 달리 프로젝트 이름은 변경할 수 있습니다. 이는 *.<slug>.runlot.app 와일드카드 안의 레이블이므로, 기존 인증서가 이미 새 이름을 포함하고 있으며 프로젝트의 기본 호스트명만 이동합니다. 커스텀 도메인은 영향을 받지 않습니다.
저장된 데이터는 이동하지 않습니다. 데이터베이스, 오브젝트 스토리지, 생성 체인, 사용량, 시크릿, git 저장소는 모두 그대로 유지됩니다.
깨지는 것은 외부에 있는 사본들입니다: 각자의 runlot.json에 있는 name, 등록된 git remote, 그리고 이미 설정 파일에 붙여 넣은 Postgres 연결 문자열입니다. 이전 주소는 별칭으로 유지되지 않습니다. 응답에는 새 주소가 포함됩니다.
프로젝트의 이메일 주소는 따라가지 않습니다. 외부에서 이미 그 주소로 메일을 보내고 있기 때문에, 권한이 부여되는 시점에 고정됩니다. 이동하려면 취소한 후 다시 부여하세요.
operationId updateProject
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 이름이 변경된 프로젝트와 그 새 주소 | Project |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | 이 조직 내 다른 프로젝트가 이미 그 이름을 사용 중이거나(project_name_taken), 사용하게 될 호스트네임이 이미 사용 중입니다(hostname_taken). 삭제 중인 프로젝트는 project_deleting으로 응답합니다. | Error |
DELETE /v1/orgs/{orgSlug}/projects/{projectName}
admin 이상의 권한이 필요합니다. 이 작업은 되돌릴 수 없으며, 이후 복원할 수 있는 복구 세대도 없습니다. 필요한 것은 먼저 runlot pg export로 내보내세요.
confirm 필드에는 정확한 프로젝트 이름이 담겨 있어야 합니다.
이 호출이 반환되면 프로젝트는 사라진 상태입니다. 프로젝트 목록, GET, git, 메일에서 모두 사라지며 이름은 즉시 다시 사용할 수 있게 됩니다. 폴링할 것도 기다릴 것도 없습니다.
그 이면에서 삭제는 두 단계로 진행됩니다. 첫 번째 단계는 라우팅을 끊고 진행 중인 요청을 마무리하여, 몇 초 안에 해당 주소가 응답을 멈추게 합니다. 두 번째 단계는 데이터베이스 파일, 객체 스토리지, 저장소, 번들, 레코드 등 데이터를 파괴하며, 기본적으로 한 달 뒤인 purgeAfter가 될 때까지 실행되지 않습니다. 그 기간 동안에는 누구도 접근할 수 없으며, 되돌릴 방법도 없습니다.
202 응답에는 GET /v1/orgs/{orgSlug}/operations/{opId}로 조회할 수 있는 작업 id가 담겨 있으며, 이는 첫 번째 단계를 알려줍니다. 클라이언트는 이를 기다리며 차단해서는 안 됩니다.
operationId deleteProject
요청 본문: application/json · object
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 202 | 삭제 시작됨 | OperationStarted |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | 다른 작업 진행 중 (op_in_flight) | Error |
GET /v1/orgs/{orgSlug}/projects/{projectName}/overview
프로젝트 홈 화면에 필요한 모든 것을 한 번의 호출로 제공합니다 — 현재 서비스 중인 배포와 업로드한 사람, 최근 배포 몇 건, 데이터베이스의 마지막 백업, 선언된 리소스의 프로비저닝 여부, 그리고 이 프로젝트의 최근 알림입니다. 이는 "지금 상태가 어떤지"에 답하는 것이지 이력이 아닙니다 — 이력은 탭에서 다룹니다.
사용량은 포함되지 않으므로 getUsage를 함께 호출하세요. viewer 이상의 권한이 필요합니다.
operationId getProjectOverview
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 프로젝트 개요 | ProjectOverview |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/projects/{projectName}/disable
admin 이상의 권한이 필요합니다. 프로젝트가 서비스를 중단하고 새 백업도 만들지 않습니다. 삭제되는 것은 없습니다. 데이터베이스, 파일, 저장소와 이미 만든 백업은 모두 그대로 남으며 enableProject로 되살릴 수 있습니다. 비활성화된 프로젝트는 플랜의 프로젝트 한도에 포함되지 않으므로, 플랜이 허용하는 것보다 많은 프로젝트를 가진 조직은 이 방법으로 배포를 다시 할 수 있습니다.
1년 동안 비활성화된 프로젝트는 deleteAfter에 영구 삭제됩니다. 이미 비활성화된 프로젝트에 호출해도 아무것도 바뀌지 않습니다. project.disable로 감사 기록이 남습니다.
operationId disableProject
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 프로젝트의 비활성화 상태 | ProjectDisabled |
| 403 | — | — |
| 404 | — | — |
POST /v1/orgs/{orgSlug}/projects/{projectName}/enable
admin 이상의 권한이 필요합니다. 프로젝트가 다시 서비스를 시작하고 백업도 재개됩니다. project.enable로 감사 기록이 남습니다.
operationId enableProject
| 상태 코드 | 설명 | 응답 본문 |
|---|---|---|
| 200 | 프로젝트의 비활성화 상태 | ProjectDisabled |
| 403 | — | — |
| 404 | — | — |
| 409 | project_limit — 조직이 이미 플랜이 허용하는 만큼의 활성 프로젝트를 가지고 있습니다. 다른 프로젝트를 먼저 비활성화하거나 삭제하거나, 플랜을 업그레이드하세요. | Error |