GN⁺: Dokku: 내가 가장 좋아하는 개인 서버리스 플랫폼
(hamel.dev)Dokku란 무엇인가?
- Dokku는 단일 서버에서 실행되는 오픈 소스 Platform as a Service (PaaS)임
- Heroku와 비슷하지만, 사용자가 소유함
- 비용 효율적이고 사용하기 쉬운 서버리스 플랫폼이 필요함
- OVHcloud에서 월 $7의 VPS를 사용하여 Dokku 서버를 운영함
Dokku의 주요 기능
- 사용하기 쉬움 (Heroku와 유사)
- Let’s Encrypt를 통한 자동 SSL 인증서 관리
- 사이트를 비밀번호로 보호할 수 있는 Basic Auth 지원
- 단일 명령어로 확장 및 축소 가능
- Node, Python 등 다양한 애플리케이션을 처리할 수 있는 유연성
- git 명령어로 쉽게 배포 가능
최소한의 Dokku 예제
Docker 컨테이너로 애플리케이션 배포
- Dockerfile을 git 저장소의 루트에 배치
-
entrypoint.sh
스크립트를 사용하여 로컬 또는 Docker 컨테이너에서 애플리케이션 실행 - Dokku 호스트에서 애플리케이션 생성
- 로컬에서 Dokku 호스트를 원격으로 추가하고 푸시
FROM python:3.10
COPY . /app
WORKDIR /app
RUN pip install .
WORKDIR /app/
ENTRYPOINT ["./entrypoint.sh"]
#!/bin/bash
exec uvicorn main:app --port "$PORT" --host 0.0.0.0
dokku apps:create myapp
git remote add dokku dokku@dokku:myapp
git push dokku main
정적 사이트 배포
- Dokku를 사용하여 비공개 GitHub 저장소에서 정적 사이트를 쉽게 배포하고 비밀번호로 보호 가능
-
NGINX_ROOT
환경 변수를 설정하여 NGINX가 정적 사이트를 제공하도록 설정 - 기본 인증 플러그인을 설치하고 설정
dokku apps:create mysite
dokku config:set static-site NGINX_ROOT=_site
sudo dokku plugin:install https://github.com/dokku/dokku-http-auth.git
sudo chmod +x /home/dokku
touch .static
echo BUILDPACK_URL=https://github.com/dokku/buildpack-nginx > .env
git remote add dokku dokku@dokku:mysite
git push dokku main
dokku http-auth:enable mysite <username> <password>
SSL / HTTPS
- Let’s Encrypt 플러그인을 사용하여 HTTPS 설정 가능
- Cloudflare를 사용하는 경우, Cloudflare가 이를 처리하도록 설정하는 것이 더 쉬움
GitHub Actions를 사용한 배포
- GitHub Actions를 사용하여 Dokku 앱을 자동으로 배포 가능
- 예제 GitHub Action 워크플로우
name: CI
on:
workflow_dispatch:
push:
branches: [main]
jobs:
deploy-dokku:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Install SSH key
run: |
echo "${{ secrets.DOKKU_SSH_PRIVATE_KEY }}" > private_key.pem
chmod 600 private_key.pem
- name: Add remote and push
run: |
git remote add dokku dokku@rechat.co:llm-eval
GIT_SSH_COMMAND="ssh -i private_key.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git push dokku main -f
기타 팁
- 원격으로 명령어 실행 가능
- Docker 캐시 무효화
- 푸시 없이 재빌드
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval
왜 이 글을 작성했는가?
- 새로운 애플리케이션을 배포할 때마다 세부 정보를 찾아야 했기 때문에 작성함
- 다른 사람들에게도 유용하길 바람
GN⁺의 정리
- Dokku는 비용 효율적이고 사용하기 쉬운 오픈 소스 PaaS 플랫폼임
- 다양한 애플리케이션을 쉽게 배포하고 관리할 수 있는 기능을 제공함
- GitHub Actions와 같은 도구를 사용하여 자동 배포 가능
- Cloudflare와 같은 서비스와 함께 사용하면 더욱 편리함
- 비슷한 기능을 제공하는 다른 프로젝트로는 Heroku, Fly.io 등이 있음
Hacker News 의견
-
최근 Dokploy를 사용하며 즐거움을 느끼고 있음
- Dokku와 유사하지만 더 나은 웹 UI를 제공함
- Docker/Compose 솔루션 배포가 쉬워지고 자동 LetsEncrypt 기능이 내장되어 있음
- GitHub Actions 워크플로우를 구축하여 앱 배포를 자동화함
- 다양한 앱을 위한 사전 구성된 Compose 파일도 제공함
-
여러 "selfhosted Heroku" 솔루션을 검토한 후 Dokku를 선택함
- 가장 적은 "마법"이 필요하고, 사용 중단 시에도 쉽게 제거 가능함
- 개발자가 매우 응답성이 좋고, 도움을 받아 커스텀 플러그인을 제작함
- 블로그에 관련 내용을 문서화함
-
새로운 소프트웨어 사용 시 문제를 겪을 수 있지만, Dokku는 그런 문제가 없음
- 몇 가지 CLI 인수 순서 문제를 제외하고는 잘 작동함
- 더 많이 사용한다면 선언적 구성 파일로 전체 아키텍처를 구성하고 싶음
-
Dokku는 Let's Encrypt 플러그인을 통해 HTTPS 설정이 쉬움
- Cloudflare를 통해 TLS를 사용하고 있음
- 개인 사이트가 평문으로 전송되지 않도록 주의 필요함
-
Dokku를 사용하다가 Docker 이미지 구축 및 Swarm 배포로 전환함
- 자체 호스팅 PaaS인 Lunni를 개발하는 동기가 됨
- Heroku나 AWS 대신 소유한 서버에서 모든 것을 실행하는 아이디어를 좋아함
- 예측 가능한 월간 청구서가 마음의 평화를 줌
-
Coolify의 인기가 상승하고 있으며, 모든 규모의 조직이 무료로 자체 호스팅 소프트웨어를 쉽게 운영할 수 있게 함
- Coolify는 오픈 소스 및 자체 호스팅 가능한 Heroku/Netlify/Vercel 대안임
-
Dokku는 놀라운 제품이며 창립자는 매우 겸손하고 도움이 됨
- 더 많은 사람들이 재정적으로 지원했으면 좋겠음
-
이 인프라 유형에 대해 파일/객체 저장소로 무엇을 사용하는지 궁금함
- AWS를 사용하면 egress 비용으로 모든 절감 효과가 상쇄될 수 있음
-
Dokku 사용 경험이 좋지 않았음
- VPS가 충돌하고 재시작할 때 앱이 다시 시작되지 않음
- 결국 단일 노드 k8s 설정으로 전환함
-
traefik + 표준 podman + systemd 통합을 사용할 수 있음
- 관련 문서와 링크 제공됨