Automatic home page for docker hosted web applications.
Serve a templated web site with variables populated from specific labels on containers. The list of variables are refresh every 10 seconds.
Default site delivered by kin
can be replaced by your own site.
kin
is perfect for development environment or home-lab to quickly provides a dynamic bookmarks to all containers availables on the docker daemon. It is not meant to be use in production environment.
kin
will not proxy your site, but you can use it alongside Traefik to have fully automatic configuration.
kin [Flags]
The configuration can be done through flags, environment variables or entry in a configuration file (in JSON, YAML or TOML format).
Flags (short form) | Env var | File entry | meaning |
---|---|---|---|
--base <URL path> (-b) |
KIN_BASE |
base |
Base URL (default "/") |
--config <path> (-c) |
KIN_CONFIG |
Config file without extension (default is $HOME/.kin.yaml) | |
--debug (-d) / --quiet (-q) |
KIN_LOGLEVEL |
log.level |
Log more information / Log only errors |
--json (-j) |
KIN_JSON |
log.json |
If present logs are JSON-formatted |
--logpath <path> (-l) |
KIN_LOGPATH |
log.path |
Log file path (default "-" for screen) |
--port int (-p) |
KIN_PORT |
port |
Port to listen (default 8080) |
--root <path> (-r) |
KIN_ROOT |
root |
Template root path (default is $HOME/.kin_root) |
--swarm |
KIN_SWARM |
swarm |
Docker swarm |
If template root path is provided to kin, this can contains as much file neededs by your site. At each request, kin
lookup for the corresponding file with .tpl
extension, render the template and serve it. If a template is not found, it will serve the file without any rendering.
Template are not limited to HTML file, it could be any text format (Javascript, JSON, CSV, etc)
See the site
folder in this repository for an example of site structure.
For template, kin
provides :
* .Containers
: array of list of containers information indexed by kin_group
label value. Only containers with kin_name
label will be added to the list.
* .Environments
: array of environment variables indexed by the environment variable name.
Each entry of .Containers
is an list of all the container informations with the same kin_group
label.
Container informations correspond to the labels found on the containers with kin_name
label. To use a attribute, the template should only contains {{.AttributeName}}
.
Available attributes for a container are:
Attribute | Label |
---|---|
Group |
kin_name |
Name |
kin_group |
Type |
kin_type |
URL |
kin_url |
All containers with kin_name
label and without kin_group
label will be placed in ""
entry of .Containers
.
Kin use Golang templating system that provides more features. Kin also use Sprig library that offer more features to the templating system.
<body>
<h1> {{index .Environments "USER"}}'s home lab</h1>
<ul>
{{ range $group, $containers := .Containers }}
<li> {{ $group }}
<ul>
{{ range $containers}}
<li><a href="{{.URL}}" class="{{.Type}}">{{.Name}}</li>
{{end}}
</ul>
</>
{{end}}
</ul>
</body>
<body>
<ul>
{{ range index .Containers "" }}
<li><a href="{{.URL}}" class="{{.Type}}">{{.Name}}</li>
{{end}}
</ul>
</body>
docker run --rm --label 'kin_name=front' --label 'kin_group=dev' --label 'kin_type=web' --label 'kin_url=http://localhost:1234/my-front' nginx
front:
image: nginx
labels:
- "kin_name=front"
- "kin_group=dev"
- "kin_type=web"
- "kin_url=http://localhost:1234/my-front"
You can install kin
with Homebrew:
brew tap marema31/marema31
brew install kin
There is a Docker image that you can use to run kin
in a container:
docker pull marema31/kin
docker run -it --rm -p 8080:8080 -v "/var/run/docker.sock:/var/run/docker.sock:ro" marema31/kin
You can download prebuilt binaries from the Release page
If you want to build kin
from source, you need Golang 1.14 or
higher. You can build everything:
make
I've made this project as a real use case to learn Golang. I've tried to adopt the Go mindset but I'm sure that other gophers could do better.
If this project can be useful for you, feel free to open issues, propose documentation updates or even pull request.
Contributions are of course always welcome!
- Fork marema31/kin (https://github.com/marema31/kin/fork)
- Create a feature branch
- Commit your changes
- Create a Pull Request
See CONTRIBUTING.md
for details.
Copyright (c) 2020-present Marc Carmier
Licensed under BSD-2 Clause License