{"id":3757,"url":"https://github.com/lelylan/lelylan","last_synced_at":"2025-12-26T19:32:17.723Z","repository":{"id":4094182,"uuid":"5202066","full_name":"lelylan/lelylan","owner":"lelylan","description":"Open Source Lightweight Microservices Architecture for the Internet of Things. For developers.","archived":false,"fork":false,"pushed_at":"2017-03-12T09:14:13.000Z","size":184,"stargazers_count":1525,"open_issues_count":21,"forks_count":93,"subscribers_count":60,"default_branch":"master","last_synced_at":"2024-08-16T16:49:22.799Z","etag":null,"topics":["architecture","docker","hardware","iot","lelylan","microservice"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lelylan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-07-27T08:03:24.000Z","updated_at":"2024-07-02T04:42:20.000Z","dependencies_parsed_at":"2022-08-27T00:01:24.084Z","dependency_job_id":null,"html_url":"https://github.com/lelylan/lelylan","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lelylan%2Flelylan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lelylan%2Flelylan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lelylan%2Flelylan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lelylan%2Flelylan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lelylan","download_url":"https://codeload.github.com/lelylan/lelylan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228576888,"owners_count":17939645,"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":["architecture","docker","hardware","iot","lelylan","microservice"],"created_at":"2024-01-05T20:16:50.576Z","updated_at":"2025-12-26T19:32:17.645Z","avatar_url":"https://github.com/lelylan.png","language":null,"readme":"# Lelylan. Open Source Internet of Things\n\n\nLelylan is an IoT cloud platform based on a lightweight microservices architecture.\n\nThe Lelylan platform is both hardware-agnostic and platform-agnostic. This means that you can connect any hardware, from the ESP8266 to the most professional embedded hardware solution and everything in between - and it can run on any public cloud, your own private datacenter, or even in a hybrid environment, whether virtualized or bare metal.\n\n[![Lelylan Logo](https://raw.githubusercontent.com/lelylan/lelylan/master/public/logo-lelylan.png)](http://lelylan.com)\n\n\n### Notes\n\nThis repository defines the architecture documentation. Check out the [microservices list](https://github.com/lelylan/lelylan#development) for the code implementation.\n\n\n### Why Lelylan\n\nResearch in the Internet of Things is global and growing fast, but lacks the standard tools. Many companies are building their own solutions. By sharing what we have learned during the years, we want to create a shared code base with a clear focus on developers. To see Lelylan in action checkout the [tutorials](http://dev.lelylan.com/#overview-tutorials) in the dev center.\n\n\n### Resources\n\n* [Architecture](http://dev.lelylan.com/architecture) (request life cycle)\n* [Internet of Things API](http://dev.lelylan.com/api) (how it works)\n* [Blog](http://lelylan.com) (latest from the community)\n\n\n\n# Getting Started\n\n### Requirements\n\nLelylan is tested against\n\n* Ruby MRI ~1.9.3\n* Node ~0.8.8\n* MongoDB ~2.6\n* Redis ~2.6\n\n(remember to run the `mongod` and `redis-server`)\n\n## Setup\n\n* [Install MongoDB](https://docs.mongodb.org/manual/installation/)\n* [Install Redis](http://redis.io/download)\n\n\n## Installation\n\n### Development\n\nLelylan is composed by different microservices.\nFollow the installation guidelines for each of them.\n\n| Microservice  | Description |\n| ------------- | ------------- |\n| [API Proxy](https://github.com/lelylan/api-proxy) | Proxy API |\n| [Devices API](https://github.com/lelylan/devices)  | Device monitoring and control |\n| [Types API](https://github.com/lelylan/types) | Device type structure |\n| [Subscriptions API](https://github.com/lelylan/subscriptions) | Realtime subscription |\n| [Profiles API](https://github.com/lelylan/profiles) | Profile information |\n| [OAuth 2.0](https://github.com/lelylan/people) | User authentication and authorization  |\n| [Physical Proxy](https://github.com/lelylan/physicals) | Forward requests to the physical world |\n| [MQTT Node](https://github.com/lelylan/nodes) | Forward and receive MQTT requests |\n| [MQTT Server](https://github.com/lelylan/mqtt) | MQTT server/broker |\n| [Webhooks](https://github.com/lelylan/webhooks) | Realtime HTTP notification |\n| [Websockets](https://github.com/lelylan/websockets) | Full-duplex communication over TCP |\n| [Dev Center](https://github.com/lelylan/dev) | Lelylan Dev Center |\n| [Devices Dashboard](https://github.com/lelylan/devices-dashboard-ng) | Lelylan Devices Dashboard |\n| [Types Dashboard](https://github.com/lelylan/types-dashboard-ng) | Lelylan Types Dashboard |\n\nYou can now access the [APIs]((http://dev.lelylan.com/api)) from `http://0.0.0.0:8200` (API proxy URL).\n\n#### Development Environment Variable\n\nDuring deployment, every microservice needs to be set to the following environment variables (remember to change them with your own microservices, mongodb, redis and cache URLs).\n\n| Environment Variable | Description |\n| ------------- | ------------- |\n| `RACK_ENV=development` | Development rack environment |\n| `RAILS_ENV=development` | Development rails environment |\n| `NODE_ENV=development` | Development node environment |\n| `LELYLAN_API_URL` | Api Proxy microservice URL |\n| `LELYLAN_API_HOST` | Api Proxy microservice URL |\n| `LELYLAN_DEV_URL=dev.lelylan.com` | Dev Center microservice URL |\n| `LELYLAN_PEOPLE_URL=people.lelylan.com` | OAuth 2.0 microservice URL |\n| `LELYLAN_DEVICES_URL=devices.lelylan.com` | Devices API microservice URL |\n| `LELYLAN_TYPES_URL=types.lelylan.com` | Types API microservice URL |\n| `LELYLAN_SUBSCRIPTIONS_URL=subscriptions.lelylan.com` | Subs. API microservice URL|\n| `LELYLAN_PROFILES_URL=profiles.lelylan.com` | Profiles API microservice URL |\n| `MONGOLAB_PEOPLE_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | OAuth 2.0 MongoDB URL|\n| `MONGOLAB_DEVICES_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | Devices API MongoDB URL|\n| `MONGOLAB_TYPES_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | Types API MongoDB URL|\n| `MONGOLAB_JOBS_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | Event Bus MongoDB URL |\n| `MONGOLAB_SUBSCRIPTIONS_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | Subs. MongoDB URL |\n| `MEMCACHIER_SERVERS=\u003chost\u003e:\u003cport\u003e` | Cache server |\n| `MEMCACHIER_USERNAME=\u003cusername\u003e` | Cache server username |\n| `MEMCACHIER_PASSWORD=\u003cpassword\u003e` | Cache server password|\n| `REDIS_URL=redis://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/` | Background Job Redis URL |\n| `REDIS_RATE_LIMIT_URL=redis://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/` | Late Limit Redis URL |\n\nWe are studying solutions such as Docker, Mesos, and Ansible to simplify the installation process. If you are experimenting in the same area get in touch with [lelylan team](http://dev.lelylan.com/api).\n\n#### Docker Development Installation\n- Configure environment variables in docker-compose-dev.yml\n- Run docker compose\n```bash\ndocker-compose -f docker-compose-dev.yml up -d\n```\n\n##### Use subdomains for all microservices\n\n###### Sed to replace domains\n```bash\nsed -i '/VIRTUAL_HOST/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/DEFAULT_HOST/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/PUBLIC_URL/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/LELYLAN_DEV_URL/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/PUBLIC_HOST/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/LELYLAN_PROXY_URL/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/LELYLAN_API_HOST/ s/$/.lelylan.com/' docker-compose-dev.yml\n```\n\n| Microservice  | Default Domian | Domian after sed commands |\n| ------------- | ------------- | ------------- |\n| api-proxy | api-proxy | api-proxy.lelylan.com |\n| devices | devices | devices.lelylan.com |\n| types | types | types.lelylan.com |\n| subscriptions | subscriptions | subscriptions.lelylan.com |\n| profiles | profiles | profiles.lelylan.com |\n| people | people | people.lelylan.com |\n| physicals | physicals | physicals.lelylan.com |\n| nodes | nodes | nodes.lelylan.com |\n| mqtt | mqtt | mqtt.lelylan.com |\n| webhooks | webhooks | webhooks.lelylan.com |\n| websockets | websockets | websockets.lelylan.com |\n| dev | dev-center | dev-center.lelylan.com |\n| devices-dashboard-ng | devices-dashboard-ng | devices-dashboard-ng.lelylan.com |\n| types-dashboard-ng | types-dashboard-ng | types-dashboard-ng.lelylan.com |\n\n### Production\n\nLelylan is composed by different microservices.\nFollow the installation guidelines for each of them.\n\n| Microservice  | Description |\n| ------------- | ------------- |\n| [API Proxy](https://github.com/lelylan/api-proxy) | Proxy API |\n| [Devices API](https://github.com/lelylan/devices)  | Device monitoring and control |\n| [Types API](https://github.com/lelylan/types) | Device type structure |\n| [Subscriptions API](https://github.com/lelylan/subscriptions) | Realtime subscription |\n| [Profiles API](https://github.com/lelylan/profiles) | Profile information |\n| [OAuth 2.0](https://github.com/lelylan/people) | User authentication and authorization  |\n| [Physical Proxy](https://github.com/lelylan/physicals) | Forward requests to the physical world |\n| [MQTT Node](https://github.com/lelylan/nodes) | Forward and receive MQTT requests |\n| [MQTT Server](https://github.com/lelylan/mqtt) | MQTT server/broker |\n| [Webhooks](https://github.com/lelylan/webhooks) | Realtime HTTP notification |\n| [Websockets](https://github.com/lelylan/websockets) | Full-duplex communication over TCP |\n\nYou can now access the [APIs]((http://dev.lelylan.com/api)) from `http://0.0.0.0:8200` (API proxy URL).\n\n#### Production Environment Variable\n\nDuring deployment, every microservice needs to be set to the following environment variables (remember to change them with your own microservices, mongodb, redis and cache URLs).\n\n| Environment Variable | Description |\n| ------------- | ------------- |\n| `RACK_ENV=production` | Production rack environment |\n| `RAILS_ENV=production` | Production rails environment |\n| `NODE_ENV=production` | Production node environment |\n| `LELYLAN_API_URL` | Api Proxy microservice URL |\n| `LELYLAN_API_HOST` | Api Proxy microservice URL |\n| `LELYLAN_PEOPLE_URL=people.lelylan.com` | OAuth 2.0 microservice URL |\n| `LELYLAN_DEVICES_URL=devices.lelylan.com` | Devices API microservice URL |\n| `LELYLAN_TYPES_URL=types.lelylan.com` | Types API microservice URL |\n| `LELYLAN_SUBSCRIPTIONS_URL=subscriptions.lelylan.com` | Subs. API microservice URL|\n| `LELYLAN_PROFILES_URL=profiles.lelylan.com` | Profiles API microservice URL |\n| `MONGOLAB_PEOPLE_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | OAuth 2.0 MongoDB URL|\n| `MONGOLAB_DEVICES_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | Devices API MongoDB URL|\n| `MONGOLAB_TYPES_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | Types API MongoDB URL|\n| `MONGOLAB_JOBS_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | Event Bus MongoDB URL |\n| `MONGOLAB_SUBSCRIPTIONS_URL=mongodb://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/\u003cname\u003e` | Subs. MongoDB URL |\n| `MEMCACHIER_SERVERS=\u003chost\u003e:\u003cport\u003e` | Cache server |\n| `MEMCACHIER_USERNAME=\u003cusername\u003e` | Cache server username |\n| `MEMCACHIER_PASSWORD=\u003cpassword\u003e` | Cache server password|\n| `REDIS_URL=redis://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/` | Background Job Redis URL |\n| `REDIS_RATE_LIMIT_URL=redis://\u003cuser\u003e:\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e/` | Late Limit Redis URL |\n\nWe are studying solutions such as Docker, Mesos, and Ansible to simplify the installation process. If you are experimenting in the same area get in touch with [lelylan team](http://dev.lelylan.com/api).\n\n#### Docker Production Installation\n- Configure environment variables in docker-compose.yml\n- Run docker compose\n```bash\ndocker-compose up -d\n```\n\n##### Use subdomains for all microservices\n\n###### Sed to replace domains\n```bash\nsed -i '/VIRTUAL_HOST/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/DEFAULT_HOST/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/PUBLIC_URL/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/LELYLAN_PROXY_URL/ s/$/.lelylan.com/' docker-compose-dev.yml\nsed -i '/LELYLAN_API_HOST/ s/$/.lelylan.com/' docker-compose-dev.yml\n```\n\n| Microservice  | Default Domian | Domian after sed commands |\n| ------------- | ------------- | ------------- |\n| api-proxy | api-proxy | api-proxy.lelylan.com |\n| devices | devices | devices.lelylan.com |\n| types | types | types.lelylan.com |\n| subscriptions | subscriptions | subscriptions.lelylan.com |\n| profiles | profiles | profiles.lelylan.com |\n| people | people | people.lelylan.com |\n| physicals | physicals | physicals.lelylan.com |\n| nodes | nodes | nodes.lelylan.com |\n| mqtt | mqtt | mqtt.lelylan.com |\n| webhooks | webhooks | webhooks.lelylan.com |\n| websockets | websockets | websockets.lelylan.com |\n\n## Roadmap\n\nThe Roadmap provides the description of the items that the project has decided to concentrate on. It should\nserve as a reference point for Lelylan contributors to understand where the project is going, and\nhelps to determine whether a contribution could be conflicting considering the future goals.\n\nThe fact that a feature isn't listed here doesn't mean that a patch for it will automatically be\nrefused (we also miss important things). We are always happy to receive patches for new cool features that we haven't\nthought about, or didn't consider as a priority. Nevertheless understand that such patches might take longer for us\nto review.\n\nCheckout the [roadmap](/ROADMAP.md) to see our near future goals.\n\n\n## Contributing to Lelylan\n\nThis Contributing document tries to define a contributor's guide explaining how to contribute to one or more Lelylan Microservice. It contains information about reporting issues as well as some useful tips and guidelines for experienced open source contributors.\n\nCheckout the [contributing](/CONTRIBUTING.md) to help us with Lelylan.\n\n\n## Support\n\nUse the available [communication channels](http://dev.lelylan.com/support) to communicate your ideas, problems or suggestions.\n\n\n## License\n\nLelylan is licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0).\n","funding_links":[],"categories":["Others","Framework","iot","microservice","IoT"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flelylan%2Flelylan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flelylan%2Flelylan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flelylan%2Flelylan/lists"}