# HellWalking **Repository Path**: go-learner/hell-walking ## Basic Information - **Project Name**: HellWalking - **Description**: 配置以kv结构存储在远程, 该工具获取远程存储中kv数据,然后通过模板渲染出配置文件。 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-03-27 - **Last Updated**: 2023-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 简介 配置以kv结构存储在远程, 该工具获取远程存储中kv数据,然后通过模板渲染出配置文件。 目前支持的存储有: - redis - http ## 架构 ``` Config Storage: Redis/MySQL/Consul/HTTP .... | 1 v 2 Watcher-------> LocalCache | 3 ^ v 4 | Template----GET---+ | 5 v File ``` 配置存储远程存储中,例如:redis/mysql/http等。helll-walking获取远程存储中的更改,并将其存储本地内存缓存中,而后进行模板渲染。模板渲染时,可以通过一些内置函数获取本地缓存中的数据;例如get函数,通过给定的key获取对应的value。 目前,模板支持与本地缓存交互的函数有: - get - gets - getprefix - exist ## 安装 ### 编译安装 ``` $ git clone https://git.lovezsh.com/lovezsh/HellWalking.git $ cd HellWalking $ go build -o hell-walking cmd/hell-walking/main.go $ cp hell-walking /usr/bin ``` ### 使用Docker编译 ``` $ git clone https://git.lovezsh.com/lovezsh/HellWalking.git $ cd HellWalking $ docker-compose build $ docker-compose run hell-walking ``` > 编译好的程序在build目录下 ## 示例 ### 使用Redis作为配置存储 step1: 添加配置数据 ``` $ docker run --name redis -p 6379:6379 redis:latest $ docker container exec -it redis redis-cli 127.0.0.1:6379> set listen 80 127.0.0.1:6379> set server_name git.lovezsh.com 127.0.0.1:6379> set upstream_servers "[{\"addr\":\"127.0.0.1:3000\",\"weight\":1},{\"addr\":\"127.0.0.1:3001\",\"weight\":2}]" ``` step2: 运行hell-walking ``` $ ./hell-walking -config examples/config.json ``` step3: 查看渲染结果 ``` $ cat /tmp/git.lovezsh.com.conf upstream git { server 127.0.0.1:3000 weight=1; server 127.0.0.1:3001 weight=2; } server { listen 80; server_name git.lovezsh.com; location / { proxy_pass http://git; } } ``` step4: 修改配置 ``` 127.0.0.1:6379> set listen 8080 ``` step5: 查看渲染结果能够看到listen改变了 ``` $ cat /tmp/git.lovezsh.com.conf upstream git { server 127.0.0.1:3000 weight=1; server 127.0.0.1:3001 weight=2; } server { listen 8080; server_name git.lovezsh.com; location / { proxy_pass http://git; } } ``` ### 使用HTTP作为配置存储 step1: 添加配置数据 ``` $ mkdir http $ echo -n 8080 > http/listen $ echo -n git.lovezsh.com > http/server_name $ cat > http/server_name < http/listen ``` step6: 查看渲染结果能够看到listen改变了 ``` $ cat /tmp/git.lovezsh.com.conf upstream git { server 127.0.0.1:3000 weight=1; server 127.0.0.1:3001 weight=2; } server { listen 8080; server_name git.lovezsh.com; location / { proxy_pass http://git; } } ```