Open Source · Self-Hosted · Docker-Powered

One command. Your entire server stack, on tap.
Just brew it!

Interactive 7-step CLI wizard and Web Dashboard for setting up and managing personal servers with 17 Docker-based services. Build your own home server, skip the hosting fees, and own your data. From zero to a fully configured server in minutes — no cloud subscription required.

  • Git Server (Gitea)
  • Web Server (Nginx / Traefik)
  • Media Server (Jellyfin)
  • Runtime Stack (Go, Java, Kotlin, Node, Python, Rust, React)
  • Database (PostgreSQL, SQLite, MySQL)
  • Cloud Storage (Nextcloud)
  • Monitoring (Grafana, Prometheus) (Pro)
  • CI/CD Pipeline
  • Easy Domain Connection
brewnet ~ terminal
$|

TL;DR

  • Brewnet is a free, open-source CLI tool that deploys 17 Docker services (Gitea, Nginx, Jellyfin, PostgreSQL, Nextcloud, Grafana, and more) with a single command.
  • Supports Linux and macOS. Install via npm install -g @brewnet/cli or build from source.
  • Features: 7-step interactive setup wizard, web admin dashboard, 16 app deployment stacks, custom domain connection via Cloudflare Tunnel, automated backup/restore.
  • No cloud subscription or hosting fees required. Self-host everything on your own hardware.
17Docker-Based Isolation Apps & Clean Uninstall
6+16Languages & Framework Runtimes
3Simple Steps from Install to Domain
100%Open Source CLI + Dashboard
The Problem

Complex hosting setups. Unpredictable costs.
Brewnet solves it.

Web server, Git, DB, Media & File server — all included. Cost: $0. Simple setup wizard, domain in 1 minute! No data collected.

Runtime setup is a nightmare

Go, Java, Kotlin, Node, Python, Rust, React — each runtime has its own version manager, dependencies, and conflicts. Brewnet solves it all in one click with full isolation.

Security is an afterthought

SSH hardening, firewall rules, SSL certificates, credential management — most cloud setups are complex. Brewnet solves all security concerns at once with Cloudflare Tunnel.

No clean way out

Most cloud platforms are hard to clean up even after multiple deletion steps. Brewnet removes everything with a single brewnet uninstall. No leftover configs, containers, or volumes.

Features

Everything you need to self-host like a pro

Stop paying for cloud hosting. Deploy with one command.
Domain, build, deploy — all in one step.

One-Click Server Stack

Go, Java, Kotlin, Node, Python, Rust, React — pick your runtime and launch a production-ready web server in one command. No manual dependency setup, no version conflicts.

Secure by Default

SSH key-only auth, root login disabled, auto-firewall configuration, and encrypted credential propagation across all services.

Clean Uninstall & Rollback

Every change is tracked. Preview removals with --dry-run before executing. Full backup & restore, one-command rollback, and zero leftover containers, volumes, or configs after uninstall.

Cloudflare Tunnel Integration

No port forwarding needed. Works behind NAT/CGNAT with automatic HTTPS and DDoS protection. Paste one Cloudflare token and tunnel, ingress rules, and DNS are configured automatically.

Docker Orchestration

Auto-generates docker-compose.yml for up to 17 services with full container isolation. Each service runs in its own network sandbox with dependency ordering, health checks, and secure credential propagation.

Slack & Telegram Notifications (Pro)

Get real-time alerts on service status, deployments, and errors — directly to Slack or Telegram. No database required. Just paste your webhook URL or bot token and start receiving notifications.

Build, Deploy & Connect

Server setup is just the start. Run your apps, connect custom domains, automate builds, deploy in one command, and monitor everything — the full DevOps lifecycle without the DevOps team.

Cross-Platform Support

macOS 12+ and Ubuntu 20.04+ officially supported. Brewnet auto-detects your OS, adjusts package managers, and handles platform-specific differences so you don’t have to.

Web Dashboard & Monitoring (Pro)

Browser-based setup wizard, real-time service monitoring, web terminal, and a visual interface for managing your entire server stack.

Usage

Get started in 3 simple steps

Install to running server — the CLI wizard handles it all.

