{"id":13469088,"url":"https://github.com/swarmlet/swarmlet","last_synced_at":"2025-10-04T12:31:09.569Z","repository":{"id":38291071,"uuid":"255919505","full_name":"swarmlet/swarmlet","owner":"swarmlet","description":"A self-hosted, open-source Platform as a Service that enables easy swarm deployments, load balancing, automatic SSL, metrics, analytics and more.","archived":true,"fork":false,"pushed_at":"2023-04-13T17:58:55.000Z","size":10323,"stargazers_count":811,"open_issues_count":55,"forks_count":51,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-10-29T20:23:38.068Z","etag":null,"topics":["analytics","ansible","cluster","deployment","docker-compose","git","glusterfs","letsencrypt","loadbalancing","metrics","portainer","self-hosted","server-cluster","swarm","swarmlet","swarmpit","traefik"],"latest_commit_sha":null,"homepage":"https://swarmlet.dev","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swarmlet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"open_collective":"swarmlet"}},"created_at":"2020-04-15T13:06:59.000Z","updated_at":"2024-10-12T06:07:06.000Z","dependencies_parsed_at":"2023-02-13T17:41:19.740Z","dependency_job_id":null,"html_url":"https://github.com/swarmlet/swarmlet","commit_stats":{"total_commits":658,"total_committers":10,"mean_commits":65.8,"dds":0.09878419452887544,"last_synced_commit":"eae8fb402cb33a7b3bb09fb64ac74f86eb2998aa"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmlet%2Fswarmlet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmlet%2Fswarmlet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmlet%2Fswarmlet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swarmlet%2Fswarmlet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swarmlet","download_url":"https://codeload.github.com/swarmlet/swarmlet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235252924,"owners_count":18960468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["analytics","ansible","cluster","deployment","docker-compose","git","glusterfs","letsencrypt","loadbalancing","metrics","portainer","self-hosted","server-cluster","swarm","swarmlet","swarmpit","traefik"],"created_at":"2024-07-31T15:01:26.042Z","updated_at":"2025-10-04T12:31:02.058Z","avatar_url":"https://github.com/swarmlet.png","language":"Shell","funding_links":["https://opencollective.com/swarmlet"],"categories":["Shell","git"],"sub_categories":[],"readme":"\u003cdiv\u003e\n  \u003cimg align=\"left\" src=\"assets/logo.png\" width=\"175\" alt=\"logo\" /\u003e\n  \u003ch1 align=\"left\"\u003eSwarmlet\u003c/h1\u003e\n\u003c/div\u003e\n\n**[Website](https://swarmlet.dev)** — **[Documentation](https://swarmlet.dev/docs)** — **[Demo 🧞‍♂](https://vimeo.com/412918465)**\n\nSwarmlet is a self-hosted, open-source Platform as a Service that runs on any single server. It's mainly intended for use with multiple servers, a server cluster / swarm. Heavily inspired by **[Dokku](http://dokku.viewdocs.io/dokku/)**.\n\n---\n\n![stability-wip](https://img.shields.io/badge/stability-work_in_progress-lightgrey.svg?style=flat-square)\n\n### NOTE\n\nWork In Progress.  \nThis project is in beta and definitely not production-ready yet.\n\n### _TL;DR_\n\nWhy choose Kubernetes over Docker + Docker Swarm?  \nWhy not automate some deployment things to get a pretty simple, versatile and solid setup?  \nBonus, you're familiar with Docker already.\n\nHow:  \nInstall `swarmlet` on a server. Develop projects locally as usual, add a `docker-compose.yml` file to describe your application stack, add a git remote, e.g. [`git remote add swarm git@my-swarm:my-project`](https://swarmlet.dev/docs/getting-started/ssh-key-setup).  \nThen simply `git push swarm master` to deploy the project on your swarm (server cluster). A load balancer, SSL, and metrics/logging (optional) are enabled by default.\n\n## What is Swarmlet?\n\nSwarmlet is a thin wrapper around [Docker Compose](https://docs.docker.com/compose/) and [Docker Swarm mode](https://docs.docker.com/engine/swarm/).  \nA few core services, [Traefik](https://github.com/containous/traefik) (v2.3), [Let's Encrypt](https://letsencrypt.org), [Ansible](https://www.ansible.com/) and [GlusterFS](https://www.gluster.org/) are included by default.  \nThese enable automatic SSL, load balancing, swarm state management and distributed file storage.  \nLet's Encrypt wildcard certificates support - [more info](https://doc.traefik.io/traefik/https/acme/#wildcard-domains).\n\nDuring the installation you can choose to install [Matamo](https://matomo.org/), [Portainer](https://www.portainer.io/), [Swarmpit](https://swarmpit.io) and [Swarmprom](https://github.com/stefanprodan/swarmprom).  \nThese optional services are included to provide analytics and various metrics dashboards.\n\nThis project is aimed at developers that want to experiment with application deployment in a flexible multi-server / high-availability environment. The goal is to be able to set up your own swarm and deploy your app(s) in minutes.\n\n## Getting started\n\n1. Install Swarmlet on a new VPS running Ubuntu 18.04 x64 as root.\n1. [Edit your local SSH config](https://swarmlet.dev/docs/getting-started/ssh-key-setup) to use `ssh swarm` instead of `ssh root@123.23.12.123`\n1. Use an existing project, or clone one of the [examples](https://swarmlet.dev/docs/examples/static-site)\n1. Add a [`docker-compose.yml`](https://swarmlet.dev/docs/getting-started/deploying-applications) file in the root of your project\n1. Add a git remote: [`git remote add swarm git@swarm:my-project`](https://swarmlet.dev/docs/getting-started/ssh-key-setup)\n1. Deploy your application stack to the swarm using `git push swarm master`\n\n\u003e [Example application setup and deployment guide](https://swarmlet.dev/docs/getting-started/deploying-applications#example-app-setup)\n\n## Installation\n\nMake sure you have a (sub) domain available which is pointed to your server, this is necessary to access the Traefik or Portainer/Matomo dashboards located at e.g. `portainer.your-domain.com`.\n\nTo install the latest version of Swarmlet, log in to your server as root and run:\n\n```shell\ncurl -fsSL https://get.swarmlet.dev | bash\n```\n\nThe installation should take a few minutes to complete.\n\n\u003e [Full installation instructions can be found here](https://swarmlet.dev/docs/getting-started/installation)\n\n### Custom installation\n\n```shell\n# Headless (noninteractive) installation:\ncurl -fsSL https://get.swarmlet.dev | bash -s \\\n  INSTALLATION_TYPE=noninteractive \\\n  INSTALL_ZSH=true \\\n  INSTALL_MODULES=\"matomo swarmpit\" \\\n  NEW_HOSTNAME=swarm-manager-1 \\\n  SWARMLET_USERNAME=admin \\\n  SWARMLET_PASSWORD=nicepassword \\\n  ROOT_DOMAIN=dev.mydomain.com\n```\n\n## Examples\n\nSwarmlet includes various examples of services that you can deploy to your server cluster with a simple `git push`.\n\n- [swarmlet-website - The swarmlet.dev website](https://github.com/swarmlet/swarmlet-website)\n- [get-swarmlet - The get.swarmlet.dev install script](https://github.com/swarmlet/swarmlet/tree/master/examples)\n- [Basic example - Static site](https://github.com/swarmlet/swarmlet/tree/master/examples)\n- [Basic example - Python web server + Redis](https://github.com/swarmlet/swarmlet/tree/master/examples)\n- [Moderate example - NGINX + React app + Node.js API](https://github.com/swarmlet/swarmlet/tree/master/examples)\n- (FIX) [Advanced example - NGINX + React app + Node.js API + CMS + staging/production](https://github.com/swarmlet/swarmlet/tree/master/examples)\n- (FIX) [GitLab CE](https://github.com/swarmlet/swarmlet/tree/master/examples) (self-hosted)\n- (FIX) [GitLab Runner](https://github.com/swarmlet/swarmlet/tree/master/examples) (self-hosted)\n\nAll these examples and the [Swarmlet documentation and website](https://swarmlet.dev) are running on a €5/mo _single_ server 'cluster', using Swarmlet for deployments.\n\n---\n\n[Proudly sponsored by Passionate People](https://passionatepeople.io)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswarmlet%2Fswarmlet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswarmlet%2Fswarmlet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswarmlet%2Fswarmlet/lists"}