# Dokku: 내가 가장 좋아하는 개인 서버리스 플랫폼

> Clean Markdown view of GeekNews topic #16477. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16477](https://news.hada.io/topic?id=16477)
- GeekNews Markdown: [https://news.hada.io/topic/16477.md](https://news.hada.io/topic/16477.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-27T09:42:40+09:00
- Updated: 2024-08-27T09:42:40+09:00
- Original source: [hamel.dev](https://hamel.dev/blog/posts/dokku/)
- Points: 7
- Comments: 1

## Summary

Dokku는 비용 효율적이고 사용하기 쉬운 오픈 소스 PaaS 플랫폼으로, Heroku와 유사한 기능을 제공하면서도 사용자가 소유할 수 있습니다. 다양한 애플리케이션을 쉽게 배포하고 관리할 수 있으며, Let’s Encrypt를 통한 자동 SSL 인증서 관리, GitHub Actions를 통한 자동 배포 등의 기능을 지원합니다. 또한, Cloudflare와 같은 서비스와 함께 사용하면 더욱 편리하게 서버를 운영할 수 있습니다.

## Topic Body

### 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 호스트를 원격으로 추가하고 푸시

```Dockerfile
FROM python:3.10
COPY . /app
WORKDIR /app
RUN pip install .
WORKDIR /app/
ENTRYPOINT ["./entrypoint.sh"]
```

```bash
#!/bin/bash
exec uvicorn main:app --port "$PORT" --host 0.0.0.0
```

```bash
dokku apps:create myapp
git remote add dokku dokku@dokku:myapp
git push dokku main
```

#### 정적 사이트 배포

- Dokku를 사용하여 비공개 GitHub 저장소에서 정적 사이트를 쉽게 배포하고 비밀번호로 보호 가능
- `NGINX_ROOT` 환경 변수를 설정하여 NGINX가 정적 사이트를 제공하도록 설정
- 기본 인증 플러그인을 설치하고 설정

```bash
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
```

```bash
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 &lt;username&gt; &lt;password&gt;
```

#### SSL / HTTPS

- Let’s Encrypt 플러그인을 사용하여 HTTPS 설정 가능
- Cloudflare를 사용하는 경우, Cloudflare가 이를 처리하도록 설정하는 것이 더 쉬움

### GitHub Actions를 사용한 배포

- GitHub Actions를 사용하여 Dokku 앱을 자동으로 배포 가능
- 예제 GitHub Action 워크플로우

```yaml
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 캐시 무효화
- 푸시 없이 재빌드

```bash
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 등이 있음

## Comments



### Comment 28331

- Author: neo
- Created: 2024-08-27T09:42:40+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41358020) 
- 최근 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 통합을 사용할 수 있음
  - 관련 문서와 링크 제공됨
