- Published on
[홈서버] 홈서버에 vercel 호스팅하기.
- Authors

- Name
- MJ
홈서버에 vercel 호스팅하기
Open Source Alternative to Vercel, Netlify and Heroku.
Dokploy는 Vercel 같은 호스팅 서비스를 대체할 수 있는 오픈소스 호스팅 프로젝트에요. 저는 홈서버를 구축하고 있고, 외부 IaaS(Infrastructure as a Service)를 사용하면 추가 비용 + 관리에 대한 비용이 들기 때문에 되도록 사용을 지양하는 편이에요.
하지만, 홈서버에서 어떤 서비스를 빌드하고 배포하는 작업도 굉장히 많은 노력이 들어가요.
간단하게 Next.js 앱을 빌드하고 배포하는 작업을 상상해보면,
- nginx 설정(SSL)과 도메인 설정
- 서비스 빌드(자동화하려면 웹훅 추가해야 함)
- 모니터링(Prometheus, Grafana)
이 작업을 매번 CLI에서 해야 했고, 어디서 한 번 에러가 발생하면 매번 찾아서 수정해야 했어요. 자동화를 위한 자동화를 하기 위해서 새로운 플랫폼을 사용해보기로 했어요.
Dokploy Vercel의 오픈소스 대체제
Dokploy는 Vercel의 오픈소스 대체제에요. 서비스 배포부터, 모니터링 관리까지 완벽하게 지원해요.
기존에는 하나의 PC에서 여러 프로세스를 관리하기 위해서 노력을 했다면, Dokploy를 사용하면 여러 대의 PC에서 프로세스를 관리할 수 있고, 더 안정적으로 서비스를 운영할 수 있어요. (Dokploy만 관리해주면 됨)
초보자를 위한 핵심 개념 정리
본격적으로 시작하기 전에, Dokploy를 사용하기 위해 Docker에 대한 개념을 알아야 해요.
Docker 관련 용어
| 용어 | 한 줄 요약 | Git에 비유 |
|---|---|---|
| Docker Image | 앱을 실행하기 위한 모든 것이 담긴 패키지 | 특정 시점의 커밋 스냅샷 |
| Docker Container | 이미지를 실행한 프로세스 | |
| Docker Registry | 이미지를 저장하고 공유하는 창고 | 원격 저장소 (GitHub/GitLab) |
| Docker Swarm | 여러 컴퓨터를 하나처럼 관리하는 오케스트레이터 | |
| Dokploy | Docker 앱을 웹 UI로 쉽게 배포/관리하는 도구 | Vercel + GitHub Actions 조합 |
위 단어에 대해서만 알고 있어도, Dokploy를 사용하는데 큰 어려움이 없어요.
우리가 만들 시스템의 흐름
Dokploy는 Linux 기반의 OS에서만 사용할 수 있어요.
저는 Mini PC와 Mac Mini를 사용해서 시스템을 구축할 거에요.
- Mini PC는 Ubuntu OS이기 때문에 Docker Swarm의 매니저 노드로 사용할 거에요.
- Mac Mini는 상대적으로 성능이 좋기 때문에 Docker Swarm의 워커 노드로 사용할 거에요.
- 두 Node가 하나의 클러스터를 이루고
- 빌드된 이미지를 Registry에 저장하고
- Docker Swarm이 노드를 선택하고
- Mini PC/Mac Mini에서 실행하고
- Dokploy가 이 모든 과정을 웹 UI로 관리해요.
이제 설정을 진행해볼게요.
Dokploy 설정
Step 1: Dokploy와 Docker Registry 설치
먼저 Mini PC에 Dokploy를 설치합니다. Dokploy는 내부적으로 Docker Swarm을 사용하기 때문에 자동으로 Swarm 모드가 활성화됩니다.
curl -sSL https://dokploy.com/install.sh | sudo bash
설치가 완료되면 http://localhost:3000으로 접속할 수 있습니다.

원하는 도메인으로 접속하고 싶으면 Dokploy의 왼쪽 설정에서 Settings > Web Server의 Server Domain을 지정해주면 돼요. (자동으로 SSL 인증서까지 설정됩니다.)
Step 2: Docker Registry 구축
Dokploy에서 배포할 첫 번째 애플리케이션은 Docker Registry에요.
- Project > Create Project를 클릭하고, Project Name을 지정합니다.
- 해당 Project에서 Create Service를 클릭하고, Template을 선택해요.
- Search Template 검색창에서 Docker Registry를 검색해요.
- Docker Registry Create를 클릭해요.

