{"id":13551170,"url":"https://github.com/Evedel/bow","last_synced_at":"2025-04-03T01:31:36.714Z","repository":{"id":144204865,"uuid":"60696261","full_name":"Evedel/bow","owner":"Evedel","description":"Docker Registry Frontend/ Docker Registry UI","archived":false,"fork":false,"pushed_at":"2020-07-06T05:37:58.000Z","size":7831,"stargazers_count":81,"open_issues_count":0,"forks_count":7,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-08-01T12:23:50.747Z","etag":null,"topics":["bearer","bow","distribution","docker","docker-distribution","docker-registry","frontend","registry","webui"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/evedel/bow/","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/Evedel.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-06-08T12:30:39.000Z","updated_at":"2024-02-02T09:20:01.000Z","dependencies_parsed_at":"2024-01-14T16:09:01.081Z","dependency_job_id":"884c4538-4247-489a-b450-bf5157eaef18","html_url":"https://github.com/Evedel/bow","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Evedel%2Fbow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Evedel%2Fbow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Evedel%2Fbow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Evedel%2Fbow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Evedel","download_url":"https://codeload.github.com/Evedel/bow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222905684,"owners_count":17055817,"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":["bearer","bow","distribution","docker","docker-distribution","docker-registry","frontend","registry","webui"],"created_at":"2024-08-01T12:01:43.612Z","updated_at":"2024-11-03T21:31:20.173Z","avatar_url":"https://github.com/Evedel.png","language":"Go","funding_links":[],"categories":["Go","frontend"],"sub_categories":[],"readme":"Bow\n==\n## As simple as possible docker registry frontend/UI\n\nPictures\n==\n\n![](https://raw.githubusercontent.com/Evedel/bow/master/img/conf.png)  \n\n![](https://raw.githubusercontent.com/Evedel/bow/master/img/info.png)\n\n![](https://raw.githubusercontent.com/Evedel/bow/master/img/history.png)\n\n![](https://raw.githubusercontent.com/Evedel/bow/master/img/parents.png)\n\nFeatures\n==  \n- V2 registries support only (secure, self-signed and insecure, DNS and IP:PORT)\n- internal DB ([BoltBD](https://github.com/boltdb/bolt)) gives it the ability to store info, and as the result, it responses much faster than after direct API call, and can provide more data\n- the app can pars, store and show info from registry such as:\n - image layers info:\n   - name / tag\n   - image size and a number of pushes\n   - upload and push dates\n - an image creating commands history\n- it is possible to set multiple repositories and watch all registries in one place\n- show statistics pretty, draw curves of uploads number and image sizes for a tag with respects to dates\n- find a parent of an image, in case, the parent in the same repo (it is clickable!)\n- show tree-graph of parents for image\n- enabled image deletion (registry --version \u003e= 2.4.0)\n- __(new)__ API compatibility checks\n- __(the newest)__ Bearer token auth support (secure and self-signed auth servers)\n- __(killerfeature)__ Namespace layer and parents graph filters\n\nImage deletion\n==\nTo enable image deletion you need to:  \n1. Run your registry with the flag `-e REGISTRY_STORAGE_DELETE_ENABLED=true`  \nExample:  \n```\ndocker run -d -p 5000:5000 --restart=always --name registry \\\n  -v ./auth:/auth \\\n  -e \"REGISTRY_AUTH=htpasswd\" \\\n  -e \"REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm\" \\\n  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \\\n  -e REGISTRY_STORAGE_DELETE_ENABLED=true \\\n  registry:2\n```  \n2. Set up cron to run garbage collection  \nExample:  \n`10 * * * * docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml`  \n3. Also be aware, that there is a known [issue](https://github.com/docker/distribution/issues/1939) in docker registry 2.6.2 and earlier. It means, that if you delete an image from a repository, you will not able to push __the exactly same__ image in that repository. To fix it, you will need to perform rebuilding of image with `--no-cache` mode each time or restarting the registry `docker restart registry` once after deletion.\n\nSee more:  \nhttps://github.com/docker/docker-registry/issues/988#issuecomment-224280919  \nhttps://docs.docker.com/registry/configuration/#delete  \nhttps://docs.docker.com/registry/garbage-collection/#/how-garbage-collection-works\n\nBearer token auth\n==\nWhat is it and how it works see [docker documentation](https://docs.docker.com/registry/spec/auth/token/).  \nBow was tested to work with [cesanta/docker_auth](https://github.com/cesanta/docker_auth) in [this configuration](develop/devcompose.yml).  \n\nProspects\n==\nI can say that this app almost fit my needs, so in all likelihood, soon, I will not improve it hardly, but this is the list of ideas just for case:  \n- info for the whole repository: size, number of pushes so on so on soon\n- add button 'Don't Track', to store repo data but not update it\n- add tests for bearer token and image deletion\n\nHow to start to use Bow\n==\n```\ndocker run -d \\\n   --name=Bow \\\n   -e BS_LOG_SILENT=yes \\\n   -e BS_TIME_WATCH=no \\\n   -v ~/db/bow:/var/lib/bow \\\n   -p 5001:19808 \\\n   evedel/bow\n```\n\nThere are some parameters, that can be set only as [environment variables](https://github.com/Evedel/bow/blob/master/NOTE.md).\nShort descriptions with default value:  \n - ``BS_LOG_SILENT=\"\"`` -- logging level, default is full logging  \n - ``BS_DB_PATH=\"/var/lib/bow\"`` -- path to store your db  \n - ``BS_DB_NAME=\"asapdrf.db\"`` -- name of db and db file  \n - ``BS_SERVE_ADD=\"19808\"`` -- port address to serve  \n - ``BS_CHECKER_TIMEOUT=\"300\"`` -- seconds, time to renew data  \n - ``BS_TIME_WATCH=\"yes\"`` -- print time of  execution for qurl queries and page-renderers  \n\nThe full list of available tags can be found at [hub.docker.com](https://hub.docker.com/r/evedel/bow/tags/).\n\n``evedel/bow:latest`` -- the last build based on debian:jessie image (68MB)  \n``evedel/bow:debian-latest`` -- the same last build based on debian image (68MB)  \n``evedel/bow:alpine-latest`` -- the last alpine based build (4.7MB)  \n``evedel/bow:debian-$(buildNumber)`` -- tagged previously [released versions](https://github.com/Evedel/bow/blob/master/CHANGELOG.md) based on debian (68MB).  \n``evedel/bow:alpine-$(buildNumber)`` -- tagged previously [released versions](https://github.com/Evedel/bow/blob/master/CHANGELOG.md) based on alpine (4.7MB).  \n``evedel/bow:$(buildNumber)`` -- tagged previously [released versions](https://github.com/Evedel/bow/blob/master/CHANGELOG.md) based on debian.  \n\n\nHow to start contribute to Bow\n==\nIf you have interest, you can easily start with\n```\ngit clone https://github.com/evedel/bow.git\ncd bow \u0026\u0026 git clone https://github.com/fperucic/treant-js project/resources/treant-js\ndocker-compose -f develop/devcompose.yml up -d\ndocker exec -it develop_golang_1 go get\ndocker exec -it develop_golang_1 go test -v qurl -repo='https://UsErNaMe:PaSsWoRd@myownregistry.org'\ndocker exec -it develop_golang_1 go run main.go\n```\nCode and packages\n==\nThis app is written on golang with use of standard packages and:  \nhttps://github.com/boltdb/bolt -- BoltDB  \nhttps://github.com/fatih/color -- to make cli shiny  \nhttps://github.com/wader/disable_sendfile_vbox_linux -- to develop on docker-machine  \nhttp://www.chartjs.org/ -- to draw best graphs ever  \nhttps://github.com/fperucic/treant-js -- to draw parents graphs  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEvedel%2Fbow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FEvedel%2Fbow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEvedel%2Fbow/lists"}