Initial Kui Vault
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
1. [[단순함의 노하우(Introduction)]]
|
||||
|
||||
2. [[80대20 원칙(The Pareto Principle)]]
|
||||
|
||||
3. [[최소 기능 제품 (MVP)]]
|
||||
|
||||
4. [[코딩 원칙 (YAGNI, KISS, DRY)]]
|
||||
|
||||
5. [[유닉스 철학 (The Unix Philosophy)]]
|
||||
|
||||
6. [[설계와 추상화]]
|
||||
|
||||
7. [[디버깅과 테스트]]
|
||||
|
||||
8. [[협업과 지속 가능한 개발]]
|
||||
@@ -0,0 +1,13 @@
|
||||
[[꼭 알아둬야 할 것들]]
|
||||
|
||||
[[AWS Architecture로의 전환이 필요한 이유]] (As-Is)
|
||||
|
||||
[[온프레미스에서 EC2 기반으로]]
|
||||
|
||||
[[컨테이너 기반의 아키텍처]] (To-Be)
|
||||
|
||||
[[ECS와 EKS]]
|
||||
|
||||
[[EKS Cluster]]
|
||||
|
||||
[[AWS ECS 구성하기]]
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
id: "CMMS 마이그레이션 20260319"
|
||||
created: "2026-03-19 12:58"
|
||||
tags:
|
||||
aliases:
|
||||
---
|
||||
마이그레이션: 신규 고객의 셋업작업 진행 시 필요한 데이터를 DB로 밀어넣는 과정
|
||||
|
||||
|
||||
엑셀파일로 된 마이그레이션 필요 문서 작성 (담당자가 따로있나봄)
|
||||
(원본엑셀 -> 마이그레이션 할 데이터 엑셀 )
|
||||
|
||||
/auth/fullmigration
|
||||
( CMMS 엔터프라이즈형은 /auth/mig )
|
||||
마이그레이션 페이지가 따로 만들어져있음.
|
||||
|
||||
여기서 엑셀파일들을 전부 다 execute migration 진행해줘야 함
|
||||
너무 많은 데이터를 한번에 시도하면 문제가 될 수 있어서
|
||||
분리해서 진행해야함.
|
||||
|
||||
|
||||
파일 마이그레이션은 암호화(확장자없는) 파일을 먼저 만들고 (엑셀파일부터 작성)
|
||||
...? 그다음에 뭘 또 해야한다는데 이건 이해 못함
|
||||
|
||||
|
||||
shared-service: 마이그레이션, open API (우리는 일단 신경x) 등등의 기능들을 처리해주는 서비스
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
[[VPN으로 외부 DB에 접근]]
|
||||
|
||||
@@ -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 서버를 구성해보자
|
||||
@@ -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 가입을 시도해 보시겠어요?** 가입 후 서버 생성 화면까지 가시면 다음 가이드를 드릴게요.
|
||||
@@ -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 안탈거같다
|
||||
|
||||
@@ -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 네트워크 방화벽 규칙 추가로 해결.
|
||||
@@ -0,0 +1,2 @@
|
||||
이 서비스의 핵심 기능을 해줄 weaver 서비스를 구현해야 함.
|
||||
( 실제 blur 처리를 진행해줄 서비스 )
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
id: "gitea, qurtz 설치 20260331"
|
||||
created: "2026-03-31 10:41"
|
||||
tags:
|
||||
---
|
||||
# 🌐 개인 서버(GCP) 기반 Gitea & HTTPS 구축 가이드
|
||||
|
||||
본 문서는 Ubuntu 25.xx 환경에서 가벼운 Git 서비스인 **Gitea**를 설치하고, **Nginx**와 **DuckDNS**를 이용해 **HTTPS** 보안 접속을 구현한 과정을 정리합니다.
|
||||
|
||||
## 1. 서버 기본 환경 및 Gitea 설치
|
||||
|
||||
가장 가벼운 바이너리 실행 방식으로 Gitea를 설치하고 전용 사용자를 생성했습니다.
|
||||
|
||||
- **OS:** Ubuntu 25.xx (GCP Instance)
|
||||
|
||||
- **사용자 생성:** `git` 시스템 사용자 생성 (`/home/git`)
|
||||
|
||||
- **DB:** SQLite3 (경량화를 위해 선택)
|
||||
|
||||
- **바이너리 경로:** `/usr/local/bin/gitea`
|
||||
|
||||
- **데이터 경로:** `/var/lib/gitea`
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 2. 도메인 및 네트워크 설정
|
||||
|
||||
외부 접속을 위해 무료 DDNS 주소를 확보하고 클라우드 방화벽을 조정했습니다.
|
||||
|
||||
- **도메인:** `white-smith.duckdns.org` (GCP 외부 IP 연결 완료)
|
||||
|
||||
- **포트 개방 (GCP & UFW):**
|
||||
|
||||
- `22/tcp`: SSH 접속 (PuTTY, SFTP)
|
||||
|
||||
- `80/tcp`: HTTP (인증서 발급 및 리다이렉트용)
|
||||
|
||||
- `443/tcp`: HTTPS (실제 서비스용)
|
||||
|
||||
- **보안 조치:** 불필요한 포트(20, 21, 3389 등) 차단 및 Gitea 직접 포트(3000)는 Nginx를 거치도록 외부 차단 권장.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 3. HTTPS & Nginx 리버스 프록시
|
||||
|
||||
Nginx를 앞단에 세워 보안을 강화하고 도메인 기반 접속을 구현했습니다.
|
||||
|
||||
### SSL 인증서 발급
|
||||
|
||||
`Certbot`을 이용해 **Let's Encrypt** 무료 SSL 인증서를 발급받았습니다.
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
sudo certbot --nginx -d white-smith.duckdns.org
|
||||
```
|
||||
|
||||
### Nginx 최종 설정 (`/etc/nginx/sites-available/gitea`)
|
||||
|
||||
IP 접속 시 도메인으로 자동 전환되도록 설정했습니다.
|
||||
|
||||
Nginx
|
||||
|
||||
```
|
||||
# 1. HTTP -> HTTPS 리다이렉트 (IP 포함)
|
||||
server {
|
||||
listen 80;
|
||||
server_name 34.19.79.94 white-smith.duckdns.org;
|
||||
return 301 https://white-smith.duckdns.org$request_uri;
|
||||
}
|
||||
|
||||
# 2. HTTPS 서비스 블록
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name white-smith.duckdns.org;
|
||||
|
||||
# SSL 인증서 경로 (Certbot 관리)
|
||||
ssl_certificate /etc/letsencrypt/live/white-smith.duckdns.org/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/white-smith.duckdns.org/privkey.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Gitea 내부 설정 업데이트
|
||||
|
||||
HTTPS 환경에 맞춰 `/etc/gitea/app.ini` 파일을 `vi`로 수정했습니다.
|
||||
|
||||
- **ROOT_URL:** `https://white-smith.duckdns.org/`
|
||||
|
||||
- **DOMAIN:** `white-smith.duckdns.org`
|
||||
|
||||
- **SSH_DOMAIN:** `white-smith.duckdns.org`
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 5. 현재 상태 요약
|
||||
|
||||
1. **HTTPS 접속:** `https://white-smith.duckdns.org`로 안전하게 접속 가능.
|
||||
|
||||
2. **IP 리다이렉트:** `34.19.79.94` 입력 시 자동으로 도메인 주소로 전환됨.
|
||||
|
||||
3. **파일 전송:** 포트 22번을 통해 SFTP 방식으로 안전하게 파일 관리 중.
|
||||
@@ -0,0 +1,3 @@
|
||||
---
|
||||
title: 1. 프로젝트
|
||||
---
|
||||
Reference in New Issue
Block a user