# Beeper **🟢 Communication Service** ## 📋 Service Overview | Property | Value | |----------|-------| | **Service Name** | beeper | | **Host** | Homelab VM | | **Category** | Communication | | **Docker Image** | `ghcr.io/zachatrocity/docker-beeper:latest` | | **Compose File** | `homelab_vm/beeper.yaml` | | **Portainer Stack** | `beeper` (ID=536, homelab-vm endpoint, standalone) | ## 🎯 Purpose Beeper is a universal chat client that bridges many messaging platforms (iMessage, WhatsApp, Telegram, Signal, Discord, etc.) into a single interface. This deployment uses a KasmVNC-based Docker image that runs the Beeper desktop app in a containerized browser session accessible via web browser. > **Note**: Beeper is no longer a standalone product — it merged with Automattic/Texts.com. This image (`docker-beeper`) provides the legacy Beeper Linux desktop client via KasmVNC. ## 🚀 Access | Interface | URL | Notes | |-----------|-----|-------| | Web UI (HTTPS) | `https://:3656` | Use this — accept self-signed cert | | Web UI (HTTP) | `http://:3655` | Redirects to HTTPS, will show error | > **Important**: KasmVNC requires HTTPS. Always access via port **3656** with HTTPS. Accept the self-signed certificate warning in your browser. ## 🔧 Configuration ### Docker Compose (`homelab_vm/beeper.yaml`) ```yaml services: beeper: image: ghcr.io/zachatrocity/docker-beeper:latest container_name: Beeper healthcheck: test: ["CMD-SHELL", "nc -z 127.0.0.1 3000 || exit 1"] interval: 10s timeout: 5s retries: 3 start_period: 90s security_opt: - seccomp:unconfined environment: PUID: 1029 PGID: 100 TZ: America/Los_Angeles volumes: - /home/homelab/docker/beeper:/config:rw ports: - 3655:3000 # HTTP (redirects to HTTPS — use port 3656) - 3656:3001 # HTTPS (use this — accept self-signed cert in browser) shm_size: "2gb" restart: on-failure:5 ``` ### Environment Variables | Variable | Value | Description | |----------|-------|-------------| | `PUID` | `1029` | User ID for file permissions | | `PGID` | `100` | Group ID for file permissions | | `TZ` | `America/Los_Angeles` | Timezone | ### Port Mappings | Host Port | Container Port | Protocol | Purpose | |-----------|----------------|----------|---------| | 3655 | 3000 | TCP | HTTP (redirects to HTTPS — non-functional) | | 3656 | 3001 | TCP | HTTPS KasmVNC (use this) | ### Volume Mappings | Host Path | Container Path | Type | Purpose | |-----------|----------------|------|---------| | `/home/homelab/docker/beeper` | `/config` | bind | App config, sessions, data | ### Notable Settings - **`shm_size: "2gb"`** — Required for Chromium/Electron running inside KasmVNC; prevents crashes - **`seccomp:unconfined`** — Required for Electron sandbox inside container - **`restart: on-failure:5`** — Restart on crash up to 5 times (avoids restart loops) ## 🔧 Portainer Deployment This service is managed as a **standalone Portainer stack** (ID=536) on the homelab-vm endpoint. The compose file is stored in the repo at `homelab_vm/beeper.yaml` for reference, but Portainer manages it with inline content rather than GitOps sync. > **Why not GitOps?** The homelab-vm Portainer Edge Agent deploys all YAML files in `hosts/vms/homelab-vm/` together as a combined compose project. The local monitoring stack (prometheus/grafana, started from `/home/homelab/docker/monitoring/`) conflicts with `monitoring.yaml` in that directory, blocking new GitOps stack creation. The monitoring-stack Portainer entry was removed to avoid the conflict — those containers continue running independently. To update beeper: 1. Edit the stack via Portainer UI → Stacks → beeper → Editor 2. Or use the Portainer API to update stack 536 with new compose content ## 🚨 Troubleshooting **"This application requires a secure connection (HTTPS)"** - You accessed port 3655 (HTTP). Switch to `https://:3656`. - Accept the self-signed certificate warning. **Container keeps restarting** - Check logs: `docker logs Beeper` - The `shm_size: "2gb"` is critical — without it, Chromium OOM-crashes constantly. - Ensure `/home/homelab/docker/beeper` exists and is writable by PUID 1029. **Black screen or blank browser** - Give the container 90 seconds to start (see `start_period` in healthcheck). - Hard-refresh the browser page. **Session lost after restart** - Sessions are persisted to `/home/homelab/docker/beeper` — check that volume is mounted. ### Useful Commands ```bash # View logs docker logs -f Beeper # Restart container docker restart Beeper # Check health docker inspect --format='{{.State.Health.Status}}' Beeper # Verify data directory ls -la /home/homelab/docker/beeper/ ``` ## 📚 Additional Resources - **Image Source**: [zachatrocity/docker-beeper](https://github.com/zachatrocity/docker-beeper) - **Beeper**: [beeper.com](https://www.beeper.com) (now merged with Texts.com/Automattic) --- *Last Updated*: 2026-02-20 *Configuration Source*: `homelab_vm/beeper.yaml`