{"id":15013873,"url":"https://github.com/slavaganzin/rconf","last_synced_at":"2026-01-05T01:05:30.015Z","repository":{"id":184641142,"uuid":"672239904","full_name":"slavaGanzin/rconf","owner":"slavaGanzin","description":"rconf is configuration server with web UI that will sync service configuration to remote machines instantly.","archived":false,"fork":false,"pushed_at":"2024-01-26T09:20:31.000Z","size":2110,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-22T07:16:19.436Z","etag":null,"topics":["ansible","automation","ci","configuration","configuration-management","devops-tools","docker","puppet","salt"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/slavaGanzin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-29T11:51:18.000Z","updated_at":"2024-08-01T05:20:30.000Z","dependencies_parsed_at":"2023-12-20T19:46:28.779Z","dependency_job_id":"2b3381cc-bef0-4f95-8eb8-190ad9a54ae9","html_url":"https://github.com/slavaGanzin/rconf","commit_stats":{"total_commits":78,"total_committers":1,"mean_commits":78.0,"dds":0.0,"last_synced_commit":"f1699b440e12f07760174d52ef740e7cdf94ebc0"},"previous_names":["slavaganzin/rconf"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slavaGanzin%2Frconf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slavaGanzin%2Frconf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slavaGanzin%2Frconf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slavaGanzin%2Frconf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slavaGanzin","download_url":"https://codeload.github.com/slavaGanzin/rconf/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244918710,"owners_count":20531686,"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":["ansible","automation","ci","configuration","configuration-management","devops-tools","docker","puppet","salt"],"created_at":"2024-09-24T19:44:52.992Z","updated_at":"2026-01-05T01:05:29.972Z","avatar_url":"https://github.com/slavaGanzin.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rconf\n\nrconf is configuration server with web UI that will sync service configuration to remote machines instantly.\n\n\u003c!-- toc --\u003e\n\n- [Why?](#why)\n- [Quick start](#quick-start)\n- [Code execution](#code-execution)\n- [Cookbook](#cookbook)\n  * [join all devices in single vpn network using zerotier](#join-all-devices-in-single-vpn-network-using-zerotier)\n\n\u003c!-- tocstop --\u003e\n\n![](./docs/ui.png)\n\n### Why?\n\nPuppet, salt, ansible all invent their own languages for configuration. You need to google how to do simpliest things. Why should you, if you can use same commands you are used to?\n\n### Quick start\n**install rconf on server machine**\n```bash\ncurl https://i.jpillora.com/slavaGanzin/rconf! | bash\n```\n\n**run rconf and configure your server by answering a list of questions**\n```bash\n$ rconf                                                                                                                               \n\n? Select networks will share your config:\n wlp0s20f3 [192.168.1.85/24]\n? Web GUI username: admin\n? Web GUI password: admin\n? Remote sync token: ea9b50e5de7e17e0ff38f0b7808917acbbe87ca6ce46ee831d5c009bf87a2049\n? Daemonize with systemd? No\nTo install on remote machine:\n  curl https://i.jpillora.com/slavaGanzin/rconf! | bash\n\nwlp0s20f3:\n  Web UI:\n    http://192.168.1.85:14141  \n  sync config command:\n    rconf http://192.168.1.85:14141/ea9b50e5de7e17e0ff38f0b7808917acbbe87ca6ce46ee831d5c009bf87a2049\n```\n\n**open web UI**\n```bash\n# this is my internal ip, look for your url in your own cli\nchromium http://192.168.1.85:14141\n```\n\n**uncomment services key in rconf.yaml using web UI**\n```yaml\nservices:\n  #service name\n  hello:\n    #will work only on machines that selected tag \"test\" for syncronization\n    tag: test\n    #will work only on linux machines\n    platform: linux\n    files:\n      #local file hello.sh will be copied to /usr/local/bin/hello.sh on remote machine\n      hello.sh: /usr/local/bin/hello.sh\n    install:\n      #if running \\`which hello.sh\\` will fail on remote machine - apply \\`chmod\\`\n      hello.sh: chmod +x /usr/local/bin/hello.sh\n    #command that will rerun on every update of configuration files\n    command: hello.sh world\n```\n*Select commented lines and press CTRL+/*\n*Press CTLR+S to save!*\n\n**edit hello.sh in Web ui**\n```bash\n#!/usr/bin/env bash\n\necho \"Hello $1!\"\n```\n*Press CTLR+S to save!*\n\n**copy sync config command from server console and run it**\n```bash\n$ rconf \"http://192.168.1.85:14141/ea9b50e5de7e17e0ff38f0b7808917acbbe87ca6ce46ee831d5c009bf87a2049\"\n\n? Node id: node1\n? Select tags to sync:\n test\n? Daemonize with systemd? No\n✔ run: hello.sh world\nHello world!\n```\n\n### Code execution\nIf you need dynamic configuration, i.e. tailored for each host use `{{{return javascript code}}}` in any configuration file (except rconf.yaml). For example:\n\n```\n#nginx.conf\nhttp {\n    events {\n        worker_connections {{{return parseInt(Math.random()*100)}}};\n    }\n    server {\n        listen {{{return rconf.interfaces.eth0.address}}}:3001;\n        server_name {{{\n            if (rconf.env.HOSTNAME) return rconf.env.HOSTNAME\n            return 'default.hostname'\n          }};\n    }\n}\n```\nIs this secure? No. Use with caution\n\n### Cookbook\n\n#### join all devices in single vpn network using zerotier\n```yaml\nservices:\n  zerotier-linux:\n    tag: zerotier-network1\n    platform: linux\n    install:\n      zerotier-cli: curl -s https://install.zerotier.com | sudo bash\n    command: zerotier-cli join network1\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslavaganzin%2Frconf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslavaganzin%2Frconf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslavaganzin%2Frconf/lists"}