01

Install Brewnet

Install via curl (recommended) or npm. Requires Node.js 20+ and Docker 27+. Supports macOS 12+ and Ubuntu 20.04+.

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

Run the Wizard

The interactive 7-step wizard walks you through: system check, project setup, admin account & server components, dev stack & runtime, domain & network, review, and generation & deployment.

brewnet init
03

Manage Services

Add, remove, start, stop, and monitor services with simple commands. Check logs, manage domains, deploy apps.

brewnet status

CLI Commands

  • brewnet initInteractive setup wizard
  • brewnet add <service>Add a service
  • brewnet remove <service>Remove a service
  • brewnet up / downStart / Stop all services
  • brewnet statusShow service status
  • brewnet logs [service]View logs
  • brewnet adminOpen web dashboard
  • brewnet domain connectConnect custom domain
  • brewnet domain tunnelManage Cloudflare Tunnel
  • brewnet backupCreate backup
  • brewnet restore <id>Restore from backup
  • brewnet create-app <name>Scaffold a new app
  • brewnet shutdownGraceful shutdown all services
  • brewnet uninstallRemove all services & data
Services

All your server needs, one platform

17 Docker services ready to deploy.

WEB

Web Server

Traefik, Nginx, Caddy

GIT

Git Server

Gitea with SSH access (port 3022)

DB

Database

PostgreSQL, MySQL, SQLite

CACHE

Cache (Pro)

Redis, Valkey

FILE

File Storage

Nextcloud, MinIO (S3)

MEDIA

Media Server

Jellyfin streaming

SSH

SSH Server (Pro)

OpenSSH, key-based auth, SFTP

MAIL

Mail Server (Pro)

docker-mailserver (SMTP/IMAP)

TUNNEL

Cloudflare Tunnel

Automatic HTTPS, DDoS protection

FB

FileBrowser

Web-based file management UI

DEV

Dev Stack

Go, Java, Kotlin, Node, Python, Rust, React — 16 framework boilerplates

SETUP

Easy Install & Domain

One-command setup, custom domain & Cloudflare integration

Installation

Get up and running in minutes

From install to production — 3 minutes is all you need.

System Requirements

Brewnet system requirements
RequirementMinimumRecommended
OSmacOS 12+ / Ubuntu 20.04+Latest stable
Node.js20+22 LTS
Docker27+Latest (auto-installed if missing)
RAM2 GB4 GB+
Disk20 GB50 GB+ (for media usage)

Docker is not required before installation — brewnet init auto-detects and installs it.

01

npm (Recommended)

Install globally via npm package manager.

Step 1

npm install -g @brewnet/cli

Step 2

brewnet init
02

curl

One-line install script that handles everything.

Step 1

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

Step 2

brewnet init

7-Step Install Wizard

1
System Check
OS, Docker, ports (80/443), disk, RAM verification
2
Project Setup
Project name, path, install type (Full / Partial)
3
Admin & Servers
Admin account, Web/File/DB/Media/SSH selection
4
Dev Stack
Backend language, framework, frontend, FileBrowser (optional)
5
Domain & Network
Local (LAN) or Cloudflare Tunnel, Mail Server (conditional)
6
Review & Confirm
Full config review, credential propagation targets, resource estimate
7
Generate & Deploy
docker-compose.yml generation, image pull, container start, access verification
FAQ

Frequently asked questions

Install & Uninstall

There are two methods:

# Method 1: npm (recommended)
npm install -g @brewnet/cli

# Method 2: Build from source
curl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash

After installation, run brewnet init to start server setup.

# If installed via npm
npm update -g @brewnet/cli

# If installed via curl (re-run the same command)
curl -fsSL https://raw.githubusercontent.com/claude-code-expert/brewnet/main/install.sh | bash
brewnet uninstall            # Interactive uninstall
brewnet uninstall --force    # Uninstall without confirmation
brewnet uninstall --keep-data    # Preserve Docker volumes (DB, etc.)
brewnet uninstall --keep-config  # Keep config files, remove containers only

Removed items: Docker containers, networks, project directories, ~/.brewnet/projects/ metadata