Docker Registry는 우리가 만든 이미지를 저장할 개인 저장소입니다. Docker Hub 같은 공개 저장소도 있지만, 회사 코드나 개인 프로젝트는 프라이빗 Registry를 사용하는 게 안전해요.
Dokploy UI에서 새 프로젝트를 만들고 다음 docker-compose.yml을 배포해요.
services:
registry:
restart: always
image: registry:2
ports:
- 5000
volumes:
- ../files/auth/registry.password:/auth/registry.password
- registry-data:/var/lib/registry
environment:
REGISTRY_STORAGE_DELETE_ENABLED: true
REGISTRY_HEALTH_STORAGEDRIVER_ENABLED: false
REGISTRY_HTTP_SECRET: ${REGISTRY_HTTP_SECRET}
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
volumes:
registry-data:
이제 Private Docker Registry가 생겼어요. 앞으로 이 곳에 Docker Image를 저장할 거에요.
Step 3: Docker Swarm 클러스터 구성
Docker Swarm은 여러 대의 컴퓨터를 하나의 클러스터로 묶어주는 도구입니다. 쿠버네티스보다 훨씬 간단하면서도 기본적인 오케스트레이션 기능을 제공합니다.
Swarm이 뭐고 왜 필요한가요?
Swarm 없이도 각 컴퓨터에서 Docker를 실행할 수 있지만,
- A 컴퓨터에서 빌드한 이미지를 B 컴퓨터에서 어떻게 실행하지?
- 앱이 죽으면 누가 다시 실행해주지?
- 어느 컴퓨터에 배포해야 효율적이지?
Swarm이 이 모든 걸 자동으로 처리해줘요.
클러스터 초기화 (Mini PC)
# Mini PC에서 - Manager 노드로 초기화
sudo docker swarm init --advertise-addr 192.168.0.4
# 출력되는 토큰을 복사해주세요.
# docker swarm join --token SWMTKN-1-xxxxx... 192.168.0.4:2377
Mac Mini 추가 (Worker 노드)
# Mac Mini에서 - Worker로 참여
docker swarm join --token SWMTKN-1-xxxxx... 192.168.0.4:2377
연결 확인
sudo docker node ls
# 결과:
# HOSTNAME STATUS AVAILABILITY MANAGER STATUS
# mj-MINI-S Ready Active Leader
# mj-MAC-MINI Ready Active
이제 두 컴퓨터가 하나의 클러스터로 연결됐어요.
Step 4: 첫 번째 앱 배포하기
Mac Mini에서 앱 빌드
간단한 웹 페이지를 만들어볼게요. 아래 커맨드를 실행해주세요.
mkdir my-first-app && cd my-first-app
cat > index.html << 'EOF'
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>My Swarm App</title>
</head>
<body>
<h1>🎉 Docker Swarm 클러스터에서 실행 중!</h1>
</body>
</html>
EOF
cat > Dockerfile << 'EOF'
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/
EOF
Multi-platform 빌드 (중요!)
Mac Mini(ARM)와 Mini PC(Intel)는 CPU 아키텍처가 다릅니다. 양쪽에서 모두 실행 가능한 이미지를 만들어야 해요.
docker buildx create --name mybuilder --use
# Multi-platform 빌드 & Registry에 푸시
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t registry.mj-dev.site/my-first-app:latest \
--push .
Dokploy에서 배포
- Dokploy UI 접속
- Create Service → Application
- 설정:
- Source Type: Docker
- Docker Image:
내 이미지 URL(ex.https://hub.docker.com/r/library/nginx) - Port: 80
- Deploy 클릭

이제 아래와 같이 서비스가 배포됐을거에요.

최종 아키텍처
우리가 구축한 시스템을 정리하면(내용상 스킵한 부분도 있어요)
[개발자 푸시] → [GitHub]
↓
[Mac Mini 빌드]
↓
[Registry 저장]
↓
[Dokploy 배포]
↓
[Swarm이 노드 선택]
↓
[Mini PC 또는 Mac Mini에서 실행]
↓
[Traefik이 트래픽 라우팅]
↓
[사용자 접속]
마치며
처음엔 단순히 "Next.js 앱 하나 배포하려는 것"이라고 생각했지만, 매번 해주는 nginx 설정, SSL 인증서, 자동 배포, 모니터링까지 수많은 작업이 필요했습니다. Dokploy는 이 모든 복잡한 과정을 웹 UI 몇 번의 클릭으로 해결해줬어요. 예시용 웹 이외에 개인용 옵시디언 노트 서비스도 배포하면서 배포 시간이 정말 빨라졌다는 것을 알 수 있게 됐어요.
이제 더 복잡한 서비스를 편리하게 배포할 수 있게 되었어요. 앞으로는 비용 걱정없이 서비스를 나만의 인프라 위에서 운영할 수 있게 되었어요. 성능이 부족하면 컴퓨터를 추가하면 되고, 최적화가 필요하면 직접 분석해볼 수 있는 기회도 생겼습니다.
집에 놀고 있는 컴퓨터가 있다면 한번 도전해보시는 것을 추천드립니다.
긴 글 읽어주셔서 감사해요. 🙇♂️