Open Source · Self-Hosted · Docker-Powered

커피 한잔 내릴 시간에 홈서버를 구성하세요.
Just brew it!

17개의 Docker 기반 서비스를 설정하고 관리하는 대화형 7단계 CLI 마법사와 웹 대시보드. 나만의 홈 서버를 구축하고, 호스팅 비용을 절약하며, 내 데이터를 직접 소유하세요. 제로에서 완전한 서버 구성까지 단 몇 분 — 클라우드 구독 없이 가능합니다.

  • Git 서버 (Gitea)
  • 웹 서버 (Nginx / Traefik)
  • 미디어 서버 (Jellyfin)
  • 런타임 스택 (Go, Java, Kotlin, Node, Python, Rust, React)
  • 데이터베이스 (PostgreSQL, SQLite, MySQL)
  • 클라우드 스토리지 (Nextcloud)
  • 모니터링 (Grafana, Prometheus) (Pro)
  • CI/CD 파이프라인
  • 쉬운 도메인 연결
brewnet ~ terminal
$|

TL;DR

  • Brewnet은 단일 명령어로 17개 Docker 서비스(Gitea, Nginx, Jellyfin, PostgreSQL, Nextcloud, Grafana 등)를 배포하는 무료 오픈소스 CLI 도구입니다.
  • Linux와 macOS를 지원합니다. npm install -g @brewnet/cli 또는 소스 빌드로 설치 가능합니다.
  • 주요 기능: 7단계 대화형 설정 마법사, 웹 관리 대시보드, 16개 앱 배포 스택, Cloudflare Tunnel 커스텀 도메인 연결, 자동 백업/복원.
  • 클라우드 구독이나 호스팅 비용 없이 자체 하드웨어에서 모든 것을 셀프호스팅할 수 있습니다.
17도커 기반 완벽한 격리, 클린 삭제 지원
6+16지원 언어 및 프레임워크 런타임
3설치부터 도메인 연결까지 3단계
100%오픈소스 CLI + Dashboard
문제점

복잡한 호스팅 설정, 얼만지 모르는 비용.
이제 Brewnet이 해결합니다.

웹서버부터 Git, DB, Media 및 File 서버까지. 비용은 0원! 설정 마법사로 간단하게, 도메인 연결은 1분! 수집하는 정보 없음.

런타임 설정은 악몽입니다

Go, Java, Kotlin, Node, Python, Rust, React — 각 런타임마다 별도의 버전 관리자, 의존성, 충돌 문제가 있습니다. Brewnet은 완전한 격리 환경에서 클릭 한 번으로 해결합니다.

보안은 항상 뒷전입니다

SSH 강화, 방화벽 규칙, SSL 인증서, 자격 증명 관리 — 대부분의 클라우드는 설정이 복잡합니다. Brewnet은 Cloudflare Tunnel 연결로 보안문제를 한번에 해결합니다.

깔끔한 정리 방법이 없습니다

대부분의 클라우드는 여러단계의 삭제를 거쳐도 깔끔하게 삭제하기 어려운 구조입니다. Brewnet은 brewnet uninstall 한번으로 깔끔하게 삭제됩니다. 설정 파일, 컨테이너, 볼륨 잔해 없음.

주요 기능

셀프 호스팅에 필요한 모든 것을 한 곳에

클라우드 호스팅 비용은 이제 그만. 명령어 하나로 배포하세요.
도메인 연결, 빌드, 배포를 한번에 손쉽게 해결하세요.

원클릭 서버 스택

Go, Java, Kotlin, Node, Python, Rust, React — 런타임을 선택하고 명령어 하나로 프로덕션 웹 서버를 실행하세요. 수동 의존성 설정도, 버전 충돌도 없습니다.

기본부터 안전하게

SSH 키 전용 인증, root 로그인 비활성화, 자동 방화벽 설정, 모든 서비스에 걸친 암호화된 인증 정보 전파까지 기본 제공됩니다.

깔끔한 제거 및 롤백

모든 변경 사항이 추적됩니다. 실행 전 --dry-run으로 삭제 항목을 미리 확인하세요. 완전한 백업 및 복원, 명령어 하나로 롤백, 제거 후 남는 컨테이너, 볼륨, 설정 파일이 없습니다.

Cloudflare Tunnel 연동

