diff --git a/01.Shelf/KUI/01. 아키텍처 흐름.md b/01.Shelf/KUI/01. 아키텍처 흐름.md new file mode 100644 index 0000000..7c9133a --- /dev/null +++ b/01.Shelf/KUI/01. 아키텍처 흐름.md @@ -0,0 +1,16 @@ +- **Obsidian Vault (Private Repo):** 개인용 비공개 저장소에 마스킹되지 않은 원본 노트를 push합니다. + +- **Jenkins Trigger:** 젠킨스가 Webhook을 통해 push 이벤트를 감지하거나 주기적으로 폴링(Polling)합니다. + +- **Validation & Masking (Build Step):** 젠킨스 서버 내에서 Python 스크립트 등을 실행해 변경된 파일의 민감 정보를 검증하고 수정합니다. + +- **Push to Quartz (Post-build):** 정제된 파일을 쿼츠 저장소로 복사한 뒤, 해당 저장소에 커밋 및 push를 수행합니다. + +> [!todo] **필요한것** 📋 +> +> - [x] kui vault repository +> - [x] kui repository +> - [ ] Jenkins 서버 ( 구글에서 제공해주는 클라우드 서버 확보하면 될 듯 ) +> - [ ] blur 처리 용 서버 ( kui veil, veil 이라고 이름 지으면 될 듯 ) + +jenkins 서버를 구성해보자 \ No newline at end of file diff --git a/01.Shelf/KUI/02. Jenkins 서버 구축 계획.md b/01.Shelf/KUI/02. Jenkins 서버 구축 계획.md new file mode 100644 index 0000000..04508a9 --- /dev/null +++ b/01.Shelf/KUI/02. Jenkins 서버 구축 계획.md @@ -0,0 +1,58 @@ +확보중인 개인용 서버가 없기 때문에 서버부터 확보해야 함. + +> [!question] +> Q. 클라우드 서버를 확보해야해. 무료여야하고 지금 내가 하려는 블러처리작업용으로 적당한정도면 돼 +> A. 무료이면서 **젠킨스**와 **마스킹 스크립트(Python)**를 돌리기에 가장 적합한 클라우드 서비스 3가지를 추천해 드릴게요. 2026년 현재 기준으로도 가장 안정적인 옵션들입니다. + +|**비교 항목**|**Oracle Cloud**|**Google Cloud**|**AWS**| +|---|---|---|---| +|**성능 (RAM)**|⭐⭐⭐⭐⭐ (24GB)|⭐ (1GB)|⭐⭐ (2GB)| +|**안정성**|⭐⭐⭐|⭐⭐⭐⭐⭐|⭐⭐⭐⭐⭐| +|**추천 이유**|젠킨스 구동에 여유로움|설정이 매우 간편함|글로벌 표준 학습 가능| +이 중 AWS는 일정기간만 무료임 +오라클은 아직 마이너해서 쓰고싶지 않음 +GCP로 가기로 함. +Google Cloud Platform + +--- +구글 클라우드(GCP)에서 **평생 무료**로 쓸 수 있는 사양은 딱 하나 정해져 있습니다. 바로 **e2-micro** 인스턴스입니다. 실시간 응답이 중요하지 않은 **`kui-ink`** 서버용으로는 아주 적절한 선택이에요. + +GCP에서 무료로 구동하기 위한 '필수 조건'을 정리해 드릴게요. 이대로만 설정하면 돈이 나가지 않습니다. + +--- + +### 🖥️ GCP 평생 무료 서버 설정값 (2026 기준) +|**항목**|**설정해야 할 값**|**비고**| +|---|---|---| +|**리전 (Region)**|**us-west1** (오리건)|한국에서 가장 지연시간이 적은 무료 리전| +|**머신 유형**|**e2-micro**|2 vCPU, 1GB RAM (공유 코어)| +|**부팅 디스크**|**Standard** Persistent Disk|'Balanced'나 'SSD'는 유료입니다!| +|**디스크 용량**|**30GB** 이하|무료 한도가 딱 30GB까지입니다.| +### ⚠️ 주의할 점 (젠킨스 구동 관련) + +**e2-micro**는 램이 **1GB**뿐입니다. 젠킨스는 Java 기반이라 기본적으로 메모리를 많이 먹어서, 그냥 실행하면 서버가 멈출 수도 있어요. 이를 해결하기 위한 팁입니다. + +1. **Swap 메모리 설정:** 부족한 램을 보충하기 위해 하드디스크의 일부(약 2GB)를 가상 메모리로 사용하는 설정을 반드시 해줘야 합니다. + +2. **경량화 설정:** 젠킨스 실행 옵션에서 사용할 메모리 최대치(`-Xmx`)를 제한하면 1GB 환경에서도 꾸역꾸역 돌아갑니다. + +3. **오리건 리전:** 앞서 말씀드린 것처럼 한국 리전은 무료가 아니므로 꼭 **us-west1**을 선택하세요. + +### 🚀 다음 단계: 서버 생성하기 + +GCP 콘솔에 접속해서 아래 순서대로 진행해 보세요. + +1. [GCP 콘솔](https://console.cloud.google.com/) 접속 및 프로젝트 생성 + +2. **Compute Engine > VM 인스턴스** 메뉴로 이동 + +3. **인스턴스 만들기** 클릭 + +4. 위에 표에 적힌 **리전, 머신 유형, 디스크**를 정확히 선택 + +5. 하단 **만들기** 버튼 클릭 + + +혹시 가입이나 인스턴스 생성 중에 막히는 부분이 생기면 바로 말씀해 주세요. 서버가 만들어지면 바로 **`kui-ink`**라는 이름을 붙여주고 젠킨스 설치로 넘어가겠습니다! + +**지금 바로 GCP 가입을 시도해 보시겠어요?** 가입 후 서버 생성 화면까지 가시면 다음 가이드를 드릴게요. \ No newline at end of file diff --git a/01.Shelf/KUI/03. Jenkins 설치.md b/01.Shelf/KUI/03. Jenkins 설치.md new file mode 100644 index 0000000..a140f85 --- /dev/null +++ b/01.Shelf/KUI/03. Jenkins 설치.md @@ -0,0 +1,60 @@ +를 시도했지만 실패함. +아마 우분투 최신버전 (25. 몇이었는데..)과 젠킨스가 잘 안맞는거 같음. + +젠킨스말고 다른 우회방법을 찾아봄 + +> [!question] +> Q. 젠킨스를 대체할만한 프로그램없어? +> A. 젠킨스의 그 복잡한 설정과 인증 오류 때문에 정말 정이 뚝 떨어지셨을 것 같습니다. 180°C의 열정으로 시작했는데 도구 설치부터 막히면 누구라도 다른 길을 찾고 싶어지죠. +> +> **HDI**님이 원하시는 건 **내 서버(GCP) 내에서 직접 돌아가면서**, 젠킨스처럼 UI도 있고, 내 Obsidian 노트를 Quartz로 빌드해 배포해줄 **'설치가 쉽고 가벼운'** 대체 프로그램이겠죠? +> +> 젠킨스의 무거운 Java 기반 엔진 대신, 요즘 개발자들 사이에서 **젠킨스 킬러**로 불리는 가벼운 도구 2가지를 추천해 드립니다. + +### 🛠️ 젠킨스를 대체할 가벼운 CI/CD 도구 TOP 2 + +#### 1. [[Woodpecker]] CI (강력 추천) + +젠킨스가 대형 버스라면, [[Woodpecker]]는 날렵한 전기차 같습니다. **Go 언어**로 만들어져서 메모리를 아주 적게 먹고, 설정이 매우 직관적입니다. + +- **장점:** 젠킨스보다 훨씬 가볍습니다(1GB 램인 `e2-micro`에 최적). 모든 설정을 `.woodpecker.yml` 파일 하나로 끝낼 수 있습니다. + +- **UI:** 젠킨스처럼 깔끔한 웹 대시보드를 제공합니다. + +- **설치:** 도커(Docker)를 이용하면 명령어 한두 줄로 끝납니다. 아까 같은 `GPG` 오류와 싸울 필요가 없습니다. + + +#### 2. Gitea Actions (Gitea를 쓰신다면 최고) + +만약 내 서버에 소스코드를 직접 관리하고 싶다면 **Gitea**를 설치하는 방법이 있습니다. Gitea 안에는 GitHub Actions와 거의 똑같은 방식의 **Actions** 기능이 내장되어 있습니다. + +- **장점:** 소스코드 관리(Git)와 자동 배포(CI/CD)를 한 곳에서 끝낼 수 있습니다. + +- **특징:** GitHub Actions 문법을 그대로 쓸 수 있어 학습 곡선이 낮습니다. + +### 💡 왜 이 도구들이 젠킨스보다 나을까요? + +젠킨스는 20년 전 기술이라 설치 과정부터 수많은 의존성(Java 버전, GPG 키 등)과 싸워야 합니다. 반면 **Woodpecker** 같은 최신 도구들은 **도커(Docker)** 기반으로 돌아가는 것을 기본으로 합니다. + +**도커를 사용하면:** + +1. 내 서버의 우분투 버전이 무엇이든 상관없습니다. + +2. `GPG` 키 에러, `NO_PUBKEY` 에러 같은 지긋지긋한 문제에서 완전히 해방됩니다. + +3. 삭제하고 싶을 때도 명령어 한 줄이면 찌꺼기 없이 사라집니다. + + +--- + +### 🚀 HDI님을 위한 새로운 제안 + +**"도커(Docker)를 먼저 깔고, 그 위에 Woodpecker CI를 올려보는 건 어떠신가요?"** + +도커는 설치가 아주 쉽고, 한 번 깔아두면 나중에 다른 프로그램을 올릴 때도 지금 같은 고생을 안 하게 해주는 마법 같은 도구입니다. 180°C의 집념을 젠킨스와의 싸움이 아닌, **진짜 자동화 시스템 구축**에 쏟으실 수 있게 도와드릴게요. + + +# 그래서 [[Woodpecker]] CI를 사용해보기로 함 +docker 기반으로 구동되는 CI/CD tool +도커 기반이니까 당연히 os 안탈거같다 + diff --git a/01.Shelf/KUI/04. Woodpecker 설치.md b/01.Shelf/KUI/04. Woodpecker 설치.md new file mode 100644 index 0000000..78f8c54 --- /dev/null +++ b/01.Shelf/KUI/04. Woodpecker 설치.md @@ -0,0 +1,117 @@ +## 1. 개요 + +기존 젠킨스(Jenkins)는 자바 기반으로 메모리 점유율이 높아 저사양 서버에서 구동이 힘들었음. 이를 해결하기 위해 Go 언어 기반의 초경량 CI 도구인 **Woodpecker**를 도입하고, 도커(Docker) 기반으로 환경을 재구축함. + +--- + +## 2. 환경 정화 및 도커 설치 + +무거운 자바를 삭제하고 현대적인 컨테이너 환경을 준비함. + +```bash +# OpenJDK 삭제 및 정리 +sudo apt purge -y openjdk-17-jre openjdk-17-jre-headless +sudo apt autoremove -y + +# 도커(Docker) 설치 +curl -fsSL https://get.docker.com -o get-docker.sh +sudo sh get-docker.sh + +# 현재 사용자에게 도커 권한 부여 +sudo usermod -aG docker $USER +newgrp docker # 로그아웃 없이 권한 즉시 적용 +``` + +## 3. GitHub OAuth 앱 등록 + +우드패커가 GitHub 저장소에 접근할 수 있도록 통행증을 발급함. + +1. **GitHub Settings > Developer settings > OAuth Apps** 이동 + +2. **New OAuth App** 생성 + + - Homepage URL: `http://34.19.79.94:8000` + + - Authorization callback URL: `http://34.19.79.94:8000/authorize` + +3. **Client ID**와 **Client Secret** 발급 및 보관 + + +--- + +## 4. 우드패커 서버 및 에이전트 배포 + +`docker-compose`를 사용하여 서버(두뇌)와 에이전트(일꾼)를 동시에 띄움. + +**파일 위치:** `~/woodpecker/docker-compose.yaml` + +```bash +services: + woodpecker-server: + image: woodpeckerci/woodpecker-server:latest + ports: + - 8000:8000 + volumes: + - ./woodpecker-server:/var/lib/woodpecker + environment: + - WOODPECKER_OPEN=true + - WOODPECKER_HOST=http://34.19.79.94:8000 + - WOODPECKER_AGENT_SECRET=wp_secure_9827_vpx_qr # 보안을 위해 이니셜 제외 + - WOODPECKER_GITHUB=true + - WOODPECKER_GITHUB_CLIENT=발급받은_ID + - WOODPECKER_GITHUB_SECRET=발급받은_Secret + + woodpecker-agent: + image: woodpeckerci/woodpecker-agent:latest + command: agent + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - WOODPECKER_SERVER=woodpecker-server:9000 + - WOODPECKER_AGENT_SECRET=wp_secure_9827_vpx_qr +``` + +```bash +# 실행 및 상태 확인 +docker compose up -d +docker ps +``` + +## 5. 파이프라인 설정 (`.woodpecker.yml`) + +저장소 최상단에 작업 지시서를 작성하여 자동화를 테스트함. + +**주요 해결 과제:** + +- **Git 명령 인식:** 기본 `alpine` 이미지에는 git이 없으므로 `alpine/git` 이미지를 사용하여 해결. + +- **이력 확인(HEAD^):** 기본 clone은 depth가 1이라 이전 이력이 없음. `depth: 2` 설정을 통해 최적화된 상태로 이전 커밋과 비교 가능하게 함. + +```bash +kind: pipeline +name: check-updates + +clone: + setup: + image: woodpeckerci/plugin-git + settings: + depth: 2 + +steps: + - name: show-changes + image: alpine/git + commands: + - echo "새로운 업데이트가 감지되었습니다!" + - echo "수정된 파일 목록:" + - git diff --name-only HEAD^ HEAD + - echo "최근 커밋 메시지:" + - git log -1 --pretty=%B +``` + +## 6. 트러블슈팅 기록 + +- **Forge Not Configured:** GitHub OAuth 설정이 누락되어 서버가 실행 직후 종료됨 -> 환경 변수 추가로 해결. + +- **Agent Auth Error:** 서버 데이터베이스와 에이전트의 Secret Key가 꼬임 -> 서버 볼륨 삭제 후 재시작으로 초기화 성공. + +- **GCP 방화벽:** 8000번 포트가 막혀 접속 불가 -> VPC 네트워크 방화벽 규칙 추가로 해결. \ No newline at end of file diff --git a/01.Shelf/KUI/05. kui-veil weaver.md b/01.Shelf/KUI/05. kui-veil weaver.md new file mode 100644 index 0000000..5f5c41b --- /dev/null +++ b/01.Shelf/KUI/05. kui-veil weaver.md @@ -0,0 +1,2 @@ +이 서비스의 핵심 기능을 해줄 weaver 서비스를 구현해야 함. +( 실제 blur 처리를 진행해줄 서비스 ) \ No newline at end of file