{"id":51436839,"url":"https://github.com/claude-code-expert/brewnet","last_synced_at":"2026-07-05T07:07:33.251Z","repository":{"id":339884129,"uuid":"1163709750","full_name":"claude-code-expert/brewnet","owner":"claude-code-expert","description":"Self-hosted stack bootstrapper · Docker Compose · Git server · File manager · One command setup","archived":false,"fork":false,"pushed_at":"2026-03-29T07:43:56.000Z","size":3077,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-03-29T08:25:50.174Z","etag":null,"topics":["automation-server","cli-server-tool","homeserver","opensource-homeserver","self-hosting"],"latest_commit_sha":null,"homepage":"https://www.brewnet.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/claude-code-expert.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-22T02:45:10.000Z","updated_at":"2026-03-29T07:00:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/claude-code-expert/brewnet","commit_stats":null,"previous_names":["claude-code-expert/brewnet"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/claude-code-expert/brewnet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Fbrewnet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Fbrewnet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Fbrewnet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Fbrewnet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/claude-code-expert","download_url":"https://codeload.github.com/claude-code-expert/brewnet/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claude-code-expert%2Fbrewnet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35146126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation-server","cli-server-tool","homeserver","opensource-homeserver","self-hosting"],"created_at":"2026-07-05T07:07:30.135Z","updated_at":"2026-07-05T07:07:33.166Z","avatar_url":"https://github.com/claude-code-expert.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e **이 프로젝트가 도움이 되었다면, Star를 눌러 마음을 표현해 주세요!**\n\u003e **If you find this project helpful, please give it a Star to show your support!**\n\n# 🍺 Brewnet — Your Server on Tap. Just Brew It.\n\nSelf-hosted stack bootstrapper · Docker Compose · Git server · File manager · App Server · DB Server · One command setup\n\n[English](#english) | [한국어](#한국어)\n\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![GitHub](https://img.shields.io/badge/GitHub-codevillain%2Fbrewnet-black?logo=github)](https://github.com/claude-code-expert/brewnet)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0%2B-3178c6?logo=typescript)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js-20%2B-339933?logo=node.js)](https://nodejs.org/)\n[![Docker](https://img.shields.io/badge/Docker-27%2B-2496ed?logo=docker)](https://www.docker.com/)\n\n---\n\n## English\n\n**Your Home Server, Brewed Fresh**\n\nA fully self-hosted home server management platform. Set up and manage a personal server with Docker-based services through a single CLI tool — Git server, file storage, databases, reverse proxy, and external access via Cloudflare Tunnel, all in one interactive wizard.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**CLI Tool** 🖥️\n- 8-step interactive setup wizard\n- Docker auto-install (macOS + Linux)\n- Local Git, DB, file, media services\n- Open source (Apache 2.0)\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n**Pro Dashboard** 💼\n- Browser-based Setup Wizard \n- Web-based management interface\n- Real-time monitoring\n- Team access control\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Quick Start\n\n```bash\n# Option A — npm (recommended)\nnpm install -g @brewnet/cli\n\n# Option B — curl\ncurl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash\n```\n\n```bash\nbrewnet init\n```\n\n### Requirements\n\n| Item | Min Version | Notes |\n|------|-------------|-------|\n| Node.js | 20+ | `node --version` |\n| Docker | 27+ | Auto-installed if missing |\n| OS | macOS 12+ / Ubuntu 20.04+ | |\n| RAM | 2GB+ | 4GB+ recommended |\n| Disk | 20GB+ | Varies by services |\n\n\u003e Docker is not required before running `brewnet init` — it will be installed automatically.\n\n### Installation\n\n**Option A — npm (recommended)**\n\n```bash\nnpm install -g @brewnet/cli\nbrewnet --version\nbrewnet init\n```\n\n**Option B — curl**\n\nThe installer will prompt for your `sudo` password to place the binary at `/usr/local/bin/brewnet`. No shell reload needed afterward.\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash\nbrewnet --version\nbrewnet init\n```\n\n### Init Wizard — 8 Steps\n\n| Step | Description |\n|------|-------------|\n| **Step 0** | System check — OS, Docker, ports 80/443, disk/RAM |\n| **Step 1** | Project setup — name, path, Full / Minimal Install |\n| **Step 2** | Admin account + server components — Web server, File server, DB, Media |\n| **Step 3** | Dev stack — runtime + framework selection *(only shown when App Server is enabled in Step 2)* |\n| **Step 4** | Domain \u0026 network — Local (LAN) or Cloudflare Tunnel (external) |\n| **Step 5** | Review \u0026 confirm |\n| **Step 6** | Generate config, pull images, start services, health check |\n| **Step 7** | Done — endpoints, credentials, external access verification |\n\n#### Cloudflare Tunnel Setup (Step 4)\n\nNo port forwarding required. To enable external access:\n\n1. Log in to [dash.cloudflare.com](https://dash.cloudflare.com)\n2. **Websites → Add a site** → register your domain and update nameservers\n3. Top-right profile → **My Profile → API Tokens → Create Token**\n   → Select \"Edit Cloudflare Tunnel\" template → your domain → **Create Token** → copy\n4. Paste into the wizard — tunnel creation, ingress rules, and DNS records are handled automatically\n\n\u003e **Manual mode**: Create a tunnel at [one.dash.cloudflare.com](https://one.dash.cloudflare.com) and paste the Connector Token instead.\n\n### Command Reference (21 commands)\n\n**Setup \u0026 Lifecycle**\n```bash\nbrewnet init                        # Interactive 7-step setup wizard\nbrewnet start                       # Start Docker services + admin panel (use after reboot)\nbrewnet admin                       # Start admin panel daemon only (http://localhost:8088)\nbrewnet admin --foreground          # Run admin panel in foreground\nbrewnet shutdown                    # Stop the admin panel daemon\nbrewnet service install             # Register admin panel as a boot-time OS service\nbrewnet service uninstall           # Remove the OS service\nbrewnet service status              # Show whether the OS service is installed\nbrewnet uninstall                   # Remove all services, volumes, and project files\nbrewnet uninstall --dry-run         # Preview what will be removed (no changes)\nbrewnet uninstall --keep-data       # Preserve Docker volumes (DB, file data)\n```\n\n**Service Management**\n```bash\nbrewnet status                      # Show running container status table\nbrewnet up                          # Start all services (docker compose up -d)\nbrewnet down                        # Stop all services — data preserved in volumes\nbrewnet update                      # Pull latest images and restart services\nbrewnet add \u003cservice\u003e               # Add a service to docker-compose.yml\nbrewnet remove \u003cservice\u003e            # Remove a service from docker-compose.yml\nbrewnet list                        # List all available services\nbrewnet list --stacks               # List all available app stacks (16 boilerplates)\nbrewnet logs [service]              # View logs (omit service for all; -f to follow)\n```\n\n**App Deployment**\n```bash\nbrewnet deploy \u003cpath\u003e               # Deploy a local project (auto-detects language)\nbrewnet create-app \u003cname\u003e           # Scaffold a new app from a boilerplate stack\nbrewnet create-app \u003cname\u003e --stack go-gin       # Skip interactive stack selection\nbrewnet create-app \u003cname\u003e --database postgres  # Set database driver\n```\n\n**Backup \u0026 Export**\n```bash\nbrewnet backup                      # Create a tar.gz backup of the project\nbrewnet backup --list               # List existing backups\nbrewnet restore \u003cbackup-id\u003e         # Restore from a backup (shows confirmation prompt)\nbrewnet restore \u003cbackup-id\u003e --force # Restore without confirmation\nbrewnet export                      # Export wizard state + compose config as archive\nbrewnet export -o \u003cdir\u003e             # Specify output directory\n```\n\n**Domain \u0026 Storage**\n```bash\nbrewnet domain connect              # Migrate Quick Tunnel → Named Tunnel\nbrewnet domain connect \u003capp\u003e --domain \u003chostname\u003e  # Connect app to external domain\nbrewnet domain tunnel status        # Query tunnel health and service reachability\nbrewnet domain tunnel restart       # Restart the cloudflared container\nbrewnet storage init                # Add a file storage backend (Nextcloud, MinIO, etc.)\nbrewnet storage init --service filebrowser  # Skip interactive backend selection\nbrewnet storage status              # Show installed storage backends\n```\n\n### Admin Dashboard\n\n`brewnet admin` starts a background HTTP server at `http://localhost:8088` — a React SPA.\n\n**Dashboard tab** — Service status table with container name, status, port, and External URL.\n\n**Apps tab** — App list with App Detail Modal (4 tabs):\n- **Overview** — Status, port, External URL\n- **Deploy** — Deployment history, manual deploy button\n- **Logs** — Real-time container logs\n- **Domain** — Connect / disconnect a Cloudflare Tunnel domain\n\n**Cloudflare Tunnel modes (configurable per app):**\n- **Quick Tunnel** — Temporary URL, no account required\n- **Named Tunnel** — Fixed subdomain (e.g. `myapp.yourdomain.com`)\n\n### App Scaffolding\n\n```bash\nbrewnet create-app \u003cname\u003e   # Generate a new app project with Docker + Git + routing\n```\n\nCreates a full project: Gitea repository, Docker Compose service, Traefik routing, and boilerplate source code.\n\n**Supported stacks (16):**\n\n| Language | Frameworks |\n|----------|------------|\n| Node.js | Express, Fastify, Next.js (App Router), Next.js (Pages) |\n| Go | Gin, Echo, Fiber |\n| Rust | Actix-web, Axum |\n| Python | FastAPI, Flask |\n| Kotlin | Spring Boot |\n| Java | Spring Boot |\n\n### Stopping Services\n\n```bash\nbrewnet down          # Stop containers — data preserved in Docker volumes\nbrewnet down \u0026\u0026 brewnet up   # Restart\n```\n\n### After Reboot\n\nAll Docker containers use `restart: unless-stopped` — they start automatically when Docker starts. Named Tunnel domain connections are also restored automatically.\n\nTo restore the admin panel after reboot:\n\n```bash\n# Option A — manual (one command)\nbrewnet start\n\n# Option B — auto-start on login/boot (register once)\nbrewnet service install\n```\n\n| Platform | Mechanism |\n|----------|-----------|\n| macOS | LaunchAgent (`~/Library/LaunchAgents/com.brewnet.admin.plist`) |\n| Linux | systemd user service (`~/.config/systemd/user/brewnet-admin.service`) |\n\n### Uninstall\n\n```bash\n# Preview what will be removed (no changes)\nbrewnet uninstall --dry-run\n\n# Full removal\nbrewnet uninstall\n\n# Preserve database/file volumes\nbrewnet uninstall --keep-data\n\n# Preserve project directory (stop containers only)\nbrewnet uninstall --keep-config\n\n# Skip confirmation prompt\nbrewnet uninstall --force\n```\n\n\u003e **Cloudflare Tunnel**: Not removed automatically. Delete manually at [one.dash.cloudflare.com](https://one.dash.cloudflare.com) → Networks → Tunnels, and remove the CNAME records under DNS.\n\nAfter uninstall, run `brewnet init` to set up a new installation. No need to re-run `install.sh`.\n\n### FAQ\n\n**Q: Does Docker need to be installed beforehand?**\nA: No. `brewnet init` detects a missing Docker and offers to install it automatically (macOS: Homebrew, Linux: get.docker.com).\n\n**Q: I forgot the admin password.**\nA: Check `~/.brewnet/status/index.html` (auto-opened after setup) or the `.env` file in your project directory.\n\n**Q: Will data be lost when I stop services?**\nA: No. `brewnet down` stops containers without deleting Docker volumes. All data is restored when you run `brewnet up` again.\n\n**Q: Ports 80/443 are already in use.**\nA: Step 0 of the wizard detects port conflicts and guides you through resolving them.\n\n---\n\n## 한국어\n\n**Your Home Server, Brewed Fresh**\n\n완전히 자체 호스팅되는 홈 서버 관리 플랫폼. CLI 도구 하나로 Git 서버, 파일 저장소, 데이터베이스, 리버스 프록시, Cloudflare Tunnel 외부 접속까지 대화형 위저드로 한 번에 설정합니다.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**CLI Tool** 🖥️\n- 8단계 대화형 설정 위저드\n- Docker 자동 설치 (macOS + Linux)\n- Git / DB / 파일 / 미디어 서비스\n- 오픈소스 (Apache 2.0)\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n**Pro Dashboard** 💼\n- 쉬운 웹 설치 (단계별 위저드)\n- 웹 기반 관리 인터페이스\n- 실시간 모니터링\n- 팀 접근 권한 관리\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### 빠른 시작\n\n```bash\n# 방법 A — npm (권장)\nnpm install -g @brewnet/cli\n\n# 방법 B — curl\ncurl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash\n```\n\n```bash\nbrewnet init\n```\n\n### 사전 요구사항\n\n| 항목 | 최소 버전 | 비고 |\n|------|-----------|------|\n| Node.js | 20+ | `node --version` |\n| Docker | 27+ | 없으면 자동 설치 |\n| OS | macOS 12+ / Ubuntu 20.04+ | |\n| RAM | 2GB+ | 권장 4GB+ |\n| 디스크 | 20GB+ | 서비스 수에 따라 다름 |\n\n\u003e `brewnet init` 실행 전에 Docker가 없어도 됩니다 — 자동으로 설치합니다.\n\n### 설치\n\n**방법 A — npm (권장)**\n\n```bash\nnpm install -g @brewnet/cli\nbrewnet --version\nbrewnet init\n```\n\n**방법 B — curl**\n\n설치 중 `sudo` 비밀번호를 입력하면 `/usr/local/bin/brewnet`에 설치됩니다. 셸 재로드(`source ~/.zshrc`) 없이 바로 사용 가능합니다.\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash\nbrewnet --version\nbrewnet init\n```\n\n### 초기 설정 위저드 — 8단계\n\n| 단계 | 내용 |\n|------|------|\n| **Step 0** | 시스템 체크 — OS, Docker, 포트 80/443, 디스크/RAM |\n| **Step 1** | 프로젝트 설정 — 이름, 경로, Full / Minimal Install 설치 유형 |\n| **Step 2** | 어드민 계정 + 서버 컴포넌트 — 웹 서버, 파일 서버, DB, 미디어 |\n| **Step 3** | 개발 스택 — 런타임 + 프레임워크 선택 *(Step 2에서 App Server 활성화 시만 표시)* |\n| **Step 4** | 도메인 \u0026 네트워크 — 로컬(LAN) 또는 Cloudflare Tunnel(외부 접속) |\n| **Step 5** | 검토 및 확인 |\n| **Step 6** | 설정 파일 생성, 이미지 pull, 서비스 시작, 헬스 체크 |\n| **Step 7** | 완료 — 접속 URL, 계정 정보, 외부 접근 검증 |\n\n#### Step 2 — 서버 컴포넌트 선택지\n\n| 컴포넌트 | 선택지 | 기본값 |\n|----------|--------|--------|\n| 웹 서버 (필수) | Traefik / Nginx / Caddy | Traefik |\n| 파일 서버 | Nextcloud / MinIO | 비활성 |\n| DB 서버 | PostgreSQL / MySQL + Redis/Valkey | PostgreSQL + Redis |\n| 미디어 | Jellyfin | 비활성 |\n| 관리자 계정 | 사용자명 + 비밀번호 자동 생성 | admin / 20자 랜덤 |\n\n#### Step 3 — 개발 스택 선택지\n\n- **백엔드 언어**: Python / Node.js / Java / Rust / Go / Kotlin (복수 선택)\n- **언어별 프레임워크**:\n  - Python: FastAPI / Django / Flask\n  - Node.js: Next.js / Next.js 15.x (App Router) / Express / NestJS\n  - Java: Spring / Spring Boot\n  - Rust: Axum / Actix Web\n  - Go: Gin / Echo / Fiber\n  - Kotlin: Ktor / Spring Boot (Kotlin)\n- **프론트엔드**: React (TypeScript) / Vue.js (Vite) (단일 선택)\n- 필요 없으면 **Skip** 선택\n\n#### Step 4 — Cloudflare Tunnel 설정 방법\n\n포트포워딩 없이 외부 접속을 활성화합니다.\n\n1. [dash.cloudflare.com](https://dash.cloudflare.com) 로그인\n2. **Websites → Add a site** → 도메인 등록 후 네임서버 변경\n3. 우측 상단 프로필 → **My Profile → API Tokens → Create Token**\n   → \"Edit Cloudflare Tunnel\" 템플릿 선택 → 사용할 도메인 → **Create Token** → 토큰 복사\n4. 위저드에 토큰 붙여넣기 → 터널 생성, 인그레스 규칙, DNS 레코드 자동 처리\n\n\u003e **Manual 모드**: [one.dash.cloudflare.com](https://one.dash.cloudflare.com) 에서 직접 터널을 만들고 Connector Token을 붙여넣을 수도 있습니다.\n\n### 명령어 전체 목록 (21개)\n\n**설치 \u0026 라이프사이클**\n```bash\nbrewnet init                        # 7단계 대화형 설치 위저드\nbrewnet start                       # Docker 서비스 + 어드민 패널 통합 시작 (재부팅 후 사용)\nbrewnet admin                       # 어드민 패널 데몬만 시작 (http://localhost:8088)\nbrewnet admin --foreground          # 포그라운드 모드로 어드민 패널 실행\nbrewnet shutdown                    # 어드민 패널 데몬 종료\nbrewnet service install             # 어드민 패널을 OS 자동 시작 서비스로 등록\nbrewnet service uninstall           # OS 자동 시작 서비스 제거\nbrewnet service status              # OS 서비스 등록 상태 확인\nbrewnet uninstall                   # 서비스, 볼륨, 프로젝트 파일 전체 제거\nbrewnet uninstall --dry-run         # 삭제 대상 미리 확인 (실제 변경 없음)\nbrewnet uninstall --keep-data       # Docker 볼륨(DB, 파일 데이터) 보존\n```\n\n**서비스 관리**\n```bash\nbrewnet status                      # 실행 중인 컨테이너 상태 테이블 확인\nbrewnet up                          # 모든 서비스 시작 (docker compose up -d)\nbrewnet down                        # 모든 서비스 중지 — 볼륨(데이터) 유지\nbrewnet update                      # 최신 이미지 pull 후 서비스 재시작\nbrewnet add \u003cservice\u003e               # docker-compose.yml에 서비스 추가\nbrewnet remove \u003cservice\u003e            # docker-compose.yml에서 서비스 제거\nbrewnet list                        # 사용 가능한 서비스 전체 목록\nbrewnet list --stacks               # 앱 스택 목록 (16개 보일러플레이트)\nbrewnet logs [service]              # 로그 확인 (서비스 생략 시 전체; -f 실시간)\n```\n\n**앱 배포**\n```bash\nbrewnet deploy \u003cpath\u003e               # 로컬 프로젝트 배포 (언어 자동 감지)\nbrewnet create-app \u003cname\u003e           # 보일러플레이트 스택으로 앱 프로젝트 생성\nbrewnet create-app \u003cname\u003e --stack go-gin       # 스택 직접 지정 (대화형 생략)\nbrewnet create-app \u003cname\u003e --database postgres  # 데이터베이스 드라이버 지정\n```\n\n**백업 \u0026 내보내기**\n```bash\nbrewnet backup                      # 프로젝트 tar.gz 백업 생성\nbrewnet backup --list               # 기존 백업 목록 확인\nbrewnet restore \u003cbackup-id\u003e         # 백업으로 복원 (확인 프롬프트 포함)\nbrewnet restore \u003cbackup-id\u003e --force # 확인 없이 복원\nbrewnet export                      # 위저드 설정 + compose 설정을 아카이브로 내보내기\nbrewnet export -o \u003cdir\u003e             # 출력 디렉터리 지정\n```\n\n**도메인 \u0026 스토리지**\n```bash\nbrewnet domain connect              # Quick Tunnel → Named Tunnel 마이그레이션\nbrewnet domain connect \u003capp\u003e --domain \u003chostname\u003e  # 앱을 외부 도메인에 연결\nbrewnet domain tunnel status        # 터널 상태 및 서비스 접근 가능 여부 확인\nbrewnet domain tunnel restart       # cloudflared 컨테이너 재시작\nbrewnet storage init                # 파일 스토리지 백엔드 추가 (Nextcloud, MinIO 등)\nbrewnet storage init --service filebrowser  # 대화형 없이 백엔드 직접 지정\nbrewnet storage status              # 설치된 스토리지 백엔드 목록 확인\n```\n\n### 어드민 대시보드\n\n`brewnet admin`은 `http://localhost:8088`에서 React SPA 대시보드를 백그라운드로 실행합니다.\n\n**Dashboard 탭** — 컨테이너명, 상태, 포트, External URL을 포함한 서비스 상태 테이블.\n\n**Apps 탭** — 앱 목록 + App Detail Modal (4탭):\n- **Overview** — 상태, 포트, External URL\n- **Deploy** — 배포 히스토리, 수동 배포 버튼\n- **Logs** — 실시간 컨테이너 로그\n- **Domain** — Cloudflare Tunnel 도메인 연결/해제\n\n**Cloudflare Tunnel 모드 (앱별 설정):**\n- **Quick Tunnel** — 임시 URL, 별도 계정 불필요\n- **Named Tunnel** — 고정 서브도메인 (예: `myapp.yourdomain.com`)\n\n### 앱 스캐폴딩\n\n```bash\nbrewnet create-app \u003cname\u003e   # Docker + Git + 라우팅이 포함된 앱 프로젝트 생성\n```\n\nGitea 저장소, Docker Compose 서비스, Traefik 라우팅, 보일러플레이트 소스코드를 한 번에 생성합니다.\n\n**지원 스택 (16개):**\n\n| 언어 | 프레임워크 |\n|------|-----------|\n| Node.js | Express, Fastify, Next.js (App Router), Next.js (Pages) |\n| Go | Gin, Echo, Fiber |\n| Rust | Actix-web, Axum |\n| Python | FastAPI, Flask |\n| Kotlin | Spring Boot |\n| Java | Spring Boot |\n\n### 서비스 종료\n\n```bash\nbrewnet down                    # 컨테이너 중지 — Docker 볼륨(데이터) 유지\nbrewnet down \u0026\u0026 brewnet up      # 재시작\n```\n\n모든 컨테이너는 `restart: unless-stopped` 정책을 사용합니다. Docker 시작 시 컨테이너가 자동으로 재시작되고, Named Tunnel 도메인 연결도 유지됩니다.\n\n### 재부팅 시 활성화 방법\n\n```bash\n# 방법 1: 수동 단일 명령어 (Docker 서비스 + 어드민 패널 통합 시작)\nbrewnet start\n\n# 방법 2: OS 자동 시작 등록 (최초 1회, 이후 재부팅 시 자동 복원)\nbrewnet service install\n```\n\n| 플랫폼 | 방식 |\n|--------|------|\n| macOS | LaunchAgent (`~/Library/LaunchAgents/com.brewnet.admin.plist`) |\n| Linux | systemd user (`~/.config/systemd/user/brewnet-admin.service`) |\n\n### 언인스톨\n\n```bash\n# 삭제 전 미리 확인 (아무것도 지우지 않음)\nbrewnet uninstall --dry-run\n\n# 완전 제거\nbrewnet uninstall\n\n# Docker 볼륨(DB, 파일 데이터) 보존\nbrewnet uninstall --keep-data\n\n# 프로젝트 디렉터리 보존 (컨테이너만 중지)\nbrewnet uninstall --keep-config\n\n# 확인 프롬프트 없이 강제 제거\nbrewnet uninstall --force\n```\n\ndry-run 출력 예시:\n\n```\nDry-run mode — no changes will be made.\n\nInstalled projects:\n  ▶ homeserver  /Users/username/brewnet/homeserver\n\nThe following will be removed:\n  [remove] Docker containers + volumes\n  [remove] Docker networks: brewnet, brewnet-internal\n  [remove] Project directory: /Users/username/brewnet/homeserver\n\nDry-run complete. No changes made.\n```\n\n\u003e **Cloudflare Tunnel**: 자동으로 삭제되지 않습니다. [one.dash.cloudflare.com](https://one.dash.cloudflare.com) → Networks → Tunnels 에서 수동으로 삭제하고, DNS 탭에서 CNAME 레코드도 삭제하세요.\n\n언인스톨 후 새 설치는 `brewnet init`을 실행하면 됩니다. `install.sh`를 다시 실행할 필요는 없습니다.\n\n### 자주 묻는 질문\n\n**Q: Docker를 미리 설치해야 하나요?**\nA: 아니요. `brewnet init`이 Docker 없음을 감지하고 자동 설치를 제안합니다 (macOS: Homebrew, Linux: get.docker.com).\n\n**Q: 관리자 비밀번호를 잊어버렸어요.**\nA: `~/.brewnet/status/index.html`(설정 완료 후 자동 생성) 또는 프로젝트 디렉터리의 `.env` 파일에서 확인하세요.\n\n**Q: 서비스를 중지하면 데이터가 사라지나요?**\nA: 아니요. `brewnet down`은 Docker 볼륨을 삭제하지 않습니다. `brewnet up`으로 다시 시작하면 모든 데이터가 그대로 복원됩니다.\n\n**Q: 포트 80/443이 이미 사용 중이에요.**\nA: Step 0에서 포트 충돌을 감지하고 해결 방법을 안내합니다.\n\n**Q: `brewnet admin`에 접속이 안 돼요.**\nA: `brewnet up`으로 서비스가 실행 중인지 확인하세요. 관리 패널은 로컬 전용입니다 (`http://localhost:8088`).\n\n---\n\n## License\n\nApache License 2.0 — Copyright 2025 Brewnet (codevillain)\n\nSee [LICENSE](LICENSE) for the full text.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaude-code-expert%2Fbrewnet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclaude-code-expert%2Fbrewnet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaude-code-expert%2Fbrewnet/lists"}