포트 포워딩이 필요 없습니다. NAT/CGNAT 환경에서도 자동 HTTPS와 DDoS 보호가 적용됩니다. Cloudflare 토큰만 붙여넣으면 터널, 인그레스 규칙, DNS가 자동으로 설정됩니다.

Docker 오케스트레이션

최대 17개 서비스에 대해 완전한 컨테이너 격리로 docker-compose.yml을 자동 생성합니다. 각 서비스는 자체 네트워크 샌드박스에서 의존성 순서, 헬스 체크, 안전한 인증 정보 전파와 함께 실행됩니다.

Slack 및 Telegram 알림 (Pro)

서비스 상태, 배포, 오류에 대한 실시간 알림을 Slack이나 Telegram으로 바로 받으세요. 데이터베이스 불필요. Webhook URL이나 봇 토큰만 입력하면 바로 알림을 받을 수 있습니다.

빌드, 배포 & 연결

서버 설정은 시작에 불과합니다. 앱 실행, 커스텀 도메인 연결, 빌드 자동화, 명령어 하나로 배포, 전체 모니터링까지 — DevOps 팀 없이 완전한 DevOps 라이프사이클을 경험하세요.

크로스 플랫폼 지원

macOS 12+ 및 Ubuntu 20.04+를 공식 지원합니다. Brewnet이 OS를 자동 감지하고, 패키지 관리자를 조정하며, 플랫폼별 차이를 알아서 처리합니다.

웹 대시보드 및 모니터링 (Pro)

브라우저 기반 설치 마법사, 실시간 서비스 모니터링, 웹 터미널, 그리고 전체 서버 스택을 관리하는 시각적 인터페이스를 제공합니다.

사용법

간단한 3단계로 바로 시작하세요

설치부터 서버 가동까지, CLI 마법사가 모든 것을 처리합니다.

01

Brewnet 설치

curl(권장) 또는 npm으로 설치합니다. Node.js 20+와 Docker 27+가 필요합니다. macOS 12+ 및 Ubuntu 20.04+를 지원합니다.

curl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash
02

마법사 실행

대화형 7단계 마법사가 시스템 점검, 프로젝트 설정, 관리자 계정 및 서버 구성, 개발 스택 및 런타임, 도메인 및 네트워크, 검토, 생성 및 배포를 안내합니다.

brewnet init
03

서비스 관리

간단한 명령어로 서비스를 추가, 제거, 시작, 중지 및 모니터링하세요. 로그 확인, 도메인 관리, 앱 배포까지 가능합니다.

brewnet status

CLI 명령어

  • brewnet init대화형 설치 마법사
  • brewnet add <service>서비스 추가
  • brewnet remove <service>서비스 제거
  • brewnet up / down전체 서비스 시작 / 중지
  • brewnet status서비스 상태 확인
  • brewnet logs [service]로그 확인
  • brewnet admin웹 대시보드 열기
  • brewnet domain connect커스텀 도메인 연결
  • brewnet domain tunnelCloudflare Tunnel 관리
  • brewnet backup백업 생성
  • brewnet restore <id>백업에서 복원
  • brewnet create-app <name>새 앱 스캐폴드
  • brewnet shutdown모든 서비스 안전 종료
  • brewnet uninstall모든 서비스 및 데이터 제거
서비스

서버에 필요한 모든 것, 하나의 플랫폼에서

17개 Docker 서비스를 바로 배포하세요.

WEB

웹 서버

Traefik, Nginx, Caddy

GIT

Git 서버

Gitea SSH 접속 지원 (포트 3022)

DB

데이터베이스

PostgreSQL, MySQL, SQLite

CACHE

캐시 (Pro)

Redis, Valkey

FILE

파일 스토리지

Nextcloud, MinIO (S3)

MEDIA

미디어 서버

Jellyfin 스트리밍

SSH

SSH 서버 (Pro)

OpenSSH, 키 기반 인증, SFTP

MAIL

메일 서버 (Pro)

docker-mailserver (SMTP/IMAP)

TUNNEL

Cloudflare Tunnel

자동 HTTPS, DDoS 방어

FB

FileBrowser

웹 기반 파일 관리 UI

DEV

개발 스택

Go, Java, Kotlin, Node, Python, Rust, React — 16개 프레임워크 보일러플레이트

SETUP

간편 설치 & 도메인

원커맨드 설정, 커스텀 도메인 & Cloudflare 연동

