제로에서 배포까지: 당신만의 Heroku 대안 (비용 없이)

발행: (2025년 12월 25일 오전 04:35 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

표지 이미지: 제로에서 배포까지: 청구서 없이 개인용 Heroku 대안

문제

빠르게 배포하고 싶지만 Heroku의 가격 때문에 눈물이 나는 느낌을 아시나요? 혹은 Vercel이 $3 정도면 충분할 일을 $20씩 청구한다면요?

Dokploy가 그 문제를 해결합니다. Heroku, Vercel, Netlify의 오픈‑소스 대안으로, 애플리케이션 관리를 간소화하도록 설계되었습니다.

저렴한 VPS($5‑10 / 월)를 임대하고 Dokploy를 한 번 설치하면, 유료 서비스와 똑같이 동작하는 자체 배포 플랫폼을 손에 넣을 수 있습니다.

대시보드는 깔끔합니다—명령줄 지옥이 없습니다. Vercel처럼 클릭과 폼만으로 모든 것을 관리할 수 있습니다.

Dokploy에 실제로 포함된 내용

  • Node.js, PHP, Python, Go, Ruby 등 모든 유형의 애플리케이션을 배포합니다.
  • MySQL, PostgreSQL, MongoDB, MariaDB, Redis 데이터베이스를 생성하고 관리합니다.
  • 자동 백업
  • Docker Compose 지원
  • 애플리케이션을 다중 노드로 확장합니다.
  • CPU, 메모리, 스토리지 및 네트워크 사용량을 모니터링합니다

무엇을 만들든 Dokploy가 처리합니다. 끝.

실행하기 (정말 쉬워요)

  1. VPS를 잡는다 (예: Hetzner 또는 OVH Cloud).
    최소 사양: 2 GB RAM, 2 CPU 코어, 20 GB 디스크, 포트 80443 열림.

  2. 서버에 SSH로 접속하고 다음을 실행한다:

    curl -sSL https://dokploy.com/install.sh | sh

    스크립트가 Docker를 설치하고 모든 것을 설정한 뒤 약 2 분 안에 Dokploy를 띄운다.

  3. 스크립트가 끝나면 http://:3000 같은 URL을 출력한다.
    열어 관리 계정을 만들면 완료.

대시보드: 마법이 일어나는 곳

왼쪽 메뉴는 여러분의 제어 센터입니다.

  • Create Project → 이름을 지정하세요. 비즈니스의 일부에 대한 모든 리소스는 프로젝트 안에 존재합니다.

프로젝트 안에서는 서비스를 만들 수 있습니다:

서비스 유형설명
Applications코드 (GitHub, GitLab 등에서 배포)
DatabasesPostgres, MySQL 등
Docker Compose stacks다중 컨테이너 설정
Templates사전 구축된 오픈소스 앱 (n8n, Pocketbase, …)

각 서비스는 간단한 양식을 통해 생성됩니다—편집할 파일도 없고, 복잡한 설정도 없습니다.

앱 배포하기 (실제 마법)

예시: GitHub에 있는 Next.js 앱.

  1. Create Service → Application
  2. GitHub를 선택하고, 레포와 브랜치를 선택합니다.
  3. Deploy 클릭

Dokploy가 앱을 빌드하고 실행하며 실시간으로 로그를 스트리밍하면서 도메인을 제공합니다. 빌드가 실패하면 로그에 정확한 원인(환경 변수 누락, 잘못된 빌드 명령 등)이 표시됩니다.

자체 데이터베이스 (추가 비용 없음)

  1. Create Service → Database → Postgres(또는 다른 DB)를 선택
  2. 비밀번호를 설정하고 배포

얻는 것:

  • 자동 백업 (선택적으로 S3에)
  • CPU, 메모리, 디스크 사용량 그래프
  • 애플리케이션용 내부 네트워크 연결 문자열

관리형 데이터베이스 비용도 없고, 벤더 종속성도 없습니다—서버에 컨테이너화된 DB만 있습니다.

Domains & SSL (Actually Free)

  • 모든 앱은 자동으로 무료 traefik.me 도메인을 받습니다.
  • 맞춤 도메인을 사용하려면:
    1. 서비스 설정에서 Domains 로 이동합니다.
    2. 도메인을 추가하고 A 레코드를 서버 IP로 지정합니다.
    3. HTTPS 를 켜고 Let’s Encrypt 를 선택합니다.

Dokploy는 몇 초 만에 무료 SSL 인증서를 발급합니다. 인증서 비용도 없고 갱신 문제도 없습니다—Traefik이 자동으로 갱신을 처리합니다.

환경 변수 (비밀은 비밀로 유지)

  1. 모든 서비스 열기 → Environment 탭.
  2. 눈 아이콘을 클릭하여 편집.
  3. DATABASE_URL, API_KEY, NODE_ENV 등과 같은 변수를 추가합니다.

저장 → 재배포. 대시보드는 이 값을 암호화하고 절대 로그에 남기지 않습니다.

Monitoring Your Stuff

  • Logs 탭은 각 서비스의 실시간 출력을 스트리밍합니다.
  • Monitoring 탭은 CPU, 메모리, 디스크 및 네트워크 사용량 그래프를 표시합니다.

Real DevOps vibes, but readable.

대시보드가 나머지 모든 것을 처리합니다

  • 데이터베이스 백업 보기
  • 배포 기록 확인
  • 두 번째 서버를 추가하고 앱을 노드에 분산
  • 어느 배포가 문제를 일으켰는지 검사 (로그를 통해)

초기 설치 후에는 서버에 SSH로 접속할 일이 거의 없습니다—모든 것이 UI 기반이며 합리적입니다.

Docker Compose 지원 (때때로 필요할 때)

이미 docker‑compose.yml 파일이 있다면:

  1. 서비스에 dokploy 네트워크를 추가합니다.
  2. 라우팅을 위한 Traefik 라벨을 추가합니다.
  3. 대시보드를 통해 파일을 업로드합니다.

Dokploy는 컴포즈 파일을 직접 배포하여 동일한 대시보드 경험을 유지합니다.

문제가 발생했을 때

  • 도메인이 작동하지 않나요?

    • 방화벽에서 포트 80443이 열려 있는지 확인하세요.
    • DNS A 레코드가 서버를 가리키는지 확인하세요.
    • 전파가 완료될 때까지 1분 정도 기다리세요.
  • 앱이 배포되지 않나요?

    • 로그를 확인하세요. 일반적인 문제: 환경 변수 누락, 잘못된 빌드 명령, 잘못된 Dockerfile.
  • SSL 인증서가 멈췄나요?

    • 포트 80이 접근 가능해야 합니다; Let’s Encrypt가 검증에 사용합니다.
# Server is slow?

Building applications uses a ton of RAM and CPU and can freeze your whole server.  
If this happens, build your Docker image in CI/CD and push to a registry instead.

실제 이야기: 왜 이게 승리하는가

You’re paying $5‑10/month for the server. That’s it. You can run:

  • 5개의 웹 앱
  • 3개의 데이터베이스
  • 캐시 레이어
  • 자동 백업

— 모두 하나의 대시보드에서, 모두 당신이 소유합니다.

Compare that to:

  • Vercel – 당신은 아무것도 소유하지 않습니다.
  • Heroku – 확장할 때 가격이 급격히 상승합니다.
  • 직접 구축 – 정신을 파괴하는 DevOps 토끼굴.

Dokploy has:

  • GitHub에서 26,000+ 스타 보유
  • 수백만 건의 다운로드
  • 전 세계 개발자들의 신뢰

It’s not a sketchy side project; it’s production‑ready. -> 이것은 신뢰할 수 없는 사이드 프로젝트가 아니라, 프로덕션 준비가 된 제품입니다.

다음 단계

  1. VPS를 임대하세요 (Hetzner, OVH Cloud, 또는 다른 제공업체).
  2. 설치 명령을 실행하세요.
  3. 계정을 생성하세요.
  4. 첫 번째 앱을 배포하세요.
  5. 작동하는 모습을 확인하세요.

총 소요 시간: 30 분
총 비용: $5

Heroku로 돌아가지 않을 겁니다.

Back to Blog

관련 글

더 보기 »

Kiro: 즉시 금융 및 비용 추적

![Kiro용 표지 이미지: Instant Finance & Expense Tracking](https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/h…)