Coolify와 Claude Code: 내 VPS에 프로젝트 배포하기
MarkdownClaude Code MCP 설정 파일 위치는 프로젝트 루트의 .mcp.json입니다. Coolify 설치, GitHub 연결, Next.js 배포, 도메인과 HTTPS, VPS 요구 사항 및 문제 해결을 설명합니다.
전체 글 읽기
Ailoot 문서 — 서비스를 이용하기 위한 참고 자료입니다.
2026년 플랫폼 제한 및 결제 조건
핵심 요점
무료 요금제는 한도를 처음 초과할 때까지 사용할 수 있습니다. 그 이후에는 해외 결제가 가능한 카드가 필요합니다. Heroku는 2022년에 모든 사용자에게 무료 티어를 종료했고, 2026년 2월 유지보수 모드에 들어갔습니다. Coolify를 직접 호스팅하면 서버는 여러분의 소유이며, 좌석별 과금도 벤더 종속도 없습니다.
2026년에 흔히 볼 수 있는 바이브 코더의 상황은 이렇습니다. 저녁에 Cursor나 Claude Code로 MVP를 만들고, GitHub 저장소에 올린 다음, vercel.com을 열어 저장소를 연결하고 구독 화면에 도달해 카드 정보를 입력하면 Transaction declined가 뜹니다.
이것은 버그도 일시적인 서비스 중단도 아닙니다.
Railway, Render, Heroku도 사정은 같습니다. Heroku는 실제로 2022년에 모든 사용자에게 무료 티어를 종료했고, 2026년 2월에는 프로젝트가 유지보수 모드에 들어갔습니다. 새로운 기능도, 새로운 Enterprise 계약도 없습니다. 지원되지 않는 카드를 사용하는 사람에게 이는 “문이 닫혔으니 20% 수수료를 받는 중개업체를 통해 돌아가라”는 뜻입니다.
카자흐스탄의 가상 Visa 카드 또는 기업 결제 서비스를 통해 결제할 수 있습니다. 하지만 가격에 20%가 추가되고, 거래할 때마다 30분이 더 걸리며, 결제 처리 업체가 국가 불일치를 발견해 계정이 차단될 위험도 있습니다.
원래 사례에는 Vercel Pro, Railway, Render에서의 세 가지 시도가 포함되어 있었습니다.
Coolify란 무엇이며, 셀프 호스팅 플랫폼은 어떻게 작동하나요?
핵심 요점
Coolify는 오픈 소스이며 셀프 호스팅할 수 있는 PaaS로, Heroku, Vercel, Netlify를 직접 대체할 수 있습니다. Ubuntu가 실행되는 모든 VPS에 curl 명령 하나로 설치됩니다. 내부적으로는 역방향 프록시에 Docker + Traefik을, HTTPS에 Let's Encrypt를 사용합니다. GitHub 통합, 자동 배포용 웹훅, S3 백업, 원클릭 서비스 280개 이상(PostgreSQL, Redis, MinIO)을 지원합니다. 셀프 호스팅 버전은 영구 무료이며 제한이 없습니다. GitHub에서 별 55,800개를 받았고 Apache-2.0 라이선스를 사용합니다.
Coolify는 Laravel + Docker로 구축된 오픈 소스 프로젝트로, 비어 있는 VPS를 애플리케이션 배포 플랫폼으로 바꿔 줍니다. Coolify를 한 번 설치한 다음에는 웹 인터페이스에서 나머지 작업을 모두 할 수 있습니다. GitHub를 연결하고 저장소를 선택한 뒤 Deploy를 클릭하면 됩니다.
공식 문서의 설명은 간결하고 정확합니다.
Coolify는 Heroku / Netlify / Vercel 등을 대체하는 오픈 소스 셀프 호스팅 솔루션입니다.
Coolify는 내부적으로 네 부분으로 구성됩니다.
- Laravel 12 + Livewire 3 + Tailwind v4로 구축한 웹 인터페이스 — 애플리케이션을 관리하는 대시보드입니다.
- Docker + Docker Compose — 각 애플리케이션은 다른 애플리케이션과 격리된 컨테이너에서 실행됩니다.
- 역방향 프록시(Traefik 또는 Caddy) — 들어오는 HTTP/HTTPS 트래픽을 받아 컨테이너로 라우팅합니다.
- Let's Encrypt 통합 — 모든 도메인의 SSL 인증서를 자동으로 발급하고 갱신합니다.
Coolify를 기능 면에서 Vercel과 비교할 수 있게 해 주는 주요 기능은 다음과 같습니다.
| 기능 | Vercel | Coolify |
|---|---|---|
| git push 시 자동 배포 | ✅ | ✅ (GitHub 웹훅 사용) |
| 무료 HTTPS | ✅ | ✅ (Let's Encrypt) |
| PR 미리보기 배포 | ✅ | ✅ (GitHub App 사용) |
| 환경 변수 UI | ✅ | ✅ |
| 데이터베이스 백업 | ❌ (자체 데이터베이스 없음) | ✅ (S3 호환 스토리지로) |
| PostgreSQL / Redis / MongoDB | 월 $20+ 각각 | ✅ 원클릭, 무료 |
| 예약 작업(cron) | ❌ | ✅ (cron 구문) |
| 좌석별 과금 | 좌석당 월 $20 | 없음 |
| 벤더 종속 | 높음 (Edge Functions, ISR) | 없음 (내 Docker) |
| 글로벌 CDN | ✅ | ❌ (내 VPS만) |
Coolify에 기본 제공되지 않는 유일한 기능은 글로벌 CDN입니다. 솔직한 답은 그렇습니다. 프로젝트가 전 세계 사용자를 대상으로 하고 미국과 유럽 사용자들의 지연 시간을 줄여야 한다면 Cloudflare를 앞단에 두세요. 정적 콘텐츠에는 무료입니다.
가격: 셀프 호스팅 버전은 영구 무료이며 애플리케이션, 서버, 배포 수에 제한이 없습니다. Coolify Cloud는 서버 2대에 월 $5, 추가 서버 한 대마다 $3에 이용할 수 있습니다. 하지만 서버 자체는 여전히 여러분의 소유이고, Coolify Cloud는 대시보드만 호스팅합니다.
최신 릴리스는 2026년 5월 18일의 v4.1.0입니다. 새로운 기능으로 베타 버전 Railpack 빌드 팩, 감사 로그, 배포 간 구성 차이 비교, 읽기 전용 네이티브 MCP 엔드포인트가 포함됩니다. 출처: GitHub 릴리스.
2026년에 Coolify용 VPS는 어떤 것을 선택해야 하나요?
핵심 요점
Coolify의 최소 요구 사항은 vCPU 2개, RAM 2 GB, SSD 30 GB, Ubuntu LTS(20.04, 22.04 또는 24.04)입니다. 이 사양의 VPS라면 바이브 코딩 프로젝트 3–5개를 동시에 여유 있게 실행할 수 있습니다.
Coolify의 최소 요구 사항은 공식 문서에 직접 나와 있습니다.
| 매개변수 | 최소 사양 | 권장 사양 |
|---|---|---|
| CPU | 코어 2개 | 코어 2–4개 |
| RAM | 2 GB | 4 GB (빌드 여유 공간 포함) |
| 스토리지 | 30 GB | 50–80 GB (이미지 + 데이터베이스용) |
| 아키텍처 | AMD64 또는 ARM64 (64비트) | AMD64 |
| OS | Ubuntu LTS 20.04 / 22.04 / 24.04 | 22.04 LTS |
| Root | 필수 | 비밀번호 대신 SSH 키 사용 |
최소 사양인 RAM 2 GB는 절대적인 하한선입니다. 1 GB에서는 설치 프로그램이 Docker 단계까지 진행한 뒤 OOM(메모리 부족)을 만나 멈춥니다. RAM을 아끼지 마세요.
가격 출처: Timeweb Cloud, FirstVDS, Selectel.
더 높은 성능이 필요하다면(100 GB 데이터베이스, 여러 Postgres 인스턴스) Aeza Dedicated를 선택하세요.
선택하면 안 되는 항목:
- RAM 512 MB–1 GB의 공유 VPS — Coolify를 실행하기에도 부족합니다. PaaS용이 아니라 nginx에서 정적 사이트를 호스팅하기 위한 사양입니다.
배포 설정뿐 아니라 Claude를 안정적으로 만드는 설정도 구축하고 싶으신가요? Coolify는 실행 도구이지만 구조화된 컨텍스트(CLAUDE.md, 세컨드 브레인, 컨텍스트 엔지니어링)가 없으면 Claude는 긴 작업에서 계속 환각을 일으킵니다. 완전한 구성에는 세 가지가 모두 포함됩니다. AI 클론 + 세컨드 브레인 + 컨텍스트 엔지니어링 — 이 조합은 Claude를 “환각하는 도우미”에서 신뢰할 수 있는 도구로 바꿔 줍니다.
5분 만에 Coolify 설치하기
핵심 요점
설치에는 문서에 나온 curl 명령 하나를 사용합니다. 설치가 시작되면 포트 8000에서 웹 인터페이스가 나타납니다. 여기서 첫 관리자 사용자를 만들면 빈 대시보드가 표시됩니다. 비어 있는 Ubuntu 설치부터 Coolify 실행까지 실제로 걸리는 시간은 5–7분이며, 이 중 3–4분은 apt-get install docker에 소요됩니다. 스크립트가 필요한 종속 항목을 가져오고 Docker를 직접 구성하므로, 완료될 때까지 기다리면 됩니다.
1단계. SSH로 VPS에 연결합니다.
VPS 제공업체에서 서버를 만든 뒤 이메일이나 제어판에서 서버 IP 주소와 root 비밀번호를 확인합니다. 로컬 컴퓨터에서 연결합니다.
ssh root@1.2.3.4
제공업체가 비밀번호 대신 SSH 키를 제공했다면 -i path/to/key로 연결합니다. 이제부터는 새로 설치한 Ubuntu 22.04 또는 24.04 LTS를 사용한다고 가정합니다.
2단계. Coolify 설치 명령을 실행합니다.
공식 문서에 나온 명령 하나를 실행합니다.
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
스크립트는 세 가지 작업을 수행합니다.
- 시스템을 확인합니다(Ubuntu LTS인가? root인가? AMD64인가?).
- Docker와 Docker Compose가 설치되어 있지 않으면 설치합니다.
- Coolify 이미지(
coolify/coolify,coolify/realtime,traefik)를 다운로드하고 docker-compose를 통해 백그라운드에서 실행합니다.
3–5분이 걸립니다. apt-get 로그가 표시된 뒤 docker pull 로그가 이어집니다. Coolify v4.1.0 is now running이 표시되면 3단계로 이동합니다.
3단계. 웹 인터페이스를 엽니다.
브라우저에서 다음 주소를 엽니다.
http://1.2.3.4:8000
Coolify에 첫 사용자를 생성하는 설정 마법사가 표시됩니다. 이메일과 비밀번호를 입력하고 저장합니다. 이 사용자는 자동으로 관리자가 되므로, 당장은 다른 사용자가 필요하지 않습니다.
저장한 뒤에는 빈 대시보드가 열립니다. 왼쪽에는 Resources / Projects / Servers / Sources / Notifications / Settings 사이드바가 있고 중앙에는 “Add your first resource”라는 안내가 표시됩니다.
4단계. 제공업체 방화벽에서 포트를 엽니다(UFW가 아닙니다).
Coolify는 이미 실행 중이지만 외부에서 접근할 수 있는 포트는 대시보드용 8000뿐입니다. 사용자가 애플리케이션에 접속할 수 있도록 포트 80(HTTP)과 443(HTTPS)을 열어야 합니다.
| 포트 | 용도 |
|---|---|
| 22 | 서버에 SSH로 접속 |
| 80 | HTTP 트래픽 수신, Let's Encrypt 검증에 필요 |
| 443 | 사용자의 HTTPS 트래픽 수신 |
| 8000 | Coolify 대시보드(대시보드에 사용자 지정 도메인을 설정한 뒤 닫을 예정) |
공식 문서에서 강조하는 중요한 주의 사항입니다.
Docker는 UFW 같은 기존 Linux 방화벽을 우회할 수 있는 NAT 기반 iptables 규칙을 사용합니다.
즉, UFW를 활성화하고 모든 포트를 닫더라도 Docker는 iptables를 통해 컨테이너를 계속 노출합니다. 여기서는 UFW가 쓸모없습니다. 해결책은 UFW가 아니라 제공업체 제어판에서 포트를 열고 닫는 것입니다. Timeweb / Selectel / Aeza에서는 웹 콘솔의 “Network → Firewall” 섹션에서 설정하면 됩니다.
5단계(선택 사항). 대시보드를 도메인에 연결합니다.
http://1.2.3.4:8000 대신 https://coolify.example.com으로 접속하려면 DNS A 레코드 coolify.example.com → 1.2.3.4를 만들고, Coolify의 Settings → Instance Settings → Instance Domain으로 이동해 서브도메인을 입력한 다음 저장합니다. Coolify가 Let's Encrypt 인증서를 요청하고 1분쯤 뒤 HTTPS로 대시보드를 다시 불러옵니다.
이후 방화벽에서 포트 8000을 닫아도 대시보드는 기본 포트 443의 HTTPS로 계속 이용할 수 있습니다.
GitHub 연결 방법: App 또는 PAT?
핵심 요점
Coolify는 GitHub 연결 방법으로 GitHub App(권장)과 Personal Access Token(PAT)을 지원합니다. GitHub App을 사용하세요. 마법사로 설정하는 데 5분이 걸리고, PR 미리보기가 작동하며, 저장소 수준에서 권한 범위를 세밀하게 지정할 수 있습니다. PAT는 레거시 사례를 위한 오래된 방법입니다. 미리보기 배포가 지원되지 않고 모든 저장소에 전역으로 접근할 위험이 있습니다. 공식 문서도 “사용자의 95%에게 GitHub App이 올바른 선택”이라고 명시합니다.
Coolify에서 Sources → + Add → GitHub App으로 이동합니다. Coolify에 세 화면으로 된 마법사가 표시됩니다.
- Name & description — 소스 이름으로
github-main을 입력하고, 필요하면 설명을 추가합니다. - Configure on GitHub — GitHub.com으로 이동해 올바른 권한이 설정된 GitHub App 생성 양식을 자동으로 여는 버튼입니다.
- Confirm — GitHub에서 돌아온 뒤 “Save”를 클릭합니다.
두 번째 단계에서 GitHub가 Coolify에서 요청하는 권한을 확인하라고 합니다.
| 권한 | 수준 | 용도 |
|---|---|---|
| Contents | 읽기 전용 | 저장소 복제 |
| Pull Requests | 읽기 및 쓰기 | 미리보기 배포를 만들고 PR에 댓글 작성 |
| Email addresses | 읽기 전용 | 커밋 식별 |
| Metadata | 읽기 전용 | 저장소 목록 확인 |
이는 최소 권한입니다. GitHub App은 개인 키를 볼 수 없고 main에 쓸 수 없으며, 명시적으로 연결하지 않은 저장소에 접근할 수 없습니다.
공식 문서에서 발췌했습니다.
Personal Access Token(PAT)은 오래된 방식이므로 사용하지 않는 것을 권합니다. 단점은 다음과 같습니다.
- PAT는 모든 저장소(비공개 저장소 포함)에 전역으로 접근할 수 있습니다.
- PR 미리보기는 GitHub App 전용 기능이므로 작동하지 않습니다.
- 토큰이 오래 유지됩니다(90일, 1년 또는 무기한). 유출되면 문제가 됩니다.
보안 정책상 GitHub App을 금지하고 다른 방법이 없는 조직 저장소에서 작업할 때만 PAT를 사용하세요.
Coolify에 소스를 저장하면 연결된 저장소 목록과 함께 대시보드에 GitHub App이 표시됩니다. 새 애플리케이션을 만들 때 목록에서 원하는 저장소를 클릭 한 번으로 선택할 수 있습니다.
Claude Code의 Next.js 프로젝트를 6단계로 배포하기
핵심 요점
Claude Code를 처음 실행하는 순간부터 사이트가 작동하기까지의 전체 과정은 다음과 같습니다. 1) 빈 폴더에서 claude를 실행하고 프로젝트를 설명하면 Claude가 코드를 생성합니다. 2) git init && git remote add를 실행합니다(Claude가 슬래시 명령으로 직접 처리할 수도 있습니다). 3) GitHub에 푸시합니다. 4) Coolify에서 “+ New Resource → Application”을 선택하고 저장소를 고릅니다. 5) 환경 변수를 추가합니다. 6) Deploy를 클릭합니다. Coolify는 Next.js임을 감지하고 Nixpacks 빌드 팩을 선택해 3–5분 만에 Docker 이미지를 빌드한 뒤, 기본적으로 HTTPS가 적용된 임시 도메인을 제공합니다.
1단계. 빈 폴더에서 Claude Code에 프로젝트를 설명합니다.
mkdir my-vibe-app
cd my-vibe-app
git init
claude
세션에서 다음과 같이 입력합니다.
Build a Next.js 14 app router project:
- a home page with a list of users
- /api/users endpoint returns an array from the database
- Postgres via Prisma
- Tailwind for styles
- .env.example with DATABASE_URL
- README.md with instructions for running the project
Claude가 파일 구조, package.json, prisma/schema.prisma, .env.example을 생성합니다. 다음도 요청하세요.
Create a Dockerfile for production builds and a .dockerignore.
선택 사항입니다. Dockerfile이 없어도 Coolify는 Nixpacks로 빌드할 수 있습니다. 하지만 Dockerfile을 사용하면 빌드 과정을 제어할 수 있고 큰 프로젝트에서는 더 빠릅니다.
2단계. GitHub 저장소를 만들고 푸시합니다.
GitHub UI에서 직접 git remote add origin ...을 실행해도 되지만, Claude Code가 대신할 수도 있습니다.
/commit-push-pr Initial Next.js app generated with Claude Code
또는 다음과 같이 말하면 됩니다. “모든 항목을 커밋하고 내 계정에 my-vibe-app이라는 새 저장소를 만들어 푸시해.” Claude는 gh CLI를 사용해 비공개(또는 공개) 저장소를 만들고 첫 푸시를 수행합니다. 출처: 공식 Claude Code 명령.
3단계. Coolify에서 Application을 만듭니다.
Coolify 대시보드에서 + New → Application을 클릭합니다. 양식이 열립니다.
- Source —
github-main을 선택합니다(이전 H2에서 연결한 GitHub App). - Repository — 목록에서
my-vibe-app을 선택합니다. - Branch —
main을 선택합니다. - Build Pack — Coolify가 자동으로 감지합니다. Dockerfile이 있으면
dockerfile을 사용하고, 없으면nixpacks를 사용합니다. 직접 지정할 수도 있습니다. - Domain — 우선 제안된 값을 그대로 둡니다. 임시 값이므로 나중에 직접 만든 도메인으로 바꾸면 됩니다.
- Port — Next.js의 기본값인
3000을 사용합니다.
저장합니다.
4단계. 환경 변수를 추가합니다.
생성한 애플리케이션에서 Environment Variables 탭을 엽니다. 다음 변수를 하나씩 추가합니다.
DATABASE_URL=postgresql://user:pass@db-host:5432/mydb
NODE_ENV=production
ANTHROPIC_API_KEY=sk-ant-...
데이터베이스가 없다면 Coolify에서 직접 만들 수 있습니다. + New → Database → PostgreSQL로 이동합니다. Coolify가 30초 만에 Postgres 컨테이너를 실행하고 postgresql://postgres@postgres-xyz:5432/postgres 형식의 내부 DATABASE_URL을 제공합니다. 이를 애플리케이션에 입력합니다.
모든 변수는 Coolify 데이터베이스에서 암호화되며 빌드 로그에 표시되지 않습니다.
5단계. Deploy를 클릭합니다.
오른쪽 위에 파란색 Deploy 버튼이 있습니다. 실시간 로그는 Logs 탭에 표시됩니다.
[stage: clone] Cloning '<repository-url-from-github>'
[stage: build] Detected Next.js, using Nixpacks
[stage: build] Installing Node 20, npm 10
[stage: build] npm install (245s)
[stage: build] npm run build (87s)
[stage: deploy] Creating container my-vibe-app-xyz
[stage: deploy] Container started, health check passed
[stage: proxy] Traefik routing configured for temporary domain
[stage: ssl] Let's Encrypt cert issued for temporary domain
첫 빌드는 Node 기본 이미지를 가져오고 종속 항목을 설치하느라 3–5분 걸립니다. Docker 레이어 캐싱 덕분에 이후 빌드는 60–90초 걸립니다.
상태가 Running으로 바뀌면 Coolify의 Domains에 표시된 애플리케이션 URL을 복사해 정확히 그 주소를 여세요. 아래에서는 <app-url-from-coolify>로 표시하며 실제 주소가 아닌 자리표시자입니다. 기본적으로 HTTPS가 적용된 홈페이지가 표시됩니다. 무료 와일드카드 DNS 서비스는 IP 주소가 포함된 서브도메인을 해당 IP로 연결합니다(1-2-3-4.example → 1.2.3.4). Coolify는 자체 DNS를 설정하지 않아도 바로 사이트를 열 수 있도록 임시 도메인에 이 서비스를 사용합니다.
6단계. 모든 것이 작동하는지 확인합니다.
앞 단계의 앱 URL에 /api/users를 붙여 <app-url-from-coolify>/api/users를 여세요. 슬래시를 중복하지 마세요. 1단계에서 만든 JSON 엔드포인트이며 루트 URL은 홈페이지입니다. 500 오류가 발생하면 Logs 탭에서 스택 추적을 확인할 수 있습니다. 첫 배포에서 가장 흔한 문제는 DATABASE_URL이 존재하지 않는 데이터베이스를 가리키는 것입니다. Coolify에서 PostgreSQL 인스턴스를 만들고(위 4단계 참조) DATABASE_URL을 바꾸면 해결됩니다.
VPS를 주문한 시점부터 15분입니다. 원래 사례에서 이 과정은 새 서버에서 12–18분 걸렸습니다.
사용자 지정 도메인과 HTTPS 설정하기
핵심 요점
사용자 지정 도메인 연결은 3단계입니다. 서버 IP를 가리키는 DNS A 레코드를 만들고, Coolify 설정에서 임시 도메인 대신 도메인을 입력한 다음 Automatic HTTPS를 활성화하고 Redeploy를 클릭합니다. DNS 전파 후 2–3분이면 Let's Encrypt가 SSL 인증서를 자동으로 발급합니다(DNS 전파에는 보통 5–30분이 걸립니다). 중요한 조건은 Redeploy를 클릭할 때 DNS가 이미 해당 IP로 해석되어야 한다는 것입니다. 그렇지 않으면 Let's Encrypt 검증이 실패하고 다음 시도까지 12분을 기다려야 합니다.
1단계. 도메인 등록 업체의 제어판에서 DNS A 레코드를 만듭니다.
원래 예시에서는 Reg.ru, Beget 또는 Timeweb에서 호스팅하는 도메인을 사용합니다. 절차는 같습니다.
| 레코드 유형 | 이름 | 값 |
|---|---|---|
| A | app (또는 루트 도메인의 경우 @) | 1.2.3.4 (서버 IP) |
저장한 뒤 콘솔을 열어 확인합니다.
dig app.example.com +short
# Should return 1.2.3.4
아무것도 반환되지 않거나 다른 IP가 나오면 DNS 전파가 아직 완료되지 않은 것입니다. 5–30분 기다립니다.
2단계. Coolify에 도메인을 입력합니다.
애플리케이션에서 Configuration → General 탭을 엽니다. Domains의 Coolify 임시 앱 URL을 https://app.example.com으로 바꾸되 자신의 설정한 도메인을 쓰세요. Automatic HTTPS를 활성화합니다(보통 기본적으로 활성화되어 있습니다).
저장한 뒤 Redeploy를 클릭합니다.
3단계. Let's Encrypt 인증서를 기다립니다.
빌드 로그에 다음이 표시됩니다.
[stage: ssl] Requesting Let's Encrypt cert for app.example.com
[stage: ssl] HTTP challenge sent to /.well-known/acme-challenge/xxx
[stage: ssl] Validation passed, cert issued
[stage: ssl] Cert installed, HTTPS enabled
2–3분 뒤 주소 표시줄에 녹색 자물쇠가 표시되고 https://app.example.com에서 사이트에 접속할 수 있습니다.
Let's Encrypt에서 문제가 발생할 수 있는 경우(공식 문제 해결 가이드에 나온 주요 3가지):
- 방화벽에서 포트 80이 닫혀 있습니다. Let's Encrypt는 HTTP 챌린지로 검증합니다.
http://app.example.com/.well-known/acme-challenge/xxx로 요청을 보냅니다. 포트 80이 없으면 검증이 통과하지 못합니다. 제공업체 방화벽에서 포트를 여세요. - Cloudflare 프록시가 활성화되어 있습니다(주황색 구름). 프록시가 Let's Encrypt 요청을 가로채 자체 안내 페이지를 반환하므로 검증이 실패합니다. 해결책은 “DNS only”(회색 구름)로 전환하거나 Cloudflare API를 통해 DNS-01 챌린지를 설정하는 것입니다.
- DNS 전파가 아직 완료되지 않았습니다. 30초 전에 A 레코드를 만들고 바로 Redeploy를 클릭했다면 Let's Encrypt가 도메인을 찾지 못합니다. 서버들 사이에서 DNS가 전파될 때까지 5–30분 기다립니다.
Let's Encrypt의 요청 제한은 도메인 하나당 시간당 실패 5회이며, 12분마다 1회씩 제한이 풀립니다. 한도에 도달하면 Redeploy를 10번 연속 클릭하지 말고 로그를 확인해 문제를 해결한 뒤 12분 후 다시 시도하세요.
Claude Code MCP JSON 설정: Coolify 연결 예제
핵심 요점
Model Context Protocol을 통해 Claude Code가 Coolify API에 직접 접근합니다. “이 애플리케이션을 배포해”라고 말해 빌드를 시작하고, 상태를 확인하고, 로그를 읽거나 환경 변수를 업데이트할 수 있습니다. 세 가지 옵션이 있습니다. forsonny/Coolify-MCP-Server(기본 기능, 작업 범주 7개), dazeb/coolify-mcp-enhanced(추가 도구 15개 이상, 원클릭 데이터베이스 배포), ajmcclary/Coolify-Manager(공식 CLI를 기반으로 만든 Claude Skill)입니다. v4.1.0(2026년 5월 18일)부터 Coolify는 서드파티 서버 없이 사용할 수 있는 네이티브 MCP 엔드포인트를 제공합니다. 다만 현재는 읽기 전용입니다.
Model Context Protocol(MCP)은 Claude Code가 외부 시스템과 통신할 수 있게 해 주는 Anthropic의 표준입니다. 자세한 내용은 MCP 서버 가이드를 참조하세요. MCP 서버를 연결하면 Claude가 호출할 수 있는 도구 모음이 제공됩니다. Coolify에는 이미 만들어진 서버 세 개와 네이티브 옵션 하나가 있습니다.
옵션 1. forsonny/Coolify-MCP-Server-for-Claude-Code — 기본형.
가능한 작업:
- 애플리케이션: 생성, 시작, 중지, 재시작
- 서비스: 목록 확인, 생성, 시작/중지/재시작
- 배포: 실행 중인 배포 확인, UUID로 가져오기
- 팀 및 구성원: 목록 확인, 정보 가져오기
- SSH 키: 목록 확인, 생성
- 환경 변수: 앱 및 서비스의 전체 CRUD
- 서버 인사이트: 서버별 도메인, 상태, 버전
설치 방법:
git clone '<OFFICIAL_URL>'
cd Coolify-MCP-Server-for-Claude-Code
npm install
npm run build
# In .env:
# COOLIFY_BASE_URL=https://coolify.example.com
# COOLIFY_API_TOKEN=[from Coolify Settings → API Tokens]
npm run setup # automatically configures Claude Code
그다음 Claude Code에 다음과 같이 입력할 수 있습니다.
Show the status of the my-vibe-app application in Coolify and the 3 latest deployments.
Claude가 표를 반환합니다.
옵션 2. dazeb/coolify-mcp-enhanced — 확장형(권장).
기본 세트에 추가되는 기능:
- PostgreSQL / Redis / MinIO 원클릭 배포 — AI에 “Postgres를 설정해 줘”라고 요청하면 컨테이너를 만들고 DATABASE_URL을 반환합니다.
- 실시간 모니터링 + 리소스 사용량 — 애플리케이션별 CPU/RAM을 실시간으로 확인합니다.
- 환경 구성 일괄 업데이트 — 명령 하나로 변수 20개를 업데이트합니다.
- Docker Compose 지원 — 여러 서비스로 구성된 애플리케이션을 배포합니다.
Claude Code용 구성(.mcp.json, 프로젝트 루트에 위치):
{
"mcpServers": {
"coolify-enhanced": {
"command": "node",
"args": ["/path/to/coolify-mcp-enhanced/dist/index.js"],
"env": {
"COOLIFY_ACCESS_TOKEN": "your-token-here",
"COOLIFY_BASE_URL": "https://coolify.example.com"
}
}
}
}
옵션 3. ajmcclary/Coolify-Manager — CLI 기반 Claude Skill.
MCP 서버는 아니지만 공식 Coolify CLI를 감싸는 Claude Code Skill입니다. 다음 기능이 포함됩니다.
- 서비스와 컨테이너 상태 진단
- SSL 인증서 진단
- 여러 Coolify 서버를 사용하는 경우의 다중 인스턴스 지원
- 문제 해결 레시피
설치 방법: Skill을 다운로드해 ~/.claude/skills/coolify-manager/에 넣습니다. Claude Code가 이를 감지해 관련 작업에서 사용할 수 있도록 제안합니다.
옵션 4(2026년 5월 추가). Coolify v4.1.0의 네이티브 MCP.
2026년 5월 18일자 v4.1.0 변경 기록에는 다음과 같이 나와 있습니다.
Coolify 리소스와 API/UI용 읽기 전용 도구를 제공하는 인스턴스 수준 MCP 지원을 추가했습니다.
이제 Coolify 자체 MCP 엔드포인트를 통해 서드파티 서버 없이 Claude Code를 직접 연결할 수 있습니다. 현재는 읽기 전용(애플리케이션 목록, 상태, 구성)이며 수정 작업은 지원하지 않습니다. 하지만 “인프라에 대해 알려줘”와 같은 대부분의 작업에는 충분합니다.
.mcp.json을 통해 연결합니다.
{
"mcpServers": {
"coolify-native": {
"url": "https://coolify.example.com/api/v1/mcp",
"headers": {
"Authorization": "Bearer <your-api-token>"
}
}
}
}
네이티브 MCP의 전체 쓰기 권한은 v4.2 또는 v4.3을 기다려야 합니다. Coolify 팀은 2026년 말까지 제공하겠다고 약속했습니다.
첫 배포에서 흔히 겪는 문제 5가지와 해결 방법
핵심 요점
첫 배포에서 가장 흔한 오류는 RAM 부족, 포트 80 닫힘, Cloudflare 프록시로 인한 Let's Encrypt 오류, Docker를 막지 못하는 UFW, GitHub App 대신 PAT를 선택하는 것입니다. 모두 공식 문서에 나와 있지만 직접 경험이 없으면 쉽게 마주칠 수 있습니다. 아래는 Coolify를 처음 설치한 경험을 바탕으로 만든 5개 항목 체크리스트입니다.
문제 1: RAM 2 GB 미만 — OOM으로 설치 실패.
증상: curl install.sh가 docker pull coolify/coolify까지 진행되고 70%에서 멈춘 뒤 Killed (signal 9)와 함께 프로세스가 종료됩니다. dmesg | tail 로그에는 Out of memory: Killed process가 표시됩니다.
해결 방법:
# Create a 4 GB swap file to solve the problem temporarily
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
장기적으로는 RAM 4 GB로 업그레이드하세요. Coolify는 스왑을 사용해 작동하지만 큰 Next.js 프로젝트 빌드는 실패할 수 있습니다.
문제 2: UFW가 활성화되어 있지만 Docker가 여전히 포트를 엽니다.
증상: UFW를 활성화하고 22를 제외한 모든 포트를 닫았는데도 애플리케이션이 3000처럼 임의의 포트에서 인터넷을 통해 접속 가능합니다.
공식 문서에 나와 있는 원인은 다음과 같습니다.
Coolify는 NAT 기반 iptables 규칙을 사용해 UFW 같은 기존 Linux 방화벽을 우회할 수 있는 Docker에서 실행됩니다.
해결 방법: UFW가 아니라 제공업체 제어판의 방화벽을 사용하세요. Timeweb / Selectel / Aeza에는 가상 네트워크 수준에서 규칙을 설정하는 “Firewall” 또는 “Network → Firewall” 섹션이 있습니다. 이 규칙은 패킷이 Docker에 도달하기 전에 적용됩니다.
대안으로 Docker와 호환되도록 UFW를 패치하는 스크립트 ufw-docker를 사용할 수 있습니다. 하지만 제어판에서 클릭 몇 번 하는 것보다 복잡합니다.
문제 3: Cloudflare 프록시(주황색 구름)로 Let's Encrypt가 작동하지 않습니다.
증상: Redeploy 후 로그에 Let's Encrypt validation failed - challenge returned 403이 표시됩니다.
원인: Cloudflare가 Let's Encrypt의 HTTP 요청을 프록시하고 챌린지 파일 대신 자체 페이지를 반환합니다.
해결 방법 — 다음 두 가지 중 하나를 선택합니다.
- “DNS only”로 전환합니다(Cloudflare의 회색 구름). 단점은 Cloudflare CDN과 보호 기능을 잃는다는 점입니다.
- Cloudflare API를 통해 DNS-01 챌린지를 설정합니다. Coolify에서 Settings → SSL Configuration으로 이동해 Cloudflare 제공업체를 선택하고 Zone:Read 및 DNS:Edit 권한이 있는 API 토큰을 입력합니다. Let's Encrypt는 HTTP 대신 TXT 레코드로 검증합니다.
두 번째 방법은 설정이 더 복잡하지만 Cloudflare 프록시는 유지됩니다.
문제 4: GitHub App 대신 PAT를 사용하면 PR 미리보기가 작동하지 않습니다.
증상: Personal Access Token으로 GitHub를 연결해 모든 것이 작동하지만, PR 미리보기는 생성되지 않습니다. GitHub에서 PR을 열었는데 Coolify에 아무것도 나타나지 않습니다.
원인: PR 미리보기는 GitHub App 전용 기능입니다. PAT는 웹훅을 통해 pull_request 이벤트를 받지 않습니다.
해결 방법: App을 통해 GitHub를 다시 연결합니다. Sources → Add → GitHub App으로 이동해 마법사를 완료합니다. 기존 PAT 소스는 삭제해도 됩니다.
문제 5: “Coolify == Vercel”은 완전히 맞는 말이 아닙니다.
Coolify가 기본적으로 지원하지 않는 기능은 다음과 같습니다.
| Vercel | Coolify | 조치 |
|---|---|---|
| 글로벌 CDN | 없음 | Cloudflare를 앞단에 둡니다(정적 콘텐츠는 무료). |
| 증분 정적 재생성 | 없음 | revalidatePath는 내 서버에서만 작동합니다. |
| 이미지 최적화 | 없음 | 로컬 로더 또는 Cloudflare Images와 함께 next/image를 사용합니다. |
| 트래픽 급증 시 자동 확장 | 없음 | 직접 확장하거나 VPS를 업그레이드합니다. |
| Edge Functions | 없음 | 일반 API 경로를 사용합니다. |
프로젝트가 전 세계 사용자를 대상으로 하고 지연 시간 요구 사항이 전 세계에서 < 100 ms인 트래픽 많은 SaaS라면 Coolify는 적합하지 않습니다. Vercel Enterprise를 선택하세요. 하루 100–1,000명의 사용자에게 MVP를 시험하는 바이브 코더라면 Coolify로 충분합니다.
솔직한 셀프 호스팅 분석에서 발췌했습니다.
이 가이드 제목의 15분은 단일 프로젝트를 처음 배포하는 빠른 경로를 뜻합니다. 모니터링, 백업, 알림을 포함해 인프라 전체를 설정하려면 저녁 한두 번이 걸립니다. 솔직하게 판단하세요.
Vercel과 비교해 1년에 얼마나 절약할 수 있나요?
핵심 요점
초기 설정에 5–10시간, 유지 관리에 매달 1–2시간이 드는 “숨은 시간 비용”이 있습니다.
아래 Vercel 금액은 2026년 5월 시나리오 추정이며 현재 견적이 아닙니다. 자체 호스팅 Coolify는 라이선스 비용이 없지만 VPS, 백업, 저장 공간, 트래픽, 운영에는 비용이 듭니다. 앞 요건을 충족하는 실제 견적을 받으세요. 숫자로 된 VPS 가격이 없어 고정 절감액을 주장할 수는 없습니다.
C는 선택한 VPS, 백업 저장 공간, 추가 트래픽, 관측, 유료 대시보드의 월 인프라 합계이며 각 비용을 한 번만 넣으세요. r은 같은 통화의 시간당 운영 비용입니다. 글의 초기 5–10시간과 월 1–2시간은 첫해 17–34시간, 이후 12–24시간입니다.
| 시나리오 | Vercel 월 추정 | 연간 | Coolify 월 인프라 | 노동 포함 첫해 TCO | 첫해 절감 |
|---|---|---|---|---|---|
| 프로토타입 하나, 월 100,000방문 | $20 + 약 $5 = $25 | $300 | C | 12C + (17–34)r | $300 − 12C − (17–34)r |
| VPS 하나, 프로젝트 다섯 | $20 + $30 = $50 | $600 | C | 12C + (17–34)r | $600 − 12C − (17–34)r |
| 개발자 셋, 프로젝트 다섯 | $60 + $30 = $90 | $1,080 | C | 12C + (17–34)r | $1,080 − 12C − (17–34)r |
서버 규모가 다르면 시나리오별 C를 쓰세요. 첫해 월 환산은 C + (17–34)r/12, 이후 연 TCO는 12C + (12–24)r입니다. Vercel 쪽의 비교 가능한 운영 비용도 포함하세요. 절감액이 음수면 해당 입력에서 자체 호스팅이 더 비쌉니다. r에 인건비가 포함됐으면 전체 연봉을 다시 더하지 마세요.
전환 전 실제 견적과 백업 계획으로 C를 채우고 r을 정해 한 달 실제 사용을 비교하세요. 이 입력 없이는 비용 모델만 제공하며 달러 절감 주장은 아닙니다.
실제 운영 중인 비즈니스 앱 사례입니다.
가장 큰 이점은 비용이 아닙니다. Coolify로 옮기면 “다른 업체의 결제 정책에 의존”하는 범주가 사라집니다. 수수료 20%를 내는 가상 중개 카드가 더는 필요하지 않습니다.
Coolify는 더 저렴한 Vercel이 아닙니다. 제품 범주가 다릅니다. 인프라를 소유하고 책임을 지며, 복잡성을 감수하는 대신 비용을 절약합니다.
Claude Code로 생성한 뒤 프로토타입을 배포하는 일이 첫 번째 과제라면, 환경 관리(env, 비밀 정보, 예약 작업, 백업)는 컨텍스트 엔지니어링의 일부입니다. 모든 것이 어디에 있는지 정하는 구조가 없으면 Claude는 길을 잃고 변경할 때마다 시간을 낭비합니다. 완전한 구성에는 다음이 포함됩니다. AI 클론(방법론에 맞춘 Skills 및 Subagents) + 세컨드 브레인(프로젝트 지식 베이스) + 컨텍스트 엔지니어링(Plan Mode, /compact, 실행 환경). 이것이 없으면 AI가 환각을 일으키는 세 가지 기둥입니다.
출처
전체 컨텍스트 워크플로: AI 클론 + 세컨드 브레인 + 컨텍스트 엔지니어링.
더 많은 자료는 Ailoot에서 확인할 수 있습니다.
자세히 보기
Coolify와 Claude Code: 내 VPS에 프로젝트 배포하기: 자주 묻는 질문
배포 후 어느 URL이 JSON을 반환해야 하나요?
Coolify Domains의 앱 URL을 복사해 /api/users 경로를 여세요. 루트는 홈페이지이고 /api/users가 예시 프로젝트의 JSON 엔드포인트입니다.
자체 호스팅이 절약되는지 어떻게 계산하나요?
월 VPS, 백업, 저장 공간, 트래픽, 관측, 대시보드를 C로 더하세요. 첫해 TCO는 12C와 시간당 비용으로 계산한 17–34시간입니다. Vercel 연 추정과 비교하며 양쪽 운영 비용을 포함하세요.