설치 가이드

몇 분 만에 시작하세요

설치부터 운영까지, 3분이면 충분합니다.

시스템 요구사항

Brewnet 시스템 요구사항
항목최소권장
OSmacOS 12+ / Ubuntu 20.04+최신 안정 버전
Node.js20+22 LTS
Docker27+최신 버전 (미설치 시 자동 설치)
RAM2 GB4 GB+
디스크20 GB50 GB+ (미디어 사용 시)

설치 전에 Docker가 필요하지 않습니다 — brewnet init이 자동으로 감지하고 설치합니다.

01

npm (권장)

npm 패키지 매니저를 통해 전역 설치합니다.

Step 1

npm install -g @brewnet/cli

Step 2

brewnet init
02

curl

모든 것을 처리하는 한 줄 설치 스크립트입니다.

Step 1

curl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash

Step 2

brewnet init

7단계 설치 마법사

1
시스템 점검
OS, Docker, 포트(80/443), 디스크, RAM 검증
2
프로젝트 설정
프로젝트 이름, 경로, 설치 유형 (전체 / 부분)
3
관리자 & 서버
관리자 계정, 웹/파일/DB/미디어/SSH 선택
4
개발 스택
백엔드 언어, 프레임워크, 프론트엔드, FileBrowser (선택)
5
도메인 & 네트워크
로컬(LAN) 또는 Cloudflare Tunnel, 메일 서버 (조건부)
6
검토 & 확인
전체 구성 검토, 자격 증명 전파 대상, 리소스 추정
7
생성 & 배포
docker-compose.yml 생성, 이미지 풀, 컨테이너 시작, 접속 확인
FAQ

자주 묻는 질문

설치 · 삭제

두 가지 방법이 있습니다:

# 방법 1: npm (권장)
npm install -g @brewnet/cli

# 방법 2: 소스 빌드
curl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash

설치 후 brewnet init으로 서버 세팅을 시작합니다.

# npm 설치인 경우
npm update -g @brewnet/cli

# curl 설치인 경우 (같은 명령어 재실행)
curl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash
brewnet uninstall            # 대화형 제거
brewnet uninstall --force    # 확인 없이 제거
brewnet uninstall --keep-data    # Docker 볼륨(DB 등) 보존
brewnet uninstall --keep-config  # 설정 파일 보존, 컨테이너만 제거

제거 대상: Docker 컨테이너, 네트워크, 프로젝트 디렉토리, ~/.brewnet/projects/ 메타데이터

CLI 바이너리 자체를 삭제하려면:

# npm 설치인 경우
npm uninstall -g @brewnet/cli

# curl 설치인 경우
sudo rm /usr/local/bin/brewnet
rm -rf ~/.brewnet/source
brewnet up                  # 모든 서비스 시작
brewnet down                # 모든 서비스 중지
brewnet down --volumes      # 중지 + 데이터 삭제
brewnet status              # 전체 상태 확인
brewnet logs [service]      # 서비스 로그 확인

brewnet status --json으로 JSON 형식 출력도 가능합니다.

사용 · 운영

brewnet admin   # http://localhost:8088 자동 열림

--port 9090 옵션으로 포트 변경 가능. --foreground로 디버깅 모드 실행.

brewnet create-app my-app                    # 대화형 선택
brewnet create-app my-app --stack go-gin     # 스택 지정
brewnet create-app my-app --database postgres # DB 지정

16개 스택 지원: Node.js (Express, NestJS, Next.js), Python (FastAPI, Flask, Django), Go (Gin, Echo, Fiber), Rust (Actix-web, Axum), Java (Spring), Kotlin (Spring Boot, Ktor)

brewnet domain connect my-app --domain api.example.com
brewnet domain tunnel status    # 터널 상태 확인
brewnet domain tunnel restart   # 터널 재시작

Cloudflare API Token (Zone:Read, DNS:Edit, Tunnel:Edit 권한)이 필요합니다.

아니요. 모든 컨테이너는 restart: unless-stopped 정책으로 설정되어, 재부팅 후 Docker가 시작되면 자동 복구됩니다.

단, brewnet down으로 직접 중지한 경우에는 재부팅 후에도 중지 상태를 유지합니다. Docker Desktop(macOS)은 Settings → General → "Start Docker Desktop when you sign in"을 체크하세요.

