diff --git a/README.md b/README.md index 48a845b..48b48f3 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Kenaito Config Center +[English](README_EN.md) | 中文 + 基于 Go 重构的集中配置管理平台,支持多应用、多环境、多业务组的配置管理与分发。 ## 技术栈 diff --git a/README_EN.md b/README_EN.md new file mode 100644 index 0000000..256f5b8 --- /dev/null +++ b/README_EN.md @@ -0,0 +1,468 @@ +# Kenaito Config Center + +A centralized configuration management platform rebuilt with Go, supporting multi-application, multi-environment, and multi-business-group configuration management and distribution. + +## Tech Stack + +- **Backend**: Go + Gin + xorm + MySQL +- **Frontend**: Vue 2 + Vite 5 + Element UI 2 +- **Clients**: Go / Java (Spring Boot 2.x) / Python / Node.js / Perl / Lua / PHP / .NET / C / C++ / Rust / Ruby + +## Project Structure + +``` +kenaito-conf/ +├── server/ # Go admin backend (Gin + xorm) +├── web/ # Vue 2 frontend +├── kenaito-conf-go-client/ # Go client SDK +├── kenaito-conf-go-client-demo/ # Go client demo +├── kenaito-conf-springboot2-client/ # Java Spring Boot 2.x client SDK (JDK 8+) +├── kenaito-conf-springboot2-client-demo/# Spring Boot 2.x client demo (port 8081) +├── kenaito-conf-python-client/ # Python client SDK (Python 3.10+) +├── kenaito-conf-python-client-demo/ # Python client demo (port 8082) +├── kenaito-conf-nodejs-client/ # Node.js client SDK (Node.js 18+) +├── kenaito-conf-nodejs-client-demo/ # Node.js client demo (port 8083) +├── kenaito-conf-perl-client/ # Perl client SDK (Perl 5.16+) +├── kenaito-conf-perl-client-demo/ # Perl client demo +├── kenaito-conf-php-client/ # PHP client SDK (PHP 7.4+) +├── kenaito-conf-php-client-demo/ # PHP client demo +├── kenaito-conf-dotnet-client/ # .NET client SDK (.NET 6.0+) +├── kenaito-conf-dotnet-client-demo/ # .NET client demo +├── kenaito-conf-lua-client/ # Lua client SDK (Lua 5.1+) +└── kenaito-conf-lua-client-demo/ # Lua client demo +``` + +## Quick Start + +### 1. Start Backend + +```bash +cd server +``` + +Edit `application.properties` to set the `active` environment, then edit `application-{active}.properties` to configure database connection and other settings: + +```properties +# application.properties +active=dev +# application-dev.properties +server.port=8080 +database.host=127.0.0.1 +database.port=3306 +database.name=kenaito_conf +database.user=root +database.password=your_password +jwt.secret=your-jwt-secret +jwt.expireHours=24 +``` + +Start the service (tables and default data will be initialized automatically on first startup): + +```bash +go run cmd/main.go -config application.properties +# Or build and run +go build -o bin/server cmd/main.go +./bin/server -config application.properties +``` + +The backend listens on `:8080` by default. + +### 2. Start Frontend + +```bash +cd web +npm install +npm run dev +``` + +The frontend listens on `:3000` by default and automatically proxies API requests to the backend. + +### 3. Access + +Open http://localhost:3000 + +Default admin credentials: `admin` / Password: `admin123` + +## Client Integration + +### Go Client + +```go +import client "kenaito-conf/go-client" + +cfg := &client.Config{ + BaseURL: "http://localhost:8080", + AppName: "myapp", + Env: "dev", + Version: "latest", + Token: "app-token", + SyncInterval: 30, + CacheDir: ".", +} + +c := client.New(cfg) + +// Register change callback +c.OnChange(func (changed map[string]string) { + for k, v := range changed { + fmt.Printf("%s = %s\n", k, v) + } +}) + +// Start (fetch all configs + enable periodic sync) +c.Start() +defer c.Stop() + +// Read configuration +dbHost := c.Get("db.host") +``` + +### Java Spring Boot 2.x Client + +Suitable for JDK 8+ and Spring Boot 2.x projects, supports automatic config refresh and dynamic `@Value` updates. + +**1. Add Dependency** + +```xml + + cn.odboy + kenaito-conf-springboot2-client + 1.0.3 + +``` + +**2. Add Configuration** (`application.properties`) + +```properties +# Config center settings +kenaito.configcenter.base-url=http://localhost:8080 +# Application name (required) +kenaito.configcenter.app-name=myapp +# Environment (dev/daily/prod) +kenaito.configcenter.env=daily +# Config version +kenaito.configcenter.version=latest +# Auth token (optional) +kenaito.configcenter.token=app-token +# Sync interval (seconds) +kenaito.configcenter.sync-interval=30 +``` + +**3. Use Configuration** + +```java +@Value("${database.host:localhost}") +private String databaseHost; + +@Value("${database.port:3306}") +private Integer databasePort; +``` + +`@Value` fields are automatically refreshed when configuration changes, no application restart required. See [Spring Boot 2 Client Documentation](kenaito-conf-springboot2-client/README.md) for details. + +### Python Client + +Suitable for Python 3.10+ projects. + +**1. Install** + +```bash +cd kenaito-conf-python-client +pip3 install -e . +``` + +**2. Usage** + +```python +from kenaito_conf import Config, ConfigClient + +config = Config( + base_url="http://localhost:8080", + app_name="my-app", + env="daily", + sync_interval=30, +) + +client = ConfigClient(config) + +# Listen for config changes +def on_change(changed): + for k, v in changed.items(): + print(f"config changed: {k} = {v}") + +client.on_change(on_change) + +# Start client (fetch configs + enable periodic sync) +client.start() + +# Get configuration +value = client.get("database.host") +all_configs = client.get_all() + +# Stop +client.stop() +``` + +### Node.js Client + +Suitable for Node.js 18+ projects. + +**1. Install** + +```bash +cd kenaito-conf-nodejs-client +npm link +``` + +Then link in your project: + +```bash +npm link kenaito-conf +``` + +**2. Usage** + +```javascript +import {Config, ConfigClient} from 'kenaito-conf'; + +const config = new Config({ + baseUrl: 'http://localhost:8080', + appName: 'my-app', + env: 'daily', + syncInterval: 30, +}); + +const client = new ConfigClient(config); + +// Listen for config changes +client.onChange((changed) => { + for (const [k, v] of Object.entries(changed)) { + console.log(`config changed: ${k} = ${v}`); + } +}); + +// Start client (fetch configs + enable periodic sync) +await client.start(); + +// Get configuration +const value = client.get('database.host'); +const allConfigs = client.getAll(); + +// Stop +client.stop(); +``` + +### Perl Client + +Suitable for Perl 5.16+ projects. + +**1. Install** + +```bash +cd kenaito-conf-perl-client +cpanm . +``` + +Or directly include the lib path in your project: + +```perl +use lib '/path/to/kenaito-conf-perl-client/lib'; +``` + +**2. Usage** + +```perl +use Kenaito::Conf::Config; +use Kenaito::Conf::Client; + +my $cfg = Kenaito::Conf::Config->new( + base_url => 'http://localhost:8080', + app_name => 'my-app', + env => 'daily', + sync_interval => 10, +); + +my $client = Kenaito::Conf::Client->new(config => $cfg); + +# Listen for config changes +$client->on_change(sub { + my ($changed) = @_; + for my $k (keys %$changed) { + print "config changed: $k = $changed->{$k}\n"; + } +}); + +# Start client (fetch configs) +$client->start(); + +# Get configuration +my $value = $client->get('database.host'); +my $all = $client->get_all(); + +# Manual sync +$client->sync_once(); + +# Stop +$client->stop(); +``` + +### Lua Client + +Suitable for Lua 5.1+ projects. + +**1. Install** + +```bash +cd kenaito-conf-lua-client +luarocks make +``` + +Or manually add the module path: + +```lua +package.path = package.path .. ";/path/to/kenaito-conf-lua-client/?.lua" +``` + +**2. Usage** + +```lua +local kenaito = require("kenaito_conf") + +local config = kenaito.Config.new({ + base_url = "http://localhost:8080", + app_name = "my-app", + env = "daily", + sync_interval = 10, +}) + +local client = kenaito.Client.new({ config = config }) + +-- Listen for config changes +client:on_change(function(changed) + for k, v in pairs(changed) do + print("config changed: " .. k .. " = " .. v) + end +end) + +-- Start client (fetch configs) +client:start() + +-- Get configuration +local value = client:get("database.host") +local all = client:get_all() + +-- Manual sync +client:sync_once() + +-- Stop +client:stop() +``` + +### PHP Client + +Suitable for PHP 7.4+ projects. + +**1. Install** + +```bash +cd kenaito-conf-php-client +composer install +``` + +Or include in your project: + +```bash +composer require kenaito/conf-client +``` + +**2. Usage** + +```php +require_once 'vendor/autoload.php'; + +use Kenaito\Conf\Config; +use Kenaito\Conf\Client; + +$config = new Config([ + 'baseUrl' => 'http://localhost:8080', + 'appName' => 'my-app', + 'env' => 'daily', + 'syncInterval' => 10, +]); + +$client = new Client($config); + +// Listen for config changes +$client->onChange(function(array $changed) { + foreach ($changed as $key => $value) { + echo "config changed: $key = $value\n"; + } +}); + +// Start client (fetch configs) +$client->start(); + +// Get configuration +$value = $client->get('database.host'); +$all = $client->getAll(); + +// Manual sync +$client->syncOnce(); + +// Stop +$client->stop(); +``` + +## API Overview + +### Admin API (JWT Authentication Required) + +| Method | Path | Description | +|--------|---------------------------------------|--------------------------------------------| +| POST | `/user/login` | User login | +| GET | `/user/loginUserInfo` | Current user info | +| POST | `/user/logout` | User logout | +| GET | `/admin/menus` | Menu list | +| POST | `/admin/config/list` | Config list (filter by env, app) | +| POST | `/admin/config/add` | Add config | +| POST | `/admin/config/update` | Update config | +| GET | `/admin/config/:id` | Config details | +| POST | `/admin/config/delete/:id` | Delete config | +| GET | `/admin/config/configHistories/:id` | Config history | +| POST | `/admin/config/rollback/:id` | Rollback config | +| POST | `/admin/app/list` | App list (paginated) | +| GET | `/admin/app/:id` | App details | +| POST | `/admin/app/add` | Add app | +| POST | `/admin/app/update` | Update app | +| POST | `/admin/app/delete/:id` | Delete app (soft delete) | +| POST | `/admin/app/switch/:id` | Toggle app status | +| POST | `/admin/app/generateToken/:id` | Generate app token | +| POST | `/admin/app/deleteToken/:id` | Delete app token | +| GET | `/admin/app/options` | App options (dropdown) | +| GET | `/admin/user/list` | User list (filter by username, type, group, status) | +| POST | `/admin/user/add` | Add user | +| POST | `/admin/user/update` | Update user | +| POST | `/admin/user/delete/:id` | Delete user (soft delete) | +| POST | `/admin/user/resetPassword/:id` | Reset password | +| POST | `/admin/user/switch/:id` | Toggle user status | +| GET | `/admin/user/options` | User options (dropdown) | +| GET | `/admin/group/list` | Business group list | +| GET | `/admin/group/get/:id` | Business group details | +| POST | `/admin/group/add` | Add business group | +| POST | `/admin/group/update` | Update business group | +| POST | `/admin/group/switch/:id` | Toggle business group status | +| GET | `/admin/group/options` | Business group options (dropdown) | +| GET | `/admin/profile/list` | Environment list | +| GET | `/admin/profile/:id` | Environment details | +| POST | `/admin/profile/add` | Add environment | +| POST | `/admin/profile/update` | Update environment | +| POST | `/admin/profile/delete/:id` | Delete environment | +| POST | `/admin/profile/switch/:id` | Toggle environment status | +| GET | `/admin/profile/options` | Environment options (dropdown) | + +### Client API (No JWT, Authenticated via App Token) + +| Method | Path | Description | +|--------|------------------------------|--------------------------| +| POST | `/api/fetchAllConfigs` | Fetch all configs | +| POST | `/api/fetchChangedConfigs` | Fetch incremental changes|