{"id":18390116,"url":"https://github.com/elafarge/confsyncer","last_synced_at":"2026-04-10T20:47:28.607Z","repository":{"id":64307118,"uuid":"95256492","full_name":"elafarge/confsyncer","owner":"elafarge","description":"Synchronizes a configuration folder with a remote KV-store forever","archived":false,"fork":false,"pushed_at":"2017-06-24T08:04:22.000Z","size":21,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-12T08:56:34.443Z","etag":null,"topics":["configuration","devops","docker","etcd","golang","kubernetes","traefik"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elafarge.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-23T21:06:15.000Z","updated_at":"2020-05-28T17:52:16.000Z","dependencies_parsed_at":"2023-01-15T11:00:27.716Z","dependency_job_id":null,"html_url":"https://github.com/elafarge/confsyncer","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/elafarge/confsyncer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elafarge%2Fconfsyncer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elafarge%2Fconfsyncer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elafarge%2Fconfsyncer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elafarge%2Fconfsyncer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elafarge","download_url":"https://codeload.github.com/elafarge/confsyncer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elafarge%2Fconfsyncer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262628576,"owners_count":23339821,"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":["configuration","devops","docker","etcd","golang","kubernetes","traefik"],"created_at":"2024-11-06T01:46:18.450Z","updated_at":"2026-04-10T20:47:23.585Z","avatar_url":"https://github.com/elafarge.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Conf-Syncer: sync your config files with etcd\n=============================================\n\n[![Build Status](https://semaphoreci.com/api/v1/elafarge/confsyncer/branches/master/shields_badge.svg)](https://semaphoreci.com/elafarge/confsyncer)\n[![Go Report Card](https://goreportcard.com/badge/elafarge/confsyncer)](http://goreportcard.com/report/elafarge/confsyncer)\n[![Docker](https://images.microbadger.com/badges/version/elafarge/confsyncer.svg)](https://microbadger.com/images/elafarge/confsyncer)\n[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](http://www.gnu.org/licenses/gpl-3.0)\n\nConf-Syncer is a little Go Program that helps keeping config files in sync with\na Key Value store. Only etcd v3 is supported but adding other key-value store is\njust about implementing a simple interface.\n\nMotivations\n-----------\n\nMy TLS certs are fetched dynamically from Let's Encrypt and upgraded every three\nmonths. I need to keep these certs in sync between my load-balancer instances\nand using a distributed file storage was overkill (I'm running\nKubernetes clusters on top of AWS and therefore don't have access to\nReadManyWriteMany volumes... without deploying a Ceph cluster at least...).\n\nThis self-contained program can run on bare-metal or in VMs (using Docker or\nnot) and plays pretty well as an init-container/sidecar container for my Ingress\ncontrollers in Kubernetes. The init-container simply pulls the config from the\nkey-value store and dies, the sidecar container keeps the config in sync. If you\ndon't need to be sure that the config files are there when the target container\nstarts for the first time, the sidecar container alone should be just fine).\n\nIn the longer run, I'm trying to wrap this in a Kubernetes ThirdPartyResource (a\nsort of dynamic config map).\n\nBuilding, Packaging and Distributing\n------------------------------------\n\nYou'll need `docker` and `make` in order to build the project, nothing else\n(we're using a build container), just run `make`.\n\nYou can also build a container with `make docker` and ship it to a registry of\nyour choice with\n```shell\nDOCKER_IMAGE=my.registry.io/confsyncer DOCKER_TAG=v2 make docker-push\n```\n\nFinally, if you have `docker-compose` installed, you can get a dev. environment\nwith one etcd container reachable on `localhost:20379` and a `syncer` container.\nThe command to run is `make devenv`.\n\nContributing\n------------\n\nContributions are always welcome :)\n\nA containerized development environment based on `docker-compose` is available\nwith `make devenv` if you don't want to deal with installing dependencies. It\nruns an etcd instance that listens on `http://localhost:20379`.\n\nEvery time you bring a change to your code, rerunning `make devenv` will rebuild\nwhat's needed and update the dev. env. (thanks to the old magic of `GNU make`).\n\nIf you want to tail your `syncer` container's log after the rebuild, simply run\n`make devenv-probe`.\n\nAll `docker-compose` commands will also work ;-)\n\nWould you update dependencies in the `glide.yaml`, run `make vendor-update` to\nupdate them. You can handle dependencies manually with `glide`.\n\n### KVStore fixtures\n\nYou can get some data in the etcd container by running `make populate-etcd`. It\nshould immediately synchronize the config with your disks.\n\nMaintainers\n-----------\n* Étienne Lafarge \u003cetienne.lafarge _at_ gmail.com\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felafarge%2Fconfsyncer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felafarge%2Fconfsyncer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felafarge%2Fconfsyncer/lists"}