{"id":27741540,"url":"https://github.com/herrmuellerluedenscheid/hoister","last_synced_at":"2026-02-11T23:44:04.611Z","repository":{"id":289748365,"uuid":"972279563","full_name":"HerrMuellerluedenscheid/hoister","owner":"HerrMuellerluedenscheid","description":"deploy and rollback containers at ease","archived":false,"fork":false,"pushed_at":"2025-04-28T11:44:48.000Z","size":75,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-28T16:21:22.464Z","etag":null,"topics":["cicd","contain","docker-compose","podman","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/HerrMuellerluedenscheid.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,"zenodo":null}},"created_at":"2025-04-24T20:21:12.000Z","updated_at":"2025-04-28T11:38:18.000Z","dependencies_parsed_at":"2025-04-28T16:21:13.281Z","dependency_job_id":"59330350-bf90-4b3f-803a-fb236444fe03","html_url":"https://github.com/HerrMuellerluedenscheid/hoister","commit_stats":null,"previous_names":["herrmuellerluedenscheid/deploya","herrmuellerluedenscheid/hoister"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/HerrMuellerluedenscheid/hoister","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HerrMuellerluedenscheid%2Fhoister","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HerrMuellerluedenscheid%2Fhoister/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HerrMuellerluedenscheid%2Fhoister/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HerrMuellerluedenscheid%2Fhoister/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HerrMuellerluedenscheid","download_url":"https://codeload.github.com/HerrMuellerluedenscheid/hoister/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HerrMuellerluedenscheid%2Fhoister/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262565693,"owners_count":23329653,"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":["cicd","contain","docker-compose","podman","rust"],"created_at":"2025-04-28T16:21:05.723Z","updated_at":"2026-02-11T23:44:04.606Z","avatar_url":"https://github.com/HerrMuellerluedenscheid.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"Hoister 🏗\n==========\n\n[![Discord](https://img.shields.io/discord/1453411867224576105?color=7289da\u0026label=Discord\u0026logo=discord\u0026logoColor=white)](https://discord.gg/D8kHFJXY7X)\n\nDeploy Docker images automatically with rollback support.\n\nAdd the label `hoister.enable=true` to your Docker Compose service.\nHoister checks if a new version of the image (under the same tag) is available.\nIt will download and start the updated container with the same settings, volumes, and networks as before.\nIn case of failure, it will automatically roll back to the last working state.\n\n⚙️ Setup\n--------\n\nAdd the hoister.enable=true label to any service you want to manage:\n\n```yaml\nservices:\n  example:\n    image: emrius11/example:latest\n    labels:\n      - \"hoister.enable=true\"         # \u003c- Add this label to your service\n```\n\nIf you want hoister to also manage a containers' **named volumes** add `hoister.backup-volumes=true` as a label. On each\ncontainer update, the volumes will be backed up and restored if an update fails.\n\nThen, **either** download the [latest release](https://github.com/HerrMuellerluedenscheid/hoister/releases) that matches your OS or\nadd the Hoister container alongside your services:\n\n```yaml\nservices:\n  hoister:\n    image: emrius11/hoister:latest\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock\n    security_opt:\n      - no-new-privileges:true\n    depends_on:\n      - example\n```\n\nFinally, push a new image to your registry using the same tag, and Hoister will automatically update the container.\n\n📬 Notifications and Configuration\n----------------------------------\n\nDefine the following environment variables to schedule checks and receive updates and rollback notifications via **Telegram**, **Slack**, **Discord** or **Email**:\n\n```shell\nHOISTER_REGISTRY_SLACK_WEBHOOK=\"https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXX\"  # Webhook URL\nHOISTER_REGISTRY_SLACK_CHANNEL=\"#my-update-channel\"\nHOISTER_REGISTRY_TELEGRAM_TOKEN=\"12345656789:XXXXXXXXXX-XXXXXXXXX-XXXXXXXXX\"  # Bot token\nHOISTER_REGISTRY_TELEGRAM_CHAT=\"9999999999\"                        # Chat ID\nHOISTER_REGISTRY_DISCORD_TOKEN=\"soijf23JASDFOIJ@.Gj7gl8.sdfoij234sdf_sdfijoij23lijasdASDF\"   # Bot token\nHOISTER_REGISTRY_DISCORD_CHANNEL=\"12334556898709812334\"            # Channel ID\nHOISTER_DISPATCHER_GOTIFY_TOKEN=\"A2SlasiSDLJ1sd\"\nHOISTER_DISPATCHER_GOTIFY_SERVER=\"http://localhost:8090\"\nHOISTER_DISPATCHER_EMAIL_SMTP_PASSWORD=\"My_secret-email-password\"  # SMTP password\nHOISTER_DISPATCHER_EMAIL_SMTP_SERVER=\"smtp.foomail.com\"            # SMTP server\nHOISTER_DISPATCHER_EMAIL_SMTP_USER=\"my-email-user@somedomain.com\"  # SMTP user\nHOISTER_DISPATCHER_EMAIL_RECIPIENT=\"foo.bar@gmail.com\"             # Email address to send deployments to\nHOISTER_REGISTRY_CONTROLLER_URL=\"http://hoister-controller:3033\"   # if you want to use the front end\nHOISTER_REGISTRY_SCHEDULE_INTERVAL=60                              # sleep in seconds between checks\nHOISTER_REGISTRY_SCHEDULE_CRON=\"0 * * * * * *\"                     # cron expression to schedule the checks (precedence over interval)\n```\n\nCheck the [docker-compose.yaml](./docker-compose.yaml) example.\n\n## Private Registries\n\n### [github registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry) using a classic PAT\n\n```\nHOISTER_REGISTRY_GHCR_USERNAME=\"your-github-username\"\nHOISTER_REGISTRY_GHCR_TOKEN=\"ghp_DW1..............\"\n```\n\n### Global configuration\n\nAs a fallback you can use these environment variables to authenticate against a private registry:\n\n```\nHOISTER_REGISTRY_USERNAME\nHOISTER_REGISTRY_PASSWORD\nHOISTER_REGISTRY_AUTH\nHOISTER_REGISTRY_EMAIL\nHOISTER_REGISTRY_SERVERADDRESS\nHOISTER_REGISTRY_IDENTITYTOKEN\nHOISTER_REGISTRY_REGISTRYTOKEN\n```\n\n## Frontend (optional)\n\nWhile the Hoister can be used as a standalone container, you can also deploy the optional frontend to manage and monitor your container updates.\nAdd the following service to your docker-compose.yaml:\n\n```yaml\n  hoister-controller:\n    image: emrius11/hoister-controller:latest\n\n  hoister-frontend:\n    image: emrius11/hoister-frontend:latest\n    ports:\n      - \"3000:3000\"\n    environment:\n      HOISTER_CONTROLLER_URL: \"http://hoister-controller:3033\"\n      HOISTER_AUTH_USERNAME: admin\n      HOISTER_AUTH_PASSWORD: !a-super-secure-password!   # This can be clear text (for simplicity) or hashed using bcrypt (better)\n```\n\nAlso make sure to set the `HOISTER_CONTROLLER_URL` environment variable in the Hoister container to point to the controller service.\n\n## Troubleshooting\n\n### Permission denied on the socket\n\n```bash\n[...]\ndial unix /var/run/docker.sock: connect: permission denied\n```\n\nThis error usually indicates that the calling user isn't a member of the `docker` user group. You can add a user `foo` to that group with:\n\n```bash\nsudo usermod -aG docker foo\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fherrmuellerluedenscheid%2Fhoister","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fherrmuellerluedenscheid%2Fhoister","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fherrmuellerluedenscheid%2Fhoister/lists"}