GN⁺: Piku: Git Push 배포를 자체 서버에서 가능하게 하는 기술
(github.com/piku)데모
문서: 설치 | 사용법 | Procfile | ENV | 예제 | 로드맵 | 기여 | LinuxConf 발표 | 빠른 웹 앱 튜토리얼 | 토론 포럼
설치
-
간단 설치:
curl https://piku.github.io/get | sh
-
다른 설치 방법:
cloud-init
및 수동 설치 방법도 있음.
프로젝트 활동
-
안정성:
piku
는 안정적임. 새로운 언어 런타임 추가나 버그 수정 시 업데이트됨. - Python 요구사항: Python 3.7 이상 필요.
동기
-
piku
는ARM
보드에서Heroku
/CloudFoundry
와 같은 배포 방식을 원해 개발됨. -
dokku
가ARM
에서 작동하지 않아 더 간단한 솔루션 필요. -
piku
는ARM
및Intel
아키텍처에서 여러 애플리케이션을 배포, 관리, 독립적으로 확장 가능.
워크플로우
-
Heroku와 유사한 워크플로우:
-
git
SSH 원격 저장소 생성:git remote add piku piku@yourserver:appname
- 코드 푸시:
git push piku master
-
piku
가 런타임 결정 및 의존성 설치 -
Procfile
을 보고 관련 작업자 시작 - 원격으로 애플리케이션 설정 변경 및 작업자 프로세스 확장 가능
-
ENV
파일에 애플리케이션 및nginx
설정 포함 가능 -
gh-pages
스타일 정적 사이트 배포 가능
-
가상 호스트 및 SSL
- 가상 호스트 지원: 동일한 VPS에서 여러 앱 호스팅 가능
- SSL 설정: Let's Encrypt를 통해 SSL 인증서 설정 가능
캐싱 및 정적 경로
- 정적 사이트 지원: 특정 URL 접두사를 파일 시스템 경로에 직접 매핑 가능
- 캐싱: 백엔드 응답 캐싱 가능
지원 플랫폼
-
POSIX 환경: Python,
nginx
,uwsgi
, SSH가 있는 POSIX 환경에서 작동 - 주요 사용처: 클라우드 서버에서 마이크로 PaaS로 사용
지원 런타임
- 지원 언어: Python, Node, Clojure, Java 등
-
일반 규칙: 셸에서 호출 가능하면
piku
에서 실행 가능
핵심 가치
- 저사양 장치에서 실행 가능
- 취미 사용자 및 K-12 학교에 접근 가능
- 약 1500줄의 읽기 쉬운 코드
- 기능적 코드 스타일
- 단일 의존성
- 12 요소 앱
- 사용자 경험 단순화
- 일반적인 사용 사례의 80% 커버
- 모든 기능에 대한 합리적인 기본값 제공
- Raspbian/Debian/Ubuntu의 배포 패키지 활용
- 표준 도구 (
git
,ssh
,uwsgi
,nginx
) 활용 - 가능한 경우 이전 버전과의 호환성 유지
GN⁺의 의견
-
간편한 배포:
piku
는 소규모 서버에서도 간편하게 배포할 수 있어 소프트웨어 엔지니어에게 유용함. - 다양한 언어 지원: 여러 언어를 지원해 다양한 프로젝트에 적용 가능함.
- 저사양 장치 지원: 저사양 장치에서도 실행 가능해 비용 효율적임.
- 사용자 경험: 사용자 경험을 단순화해 초급 엔지니어도 쉽게 사용할 수 있음.
- 보안: Let's Encrypt를 통한 SSL 설정으로 보안 강화 가능.
Hacker News 의견
-
piku 웹앱 튜토리얼 작성자: piku를 사랑함. 웹앱 튜토리얼을 작성했으며, GitHub의 공식 piku 조직의 일부로 리포지토리에 포함됨. 튜토리얼 링크에서 확인 가능함. piku의 작동 원리와 사용자 관점에서의 최소한의 Python 웹앱 예제를 설명함.
-
piku 처음 접한 사용자: piku에 대해 처음 읽어봄.
git push
로 배포를 시작하는 느낌이 항상 마법처럼 느껴졌음. 이보다 간단한 것은 없음. -
Kubernetes 프로젝트 오픈 소스화 사용자: 최근 Kubernetes 관련 프로젝트를 오픈 소스화했음. piku와 같은 공간에 속하는 프로젝트임. 프로젝트 링크. 축하의 말을 전함. 훌륭해 보임.
-
Dokku 사용자: piku가 좋아 보임. Dokku도 매우 안정적이었음. 그러나 Docker 의존성을 제거하면 OS의 선택에 의존하게 됨. 유지보수 없이 몇 년 동안 실행될 앱에는 이상적이지 않음. 특정 OS 버전이 필요하게 될 수 있음.
-
Cloud Native Buildpacks (CNB) 팀원:
git push
배포와는 관련 없지만, PaaS 경험과 관련 있음. CNCF의 Buildpacks를 대상으로 하는 CNB를 미리보기 중임. 이를 통해 Heroku의git push
논리와 유사한 빌드 도구를 사용하여 로컬에서 Docker 이미지를 생성할 수 있음. Rails 앱 빌드 튜토리얼 링크. 피드백을 원함. -
piku 문서 업데이트 알림: piku의 새롭게 개편된 문서를 확인해보길 권장함. 문서 링크.
-
프로젝트 초기 커밋 시점에 놀란 사용자: 초기 커밋이 8년 전임을 알고 놀람. 18개월 전에 이 프로젝트를 알았더라면 좋았을 것임. Raspberry Pi에 Heroku와 같은 개발 경험을 제공하는 방법을 찾고 있었음. piku가 정확히 그 역할을 하는 것 같음.
-
git은 배포 도구가 아님을 강조하는 사용자: "git은 배포 도구가 아니다"를 반복해서 말함.
-
ground-init 소개자: 유지보수자이자 공동 저자임. 간단하고 최소한의 배포 도구를 좋아한다면 ground-init을 확인해보길 권장함. 클라우드 초기화에 대한 현실적인 접근 방식을 제공함.
-
자동 배포 설정 사용자: 앱에 커밋이 푸시될 때마다 GitHub가 호출하는 마법 URL을 추가했음. 서버가
git pull
을 수행하고 pm2가 앱을 다시 로드함. 작은 프로젝트에 적합함. -
무중단 배포에 대한 질문자: piku가 무중단 배포를 어떻게 처리하는지 궁금함. 예를 들어, Python 서비스가 nginx 뒤에서 포트 8080에서 실행 중일 때, 동일한 포트에서 새 인스턴스로 전환하는 방법을 알고 싶음.