ShellRS
ShellRS는 Rust로 작성된 무료 오픈소스 SSH 클라이언트
자체 제어면, MQTT 데이터면, 운영자 콘솔을 실행하고 Linux 장치를 등록·TLS MQTT로 상태 전송, 아이덴티티·정책을 직접 관리
Run your own control plane, MQTT data plane, and operator console. Enroll Linux devices, stream status over TLS MQTT, and keep identity and policy on infrastructure you operate.
개발 도구Python · TypeScriptGitHub @meteor-edge온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Self-hosted, open-source (Apache 2.0) fleet management for Linux edge devices: deploy, monitor, update, and reach devices via WireGuard and browser SSH.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Self-hosted fleet platform for Linux devices.
MeteorCloud is the control plane, operator console, MQTT data plane, and device agent for managing edge fleets you own. Enroll devices, organize them by type and group, ship artifacts, run commands over MQTT, and keep operator access multi-tenant and auditable — without sending device data to a third-party SaaS.
Website: meteor-edge.com
| You host it | Docker Compose on a VM/EC2, or Helm on a cluster you already run |
| Multi-tenant | Organizations, memberships, RBAC, and optional device-group scopes |
| Device lifecycle | Registration tokens, device-initiated enrollment, heartbeat, inventory |
| MQTT-ready | TLS broker (EMQX), per-device credentials, ACL, ingest, live telemetry |
| Artifacts | OS images, firmware, compose bundles — metadata in Postgres, blobs in filesystem or S3 |
| Replaceable infra | PostgreSQL required; Redis, MQTT, and object storage selected by config |
MeteorCloud is split into three planes. The console is the operator UI; it talks only to the control plane.
| Plane | Path | Role |
|---|---|---|
| Device plane | src/device-plane/agent/ | meteorcli on the device: enroll, heartbeat, inventory, MQTT client |
| Data plane | src/data-plane/ | Platform MQTT gateway: subscribe/publish via EMQX, forward ingest to the control plane |
| Control plane | src/control-plane/ | Identity, tenancy, device registry, artifacts, MQTT policy, operator API, persistence |
┌─────────────────┐ ┌─────────────────┐ ┌──────────────────────┐
│ Device plane │ │ Data plane │ │ Control plane │
│ (meteorcli) │ │ (MQTT gateway) │ │ (API + Postgres) │
└────────┬────────┘ └────────┬────────┘ └──────────┬───────────┘
│ │ │
│ HTTPS enroll / │ │
│ heartbeat / auth ├────────────────────────►│
│────────────────────────────────────────────────►│
│ │ │
│ MQTT telemetry / │ HTTP ingest │
│ status ──► EMQX ────►│────────────────────────►│
│ │ │
│◄── MQTT commands ◄────│◄── HTTP publish ────────│
│ EMQX │ │
Device → cloud (typical path)
More detail: docs/architecture.md.
Compose on your machine. Not for production.
git clone https://github.com/meteor-edge/meteor-cloud.git
cd meteor-cloud
make dev
make seed # [email protected] / dev-password-123
| Surface | URL |
|---|---|
| Console | http://localhost:5173 |
| Control plane | http://localhost:8000 |
| OpenAPI | http://localhost:8000/docs |
| Data plane health | http://localhost:8081/health |
| MQTT TLS | mqtts://localhost:8883 |
| EMQX dashboard (dev) | http://localhost:18083 |
Choose bundled services with COMPOSE_PROFILES in deploy/compose/.env (postgres, redis, minio, mqtt, emqx). Start one module: make dev-control-plane, make dev-data-plane, make dev-console. Stop: make stop.
Kubernetes (local k3d + Helm):
make k8s-up && make k8s-deploy && make k8s-status
See docs/getting-started.md and docs/development.md.
On the server that will host MeteorCloud (on-prem VM or an existing EC2). Ansible installs Docker and starts production Compose (optional WireGuard).
# Ubuntu / Debian: sudo apt-get update && sudo apt-get install -y git make
# RHEL / Rocky / Alma: sudo dnf install -y git make
git clone https://github.com/meteor-edge/meteor-cloud.git
cd meteor-cloud
make up PLATFORM_DOMAIN=fleet.example.com
Create the printed DNS records (fleet.example.com, *.fleet.example.com,
vpn.fleet.example.com) and open https://fleet.example.com. Login and secrets
are printed at the end (~/.meteorcloud/secrets.env). Stop with make down.
Guide: docs/install-quickstart.md · docs/dns.md.
To create a new AWS EC2 from a laptop: make aws-up (docs/aws-deployment.md). Do not run make aws-up on the VM.
Two independent paths; same images and settings.
| Docker Compose + Ansible | Kubernetes + Helm | |
|---|---|---|
| For | One VM, EC2, or on-prem server | An existing cluster (k3s, GKE, EKS, AKS, …) |
| Files | deploy/compose/, deploy/ansible/ | deploy/kubernetes/helm/meteorcloud/ |
| Install | make up on the VM, or ansible-playbook playbooks/site.yml / make aws-up (new EC2) | helm upgrade --install |
| Guide | docs/deployment.md | docs/kubernetes.md |
MeteorCloud does not provision or manage Kubernetes clusters. The Helm chart installs into a cluster you already have. Ansible only prepares servers and runs Compose; it never deploys to Kubernetes. Terraform (infrastructure/terraform/aws) creates the AWS EC2 host for the Compose path.
On a VM you already have: clone, make up. To create a new AWS EC2 from a laptop, make aws-up (or edge-installer apply) runs Terraform then Ansible. Fresh-instance proof: GitHub Actions → EC2 smoke test (docs/aws-ci.md).
| Dependency | Status | Options |
|---|---|---|
| PostgreSQL | Required | Bundled container, or external |
| Artifact storage | Required | Filesystem volume, AWS S3, or any S3-compatible API |
| MQTT broker | Optional | Bundled or external EMQX; off by default |
| Redis | Optional | Shared rate limits across API replicas; in-memory otherwise |
| Kafka, ClickHouse | Not used | Not deployed |
The smallest install runs PostgreSQL, the API, the console, and a reverse proxy (Traefik with Compose, your ingress with Kubernetes).
├── src/
│ ├── control-plane/ # FastAPI (app.*), Dockerfile
│ ├── data-plane/ # MQTT gateway (data_plane.*), Dockerfile
│ └── device-plane/agent/ # meteorcli
├── console/ # operator UI, Dockerfile (nginx)
├── deploy/
│ ├── compose/ # Docker Compose files, .env.example
│ ├── ansible/ # server preparation + Compose deployment
│ └── kubernetes/helm/ # Helm chart
├── infrastructure/
│ ├── terraform/aws/ # EC2 host for the Compose path
│ └── installer/ # edge-installer (Terraform + Ansible on AWS)
├── contracts/ # HTTP JSON between planes
├── scripts/ # smoke tests, certificates, CI helpers
├── docs/
└── Makefile
Start with Getting started, then the full index: docs/README.md. Contributors: CONTRIBUTING.md. Coding agents: AGENTS.md.
| Doc | Topic |
|---|---|
| Getting started | Laptop: make dev + first device |
| Concepts | Three planes, orgs, devices |
| API overview | Control-plane HTTP map |
| meteorcli | Device CLI |
| Architecture | Planes, contracts, git vs deploy vs artifacts |
| Install quickstart | make up on a VM; make aws-up for a new EC2 |
| Deployment · Kubernetes | Production install |
Website: meteor-edge.com.
Copyright © Meteor Edge contributors.
Licensed under the Apache License, Version 2.0.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.