brewnet backup              # 백업 생성
brewnet backup --list       # 백업 목록 확인
brewnet restore <backup-id>          # 복원
brewnet restore <backup-id> --force  # 확인 없이 복원

백업 위치: ~/.brewnet/backups/ (.tar.gz 형식)

모든 설정과 메타데이터는 ~/.brewnet/에 저장됩니다. 프로젝트 디렉토리(docker-compose.yml, 앱 소스 등)는 ~/brewnet/<project-name>/에 위치합니다.

문제 해결

Brewnet은 Docker가 없으면 자동으로 설치를 시도합니다. 자동 설치가 실패하는 경우 수동으로 설치하세요.

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

설치 후 로그아웃/로그인하여 docker 그룹 적용

다른 프로그램이 해당 포트를 사용하고 있습니다.

# macOS/Linux에서 포트 사용 프로세스 확인
lsof -i :80
lsof -i :8088

# 해당 프로세스를 종료하거나, Brewnet 설정에서 다른 포트 사용

주로 충돌하는 서비스: Apache, Nginx, 다른 Docker 컨테이너

다음을 순서대로 확인하세요.

1. 서비스가 실행 중인지 확인:

brewnet status

2. 포트 8088이 열려 있는지 확인:

curl http://localhost:8088

3. Docker 컨테이너 상태 확인:

docker ps -a | grep brewnet

4. 서비스 재시작:

brewnet down && brewnet up

Quick Tunnel의 URL은 임시이며, 서버를 재시작하면 변경됩니다. 이는 정상적인 동작입니다. 영구 URL이 필요하다면 Named Tunnel로 전환하세요.

brewnet domain connect

다음을 확인하세요.

1. DNS 전파 대기: DNS 레코드가 전파되기까지 최대 수 분이 걸릴 수 있습니다.

dig my-app.example.com CNAME

2. Cloudflare 도메인 상태: 도메인이 Active 상태인지 확인 (Pending이면 네임서버 전파 대기 중)

3. 터널 상태 확인:

brewnet domain tunnel status

4. cloudflared 컨테이너 재시작:

brewnet domain tunnel restart

Nextcloud의 trusted domains 설정에 현재 접속 URL이 등록되어 있지 않은 경우 발생합니다. Brewnet은 자동으로 *.trycloudflare.com을 trusted domain에 추가하지만, 커스텀 도메인을 사용하는 경우 추가 설정이 필요할 수 있습니다.

Jellyfin의 초기 설정 URL은 반드시 다음 형식을 사용해야 합니다.

http://<host>:8096/web/#/wizard/start

/web/#/home 경로를 사용하면 초기 설정 마법사가 나타나지 않습니다.

배포 실패의 일반적인 원인:

  • Dockerfile 오류: 앱 디렉토리에 유효한 Dockerfile이 있는지 확인
  • 빌드 의존성 문제: Docker 빌드 로그에서 구체적인 오류 확인
brewnet logs <app-name>
  • Health Check 실패: 앱이 시작은 되지만 /health 엔드포인트가 응답하지 않는 경우
  • 포트 불일치: 앱이 리스닝하는 포트와 설정된 포트가 다른 경우

Docker 이미지와 컨테이너가 디스크 공간을 많이 차지할 수 있습니다.

# Docker 디스크 사용량 확인
docker system df

# 사용하지 않는 이미지 정리 (주의: 필요한 이미지까지 삭제될 수 있음)
docker image prune

docker system prune은 모든 미사용 리소스를 삭제하므로 주의해서 사용하세요. 중요 데이터가 있는 볼륨은 절대 삭제하지 마세요.

Traefik strip-prefix 뒤의 Gitea는 X-Forwarded-Host 기반으로 subpath가 없는 URL을 반환할 수 있습니다 (예: /git 경로 누락). Brewnet 내부에서는 authedCloneUrl()이 올바른 URL을 자동 생성하므로, Gitea API에서 반환하는 clone_url을 직접 사용하지 마세요.

감사합니다! 24시간 이내에 답변드리겠습니다.
문의하기

개발자 문의

궁금한 점이 있으신가요? 메시지를 보내주시면 이메일 또는 Telegram으로 답변드리겠습니다.

문제가 발생했습니다. 다시 시도하시거나 hello@brewnet.dev로 이메일을 보내주세요.