To remove the CLI binary itself:

# If installed via npm
npm uninstall -g @brewnet/cli

# If installed via curl
sudo rm /usr/local/bin/brewnet
rm -rf ~/.brewnet/source
brewnet up                  # Start all services
brewnet down                # Stop all services
brewnet down --volumes      # Stop + delete data
brewnet status              # Check overall status
brewnet logs [service]      # View service logs

You can also use brewnet status --json for JSON-formatted output.

Usage & Operations

brewnet admin   # Automatically opens http://localhost:8088

Use --port 9090 to change the port. Use --foreground for debug mode.

brewnet create-app my-app                    # Interactive selection
brewnet create-app my-app --stack go-gin     # Specify stack
brewnet create-app my-app --database postgres # Specify database

16 stacks supported: 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    # Check tunnel status
brewnet domain tunnel restart   # Restart tunnel

A Cloudflare API Token with Zone:Read, DNS:Edit, and Tunnel:Edit permissions is required.

No. All containers are configured with the restart: unless-stopped policy, so they automatically recover once Docker starts after a reboot.

However, if you manually stopped services with brewnet down, they remain stopped after a reboot. On Docker Desktop (macOS), check Settings → General → "Start Docker Desktop when you sign in".

brewnet backup              # Create a backup
brewnet backup --list       # List backups
brewnet restore <backup-id>          # Restore
brewnet restore <backup-id> --force  # Restore without confirmation

Backup location: ~/.brewnet/backups/ (.tar.gz format)

All config and metadata are stored in ~/.brewnet/. Project directories (docker-compose.yml, app source, etc.) are located at ~/brewnet/<project-name>/.

Troubleshooting

Brewnet automatically attempts to install Docker if it's not found. If auto-installation fails, install manually:

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

Log out and back in after installation to apply docker group membership.

Another program is using that port.

# Check which process is using the port on macOS/Linux
lsof -i :80
lsof -i :8088

# Either stop that process or configure Brewnet to use a different port

Common conflicting services: Apache, Nginx, other Docker containers

Check the following in order:

1. Verify services are running:

brewnet status

2. Check if port 8088 is open:

curl http://localhost:8088

3. Check Docker container status:

docker ps -a | grep brewnet

4. Restart services:

brewnet down && brewnet up

Quick Tunnel URLs are temporary and change when you restart the server. This is normal behavior. If you need a permanent URL, switch to Named Tunnel:

brewnet domain connect

Check the following:

1. DNS propagation: DNS records can take up to several minutes to propagate.

dig my-app.example.com CNAME

2. Cloudflare domain status: Verify the domain is Active (if Pending, nameserver propagation is still in progress).

3. Tunnel status:

brewnet domain tunnel status

4. Restart cloudflared container:

brewnet domain tunnel restart

This occurs when the current access URL is not registered in Nextcloud's trusted domains. Brewnet automatically adds *.trycloudflare.com to trusted domains, but additional configuration may be needed when using a custom domain.

The Jellyfin initial setup URL must use the following format:

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

Using the /web/#/home path will not show the setup wizard.

Common causes of deployment failure:

  • Dockerfile error: Verify a valid Dockerfile exists in the app directory
  • Build dependency issues: Check Docker build logs for specific errors
brewnet logs <app-name>
  • Health check failure: App starts but the /health endpoint is not responding
  • Port mismatch: The port the app is listening on differs from the configured port

Docker images and containers can consume significant disk space.

# Check Docker disk usage
docker system df

# Clean up unused images (caution: may remove images you need)
docker image prune

docker system prune deletes all unused resources — use with caution. Never delete volumes containing important data.

Behind Traefik strip-prefix, Gitea may return URLs without the subpath based on X-Forwarded-Host (e.g., missing /git path). Within Brewnet, authedCloneUrl() automatically generates the correct URL — do not use the clone_url returned directly from the Gitea API.

Thank you! We’ll get back to you within 24 hours.
Get In Touch

Developer Contact

Have a specific inquiry? Send us a message directly. We’ll respond via email or Telegram.

Something went wrong. Please try again or email us at hello@brewnet.dev.