{"id":33282276,"url":"https://github.com/dployr-io/dployr","last_synced_at":"2026-05-23T00:09:35.581Z","repository":{"id":301462620,"uuid":"1007175026","full_name":"dployr-io/dployr","owner":"dployr-io","description":"Your app, your server, your rules!","archived":false,"fork":false,"pushed_at":"2026-04-26T01:13:22.000Z","size":24669,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-26T02:25:14.183Z","etag":null,"topics":["deployment","self-hosted","server-setup"],"latest_commit_sha":null,"homepage":"https://dployr.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dployr-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","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":"2025-06-23T15:18:33.000Z","updated_at":"2026-04-26T01:13:26.000Z","dependencies_parsed_at":"2026-01-16T19:02:42.320Z","dependency_job_id":null,"html_url":"https://github.com/dployr-io/dployr","commit_stats":null,"previous_names":["tobimadehin/dployr","dployr-io/dployr"],"tags_count":181,"template":false,"template_full_name":null,"purl":"pkg:github/dployr-io/dployr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dployr-io%2Fdployr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dployr-io%2Fdployr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dployr-io%2Fdployr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dployr-io%2Fdployr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dployr-io","download_url":"https://codeload.github.com/dployr-io/dployr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dployr-io%2Fdployr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32318417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"ssl_error","status_checked_at":"2026-04-26T23:26:25.802Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["deployment","self-hosted","server-setup"],"created_at":"2025-11-17T14:00:31.632Z","updated_at":"2026-04-27T01:01:27.412Z","avatar_url":"https://github.com/dployr-io.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dployr\n\n*Your app, your server, your rules!*\n\n[![Tests](https://github.com/dployr-io/dployr/actions/workflows/tests.yml/badge.svg)](https://github.com/dployr-io/dployr/actions/workflows/tests.yml)\n[![Go Reference](https://pkg.go.dev/badge/github.com/dployr-io/dployr.svg)](https://pkg.go.dev/github.com/dployr-io/dployr)\n[![Go Report Card](https://goreportcard.com/badge/github.com/dployr-io/dployr)](https://goreportcard.com/report/github.com/dployr-io/dployr)\n[![Release](https://img.shields.io/github/v/release/dployr-io/dployr)](https://github.com/dployr-io/dployr/releases)\n[![License: Apache License, Version 2.0](https://img.shields.io/badge/License-Apache%20License%2C%20Version%202.0-blue.svg)](LICENSE)\n[![Go](https://img.shields.io/badge/Go-1.24%2B-00ADD8?logo=go)](https://go.dev/dl/)\n\n## Overview\n\nDployr is a self‑hosted platform with a globally distributed control‑plane (“base”) and lightweight daemon that run on your infrastructure.\n\nYou interact with base through:\n- The web dashboard (dployr‑app), or\n- The CLI (dployr‑cli)\n\nBoth use the same programmatic, RBAC‑aware API with full auditing. Anything you do in the UI can be scripted with the CLI or called directly.\n\nIt consists of four components:\n\n- dployr‑base — Globally distributed control‑plane (API, scheduling, storage).\n- dployrd — Daemon on each instance. Connects to base over mTLS, executes tasks, and reports status.\n- dployr‑cli — RBAC‑aware command‑line client that talks to base from anywhere.\n- dployr‑app — Web dashboard built on the same API for managing projects, deployments, and environments.\n\n## Quickstart (5 minutes)\n\nLinux/macOS\n\n```bash\n# First time install\ncurl -sSL https://raw.githubusercontent.com/dployr-io/dployr/master/install.sh \\\n  | bash -s -- --token \"\u003cbootstrap_token\u003e\"\n\n# Install latest version\ncurl -sSL https://raw.githubusercontent.com/dployr-io/dployr/master/install.sh | bash\n\n# Start the daemon\ndployrd\n```\n\nWindows (PowerShell as Administrator)\n\n```powershell\niwr \"https://raw.githubusercontent.com/dployr-io/dployr/master/install.ps1\" -OutFile install.ps1\n.\\install.ps1  # add -Token $env:DPLOYR_INSTALL_TOKEN (first time install)\n\ndployrd.exe\n```\n\n## Verify\n\n- Version: `dployrd --version`\n- Logs (JSON): `/var/log/dployrd/app.log` (Linux/macOS) or ProgramData on Windows\n- Daemon should start and log a websocket mTLS connection attempt to Base.\n\n## Quick deploy\n\n```bash\ndployr deploy \\\n  --name hello-world \\\n  --source remote \\\n  --runtime nodejs \\\n  --version 20 \\\n  --remote https://github.com/dployr-io/dployr-examples \\\n  --branch master \\\n  --build-cmd \"npm install\" \\\n  --run-cmd \"npm start\" \\\n  --working-dir \"nodejs\" \\\n  --port 3000\n```\n\n## Concepts\n\n- CLI vs Daemon: CLI issues commands; daemon (`dployrd`) executes and syncs with Base.\n- Sync: long‑lived WSS + mTLS. Daemon generates a client cert and publishes it to Base.\n- Tokens: `bootstrap_token` (long‑lived, stored in DB) → exchanged for short‑lived `access_token` (auto‑refreshed).\n- Persistence: SQLite for instance metadata, tokens, deployments, services, task results.\n- Logging: structured JSON to stdout + `/var/log/dployrd/app.log` for remote debugging.\n\n## Troubleshooting \n\n- No bootstrap token: set it in config or rerun installer with `--token`.\n- WS auth errors (401/403): daemon clears `access_token` and reacquires; check logs.\n- mTLS/cert issues: ensure pinned CA/cert path is correct if you customized certs.\n- Permissions: service managers may require admin/root for install/start.\n- Where are logs? `/var/log/dployrd/app.log` (Linux/macOS). On Windows, see ProgramData/dployr.\n\n---\n\n## Dependencies\n\n`dployr` relies on a few external tools to provide core functionality:\n| Dependency | Purpose | Platform |\n|-------------|----------|-----------|\n| [Caddy](https://caddyserver.com) | Reverse proxy and automatic HTTPS management | All |\n| [vfox](https://version-fox.dev) | Runtime and version management (Node, Python, Go, etc.) | All |\n| [SQLite](https://sqlite.org) | Embedded database for persistence and data storage | All |\n| [systemd](https://systemd.io) | Linux service manager for running `dployrd` as a background daemon | Linux |\n| [launchd](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html) | macOS service manager for running `dployrd` as a background daemon | macOS |\n| [NSSM](https://nssm.cc) | Windows service manager for running `dployrd` as a background daemon | Windows |\n\u003e **Note:** Each operating system uses its native service manager: `systemd` on Linux, `launchd` on macOS, and `NSSM` on Windows.\nThese binaries are automatically downloaded and configured during installation when possible.\n\n---\n\n## Supported Runtimes\n\n- Static files\n- Node.js\n- Python\n- Go\n- PHP\n- Ruby\n- .NET\n- Java\n- Docker containers\n- K3s clusters *(roadmap)*\n- Custom runtimes\n\n---\n\n## Installation\n\n### Quick Install\n\n**Linux/macOS**\n```bash\n# First-time setup \ncurl -sSL https://raw.githubusercontent.com/dployr-io/dployr/master/install.sh \\\n  | bash -s -- --token \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\"\n\n# Install with custom instance ID\ncurl -sSL https://raw.githubusercontent.com/dployr-io/dployr/master/install.sh \\\n  | bash -s -- --token \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\" --instance \"prod-server-01\"\n\n# Install latest version \ncurl -sSL https://raw.githubusercontent.com/dployr-io/dployr/master/install.sh \\\n  | bash \n\n# Install specific version\ncurl -sSL https://raw.githubusercontent.com/dployr-io/dployr/master/install.sh \\\n  | bash -s -- --version v0.1.1-beta.17 \n```\n\u003e **Note:** You’ll need administrator privileges (`sudo`) to install, but the dployr daemon itself runs as `dployr` user, not as `root`. For details about permissions and setup, visit https://dployr.io/docs/installation.html.\n\n\u003e **Config locations:**\n\u003e - **Linux**: `/etc/dployr/config.toml`\n\u003e - **macOS**: `/usr/local/etc/dployr/config.toml`  \n\u003e - **Windows**: `C:\\ProgramData\\dployr\\config.toml`\n\n### Manual Installation\n\n**Linux**\n```bash\n# Download the latest release\ncurl -L https://github.com/dployr-io/dployr/releases/latest/download/dployr-Linux-x86_64.tar.gz -o dployr.tar.gz\n\n# Extract and install\ntar -xzf dployr.tar.gz\nsudo mv dployr dployrd /usr/local/bin/\nchmod +x /usr/local/bin/dployr /usr/local/bin/dployrd\n\n# Install Caddy \nsudo apt update \u0026\u0026 sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https\ncurl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg\ncurl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list\nsudo apt update \u0026\u0026 sudo apt install caddy\n```\n\n**Windows (PowerShell as Administrator)**\n\n```powershell\n# Install latest version\nInvoke-WebRequest -Uri \"https://raw.githubusercontent.com/dployr-io/dployr/master/install.ps1\" -OutFile \"install.ps1\"\n.\\install.ps1\n\n# Install specific version\nInvoke-WebRequest -Uri \"https://raw.githubusercontent.com/dployr-io/dployr/master/install.ps1\" -OutFile \"install.ps1\"\n.\\install.ps1 -Version v0.1.1-beta.17 -Token $env:DPLOYR_INSTALL_TOKEN\n\n# Install with custom instance ID\n.\\install.ps1 -Token $env:DPLOYR_INSTALL_TOKEN -Instance \"prod-server-01\"\n\n# Custom install directory\n.\\install.ps1 -Version latest -InstallDir \"C:\\dployr\" -Token $env:DPLOYR_INSTALL_TOKEN\n```\n\n---\n\n### Package Managers\n\n**Homebrew (macOS)**\n\n```bash\nbrew install dployr-io/dployr/dployr\n```\n\n**Chocolatey (Windows)**\n\n```powershell\nchoco install dployr\n```\n\n**Scoop (Windows)**\n\n```powershell\nscoop bucket add dployr https://github.com/dployr-io/scoop-dployr\nscoop install dployr\n```\n\n---\n\n## Configuration\n\nConfiguration files are stored at `~/.dployr/config.toml`:\n\n```toml\naddress = \"localhost\"\nport = 7879\nmax-workers = 5\nsecret = \"your-secret-key\"\n```\n\n---\n\n## Usage\n\n### Start the Daemon\n\n```bash\ndployrd\n```\n\n### Authenticate\n\n```bash\ndployr login --email user@example.com\n```\n\n### Deploy an Application\n\n```bash\ndployr deploy \\\n  --name old-county-times \\\n  --source remote \\\n  --runtime php \\\n  --version 8.3 \\\n  --remote https://github.com/dployr-io/dployr-examples \\\n  --branch master \\\n  --build-cmd \"composer install\" \\\n  --run-cmd \"php -S localhost:3000\" \\\n  --working-dir \"php\" \\\n  --port 3000\n```\nFor detailed deployment examples—including interactive guides—visit: https://dployr.io/docs/quickstart.html\n\n### List Deployments\n\n```bash\ndployr list\n```\n\n### Manage Services\n\n```bash\ndployr services list\ndployr services get \u003cservice-id\u003e\n```\n\n### Configure Proxy\n\n```bash\ndployr proxy add --domain myapp.com --upstream http://localhost:3000\ndployr proxy list\ndployr proxy status\n```\n\n---\n\n## API\n\nThe daemon exposes a REST API on port `7879` (configurable).\n\n* Full spec: [api/openapi.yaml](api/openapi.yaml)\n* Interactive docs: [Quickstart](https://dployr.io/docs/quickstart.html)\n\n### Authentication\n\nMost endpoints require JWT authentication:\n\n```\nAuthorization: Bearer \u003cjwt-token\u003e\n```\n\n---\n\n## Development\n\n### Prerequisites\n\n* Go **1.24+**\n* Git\n\n### Build\n\n```bash\nmake build          # Build both binaries\nmake build-cli      # Build CLI only\nmake build-daemon   # Build daemon only\n```\n\n### Test\n\n```bash\nmake test\n```\n\n### Release\n\n```bash\n./scripts/release.sh patch    # Patch release\n./scripts/release.sh minor    # Minor release\n./scripts/release.sh major    # Major release\n```\n\n---\n\n## License\n\nApache License, Version 2.0 — see [LICENSE](LICENSE) for details.\n\n---\n\n## Documentation\n\nComplete documentation available at\n [https://dployr.io/docs/quickstart.html](https://dployr.io/docs/quickstart.html)\n\n---\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdployr-io%2Fdployr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdployr-io%2Fdployr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdployr-io%2Fdployr/lists"}