7P by neo 23일전 | favorite | 댓글 1개

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 통합을 사용할 수 있음

    • 관련 문서와 링크 제공됨