diff --git a/README.md b/README.md index ac3585c..45173ac 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,14 @@ DB(PostgreSQL)·파일저장소(MinIO)·AI(LiteLLM - key 제외)는 워크스페 [1. 로그인](#1-로그인) → [2. 워크스페이스 만들기](#2-워크스페이스-만들기-최초-1회) → [3. VS Code 열기](#3-vs-code-열기) → [5. AI 키 등록](#5-ai-키-등록-최초-1회) **앱마다** -[6. 새 프로젝트 시작](#6-새-프로젝트-시작) → [7. 개발](#7-개발) → [8. 로컬 실행·확인](#8-로컬-실행확인) → [9. 배포](#9-배포-gitea--kubero--coolify) +[6. 새 프로젝트 시작](#6-새-프로젝트-시작) → [7. 개발](#7-개발) → [8. 로컬 실행·확인](#8-로컬-실행확인) → [9. 배포](#9-배포-gitea--kubero--coolify) → [9-5. 포털에 공유](#9-5-포털에-공유) ``` [최초 1회] 로그인(1) → 워크스페이스 생성(2) → VS Code(3) → AI 키 등록(5) -[앱마다] new-project + git init(6) → 개발·커밋(7) → 로컬 확인(8) → 레포 생성·push·배포(Kubero/Coolify)(9) +[앱마다] new-project + git init(6) → 개발·커밋(7) → 로컬 확인(8) → 레포 생성·push·배포(Kubero/Coolify)(9) → 포털 공유(9-5) ``` -## 0. 서비스 주소 +## 0. 서비스 종류 | 용도 | 주소 | |---|---| @@ -29,10 +29,13 @@ DB(PostgreSQL)·파일저장소(MinIO)·AI(LiteLLM - key 제외)는 워크스페 | Kubero (배포 · 후보) | https://kubero.bokdev.in | | Coolify (배포 · 후보) | https://coolify.bokdev.in | | 개발 중 미리보기 | `https://<자동생성>.coder.bokdev.in` | -| 배포된 앱 | `https://<레포명>.playground.bokdev.in` | +| 배포된 앱 (Kubero) | `https://<레포명>.playground.bokdev.in` | +| 배포된 앱 (Coolify) | `https://<레포명>.apps.bokdev.in` | 모든 서비스는 **행번 계정(SSO)** 으로 로그인합니다. +![개발 및 배포 흐름도](images/architecture.svg) + 코드에서 쓰는 접속정보(DB·S3)는 `.project-env` 파일로 자동 제공됩니다. 직접 입력할 값이 없습니다. ## 1. 로그인 @@ -221,14 +224,15 @@ curl 127.0.0.1:3000/s3 # {"ok":true,"bucket":...} S3 연결 ## 9. 배포 (Gitea → Kubero / Coolify) 배포 단위: Gitea `playground` 조직의 레포 1개 = 배포 앱 1개. -배포 주소: `https://<레포명>.playground.bokdev.in` +배포 주소는 사용하는 도구에 따라 다릅니다 — **Kubero → `https://<레포명>.playground.bokdev.in`**, **Coolify → `https://<레포명>.apps.bokdev.in`**. 배포 도구는 **Kubero**와 **Coolify** 중 하나를 사용합니다. **Gitea 레포 생성([9-1](#9-1-gitea-원격-레포-생성-앱당-1회))과 push([9-2](#9-2-push))는 두 도구 공통**이며, 이후 사용하는 도구에 따라 [9-3A(Kubero)](#9-3a-kubero에-앱-추가-앱당-1회) 또는 [9-3B(Coolify)](#9-3b-coolify에-앱-추가-앱당-1회)를 따릅니다. | 항목 | Kubero | Coolify | |---|---|---| -| 배포 위치 | `playground` 파이프라인에 앱 추가 | `ai-dev` 팀 → `ai-dev` 프로젝트에 앱 추가 | +| 배포 주소 | `https://<레포명>.playground.bokdev.in` | `https://<레포명>.apps.bokdev.in` | +| 배포 위치 | `playground` 파이프라인에 앱 추가 | `aidev` 팀 → `aidev` 프로젝트에 앱 추가 | | 코드 수정 반영 | push 후 **수동 재빌드** (자동 빌드 미연동) | push 시 **자동 재빌드·배포** (webhook 설정 시, [9-3B](#9-3b-coolify에-앱-추가-앱당-1회)) | | 환경변수 입력 | `.project-env` 업로드 → 자동 파싱 | `.project-env` 값을 붙여넣기 (Developer view) | | 빌드 방식 | Dockerfile | Dockerfile | @@ -253,6 +257,9 @@ git push -u origin main ### 9-3A. Kubero에 앱 추가 (앱당 1회) +
+Kubero로 배포 — 도메인 *.playground.bokdev.in · 클릭해서 펼치기 + `playground` pipeline을 사용하시면 되며, 사용자는 그 안에 본인 앱만 추가합니다. 1. https://kubero.bokdev.in 접속 @@ -264,9 +271,14 @@ git push -u origin main > 자동 빌드는 현재 미연동입니다. **코드 수정 후에는 push 하고 Kubero에서 해당 앱의 빌드를 다시 실행합니다.** +
+ ### 9-3B. Coolify에 앱 추가 (앱당 1회) -Coolify는 "**push → Dockerfile로 자동 빌드·배포**" 방식입니다. 사용자는 `ai-dev` 프로젝트에 본인 앱만 추가합니다. +
+Coolify로 배포 — 도메인 *.apps.bokdev.in · 클릭해서 펼치기 + +Coolify는 "**push → Dockerfile로 자동 빌드·배포**" 방식입니다. 사용자는 `aidev` 프로젝트에 본인 앱만 추가합니다. 1. https://coolify.bokdev.in 접속 → 우측 상단에서 **`aidev`** 팀 선택 2. 좌측 **`Projects` → `aidev`** (서버·DB가 연결된 프로젝트) → **`+ Add Resource`** @@ -305,20 +317,37 @@ Public Repository 방식은 webhook을 걸어야 push가 자동 배포로 이어 > push가 배포를 트리거할지는 앱 **Advanced** 탭의 **`Auto Deploy`** 옵션이 결정하며, **기본값이 켜짐**이라 따로 켤 필요는 없습니다(자동 배포를 끄고 싶을 때만 여기서 해제). > 설정 후에는 코드를 고쳐 **`git push` 하면 자동으로 다시 빌드·배포**됩니다(Deployments에서 새 빌드 로그 확인). webhook을 걸지 않았다면 앱 화면에서 **Deploy** 를 눌러 수동 배포합니다. +
+ ### 9-4. 확인 배포·재시작 직후 약 1~2분은 초기화(코드 다운로드·설치) 시간입니다. 일시적으로 404가 나오는 경우, 잠시 기다린 후 Ctrl + Shift + R로 강력 새로고침 후 확인해주세요. ```bash +# Kubero로 배포한 경우 (도메인 .playground.bokdev.in) curl https://<레포명>.playground.bokdev.in/healthz # {"ok":true} curl https://<레포명>.playground.bokdev.in/db curl https://<레포명>.playground.bokdev.in/s3 + +# Coolify로 배포한 경우 (도메인 .apps.bokdev.in) +curl https://<레포명>.apps.bokdev.in/healthz +curl https://<레포명>.apps.bokdev.in/db +curl https://<레포명>.apps.bokdev.in/s3 ``` ![배포된 앱](images/08-deployed-app.png) 문제가 있으면 Kubero에서 해당 앱의 빌드/배포 로그를 확인합니다. 로그에 `listening on :3000` 이 보이면 기동 성공입니다. +### 9-5. 포털에 공유 + +1. [AI DEV Portal](https://portal.bokdev.in)에 접속합니다. +2. `새 프로젝트` 버튼을 눌러 내용을 작성합니다. + ![새 프로젝트 버튼](images/portal-add-new-project.png) +3. 프로젝트 제목, Git 저장소 URL(Gitea URL), 간단한 설명, 배포 URL(실제로 서비스에 접속 가능한 URL) 등을 입력합니다. + ![새 프로젝트 등록 디테일](images/portal-add-new-project-details.png) +4. 공개 범위를 `공개`로 하는 경우 모두에게 프로젝트가 공유되며, `비공개`로 설정하는 경우 나만 볼 수 있습니다. + - 등록 이후에도 공개 범위를 포함하여 프로젝트 내용은 얼마든지 수정 가능하니 편하게 설정해주세요. ## FAQ @@ -342,6 +371,19 @@ curl https://<레포명>.playground.bokdev.in/s3 - **DB가 비어 있음** → 정상입니다. 빈 전용 스키마가 제공되며 테이블은 직접 생성합니다. - **K8s에 직접 접근하고 싶어요** → 직원은 K8s에 직접 접근하지 않습니다. Coder·Gitea·Kubero로 개발·배포가 완결됩니다. +- git 레포 URL vs 배포 URL + + 배포 과정에서 나오는 두 주소는 이름이 비슷해 헷갈리기 쉽지만, **서로 완전히 다른 것**입니다. + + | 종류 | 형태 (예시) | 무엇인가 · 브라우저로 열면 | 매뉴얼에서 쓰는 곳 | + |---|---|---|---| + | **git 레포 URL** | `https://gitea.bokdev.in/playground/<레포명>.git` | **내 소스코드가 저장되는 위치**. `git push` 로 코드를 이 주소에 올립니다. (`.git` 을 뗀 주소를 브라우저로 열면 **코드 파일 목록**이 보이며, 실행 중인 앱이 아닙니다.) | [9-2 push](#9-2-push), Coolify의 *Repository URL* 입력([9-3B](#9-3b-coolify에-앱-추가-앱당-1회)) | + | **배포 URL** | Kubero `https://<레포명>.playground.bokdev.in`
Coolify `https://<레포명>.apps.bokdev.in` | **정식 배포되어 항상 켜져 있는 앱 주소**. 브라우저로 열면 **실제로 실행 중인 앱**이 응답합니다. | [9-4 확인](#9-4-확인) | + + > **핵심 구분** — **git 레포 URL = 코드(소스)가 저장된 곳**, **배포 URL = 그 코드가 실제로 실행되어 접속 가능한 앱**. + > 절차는 항상 이 순서입니다: **코드를 git 레포 URL로 push → 배포 도구(Kubero/Coolify)가 그 코드로 앱을 빌드 → 배포 URL에 앱이 뜸.** + > 즉 push 하는 주소(git 레포)와 접속해서 보는 주소(배포 URL)는 다릅니다. + ## 문의 - IT 전략국 클라우드팀 김창록 팀장 diff --git a/images/architecture.svg b/images/architecture.svg new file mode 100644 index 0000000..900dd2b --- /dev/null +++ b/images/architecture.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + 개발 → 배포 흐름도 + + + ① 코드가 저장되는 곳 + ② 코드가 실제로 실행되는 앱 + + + + + 개발자 + 행번 계정(SSO) 로그인 + + + + 개발·커밋 + + + + + Coder 워크스페이스 + VS Code로 개발하는 + 내 전용 공간 + + + + git push + (코드 업로드) + + + + + Gitea + git 레포 URL + git push 로 코드가 올라오는 곳 + + https://gitea.bokdev.in/ + playground/<레포명>.git + + + + 코드를 가져와 + 빌드 + + + + 배포 도구 + + Kubero + 또는 + + Coolify + + + + 앱 실행 + + + + 배포된 앱 + 배포 URL + 항상 켜져 있는, 실행 중인 실제 앱 + + Kubero: <레포명>.playground.bokdev.in + Coolify: <레포명>.apps.bokdev.in + + + + push한 코드 → 이 앱으로 실행됨 + + + + 공용 리소스 + PostgreSQL(DB) · MinIO(S3 파일저장소) · LiteLLM(AI) + + + + .project-env 로 자동 연결 + + + + .project-env 로 자동 연결 + + + + + 브라우저로 접속 + + + 사용자 + diff --git a/images/portal-add-new-project-details.png b/images/portal-add-new-project-details.png new file mode 100644 index 0000000..0c86694 Binary files /dev/null and b/images/portal-add-new-project-details.png differ diff --git a/images/portal-add-new-project.png b/images/portal-add-new-project.png new file mode 100644 index 0000000..1cc63d0 Binary files /dev/null and b/images/portal-add-new-project.png differ