源码编译部署
本文档介绍如何通过源码编译方式部署各模块。假定按照如下链接方式部署:
需要编译部署的模块主要有三个:
从 v1.11.0 及之后版本, API服务会集成UI服务,启动API服务后,访问API服务根路径即为FeatureProbe管理页面。 可根据部署架构需要,选择是否需要单独部署UI服务。
示例机器 | 部署模块 | 端口 |
---|---|---|
10.100.1.1 | FeatureProbe API | 4008 |
10.100.1.1 | FeatureProbe UI | 4009(Nginx)(可选) |
10.100.1.2 | FeatureProbe Server | 4007 |
创建数据库
环境准备
- MySQL 5.7+
创建
feature_probe
数据库:CREATE DATABASE feature_probe;
无须手工创建表结构。初次启动 API 服务时会自动创建所有表和初始化数据。如果希望手工导入 DML/DDL 请参考初始化数据库文档。
编译部署 API 服务
编译步骤
编译环境
- JDK 1.8+
- Maven 2.0+ : how to install
- 获取源码并编译出部署包:
git clone https://gitee.com/FeatureProbe/FeatureProbe.git
cd FeatureProbe/api
mvn clean package
完成编译后会在当前目录生成以版本命名的 jar 部署文件,如 target/api-1.1.0.jar
。
部署步骤
部署环境
- JDK 1.8+
将
api-1.1.0.jar
放置部署服务器中,填入数据库链接配置,并以4008
端口启动:警告以下脚本中数据库相关信息需要替换成您实际使用的数据库信息。
java -jar api-1.1.0.jar --server.port=4008 \
--spring.datasource.jdbc-url=jdbc:mysql://{MYSQL_DATABASE_IP}:{MYSQL_PORT}/feature_probe \ # 数据库 IP/端口和库名
--spring.datasource.username={MYSQL_USERNAME} \
--spring.datasource.password={MYSQL_PASSWORD}信息API 服务更详细的启动参数说明见 FeatureProbe API 参数说明文档
检查服务是否运行成功
在部署机运行:
curl "http://localhost:4008/actuator/health"
显示如下信息则表示启动成功:
{
status: "UP"
}
编译部署 Server 服务
编译步骤
环境准备
Rust
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
或者,从国内镜像安装
- 修改~/.zshrc 或 ~/.bashrc:
export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"- 安装
$ curl --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh
警告注意安装之后最后一行提示,按提示命令重新加载环境变量,安装才会生效。
配置依赖下载镜像, 创建文件:
~/.cargo/config
[source.crates-io]
# To use sparse index, change 'rsproxy' to 'rsproxy-sparse'
replace-with = 'rsproxy'
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
[source.rsproxy-sparse]
registry = "sparse+https://rsproxy.cn/index/"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[net]
git-fetch-with-cli = true
获取源码并编译出部署包:
git clone https://gitee.com/FeatureProbe/FeatureProbe.git
在源码目录中编译:
cd server
cargo build --release --verbose完成编译后会在
target/release/
目录下生成可执行的二制文件:$ ls target/release/
feature_probe_server
部署步骤
环境准备
- 无
将生成的
feature_probe_server
文件放在服务器上,并创建启动脚本start-feature-probe-server.sh
:警告实际使用中,需要将下面脚本中的ip和端口修改为你API服务实际部署环境的的ip和端口。
#/bin/bash
export FP_SERVER_PORT=4007 # FeatureProbe Server 端口
export FP_TOGGLES_URL=http://10.100.1.1:4008/internal/server/toggles # FeatureProbe API IP 和端口号
export FP_EVENTS_URL=http://10.100.1.1:4008/internal/server/events
export FP_KEYS_URL=http://10.100.1.1:4008/internal/server/sdk_keys
export FP_REFRESH_SECONDS=1
./feature_probe_server信息Server 服务更详细启动参数说明详见 FeatureProbe Server 参数说明文档
执行启动脚本运行服务:
sh ./start-feature-probe-server.sh
检查服务是否运行成功,在部署机运行:
curl "http://localhost:4007/"
显示如下信息则表示启动成功:
<h1>Feature Probe Server</h1>
编译部署 UI 服务
编译步骤
环境准备
- Node.js 16.13+ : 下载
信息国内建议切换为 npm 中国镜像站:
npm config set registry https://registry.npmmirror.com/
获取源码并编译出可部署的静态文件:
git clone https://gitee.com/FeatureProbe/FeatureProbe.git
cd FeatureProbe/ui
npm install
npm run build完成编译后会在
build
目录下生成可部署的静态文件。如下所示:$ ls build
asset-manifest.json favicon.ico index.html static/【可选】自定义配置产出物路径:
生产环境部署,在域名配置时可以有两个选择:
- 将FeatureProbe服务单独部署成为一个独立的域名,比如:通过 https://your.domain.com 的方式直接访问FeatureProbe入口页面
- 和几个服务共用一个域名,以路径(/path)的形式来进行服务区分,比如:通过 https://your.domain.com/featureprobe 的方式访问FeatureProbe入口页面
目前我们默认支持第一种方式,如果你是以第二种方式进行部署,需要将源码做一些修改:
(1) 打开
craco.config.js
文件cd ui
vi craco.config.js(2) 在原有配置的基础上,在webpack - configure - output 对象中添加
publicPath
字段,比如设置值为:/featureprobe/module.exports = {
webpack: {
configure: {
output: {
publicPath: '/featureprobe/'
},
}
}
};(3) 执行完
yarn build
命令后,通过vi build/index.html
查看index.html文件,可以发现文件中的静态资源js、css文件均已添加了上了publicPath中配置的前缀(4) 为了加快访问速度,你可以选择将静态资源(js、css等)文件上传到CDN服务器,在编译阶段也可以将publicPath配置成CDN的地址:
module.exports = {
webpack: {
configure: {
output: {
publicPath: 'https://cdn.domain.com/'
},
}
}
};编译后html中的静态资源(js、css等)都是携带CDN地址的路径:
部署步骤
环境准备
- Nginx
将编译生成的
build
下的所有文件和文件夹复制到/usr/share/nginx/html/
目录下。
配置 Nginx
创建 Nginx 配置:
/etc/nginx/conf.d/feature_probe.conf
警告实际使用中,需要将下面脚本中的ip和端口修改为服务实际部署环境的的ip和端口。
upstream featureProbeAPI {
server 10.100.1.1:4008; # FeatureProbeAPI IP和端口
}
upstream featureProbeServer {
server 10.100.1.2:4007; # FeatureProbe Server IP和端口
}
server {
listen 4009; # UI 端口
location / {
index index.html index.htm;
root /usr/share/nginx/html; # UI 静态文件目录
try_files $uri /index.html;
}
location /api { # 访问 /api 时统一转发到 featureProbeAPI 服务
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://featureProbeAPI/api;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
location /server/api { # 访问 /server/api 时统一转发到 featureProbeServer 服务
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://featureProbeServer/api;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}【可选】实际使用中,如果配置了自定义产出物路径,比如:将
publicPath
配置成/featureprobe/
,需要将上述nginx配置中的location /
更改为location /featureprobe/
,才能正确匹配到html、js和css等静态文件。location /featureprobe/ {
index index.html index.htm;
root /usr/share/nginx/html; # UI 静态文件目录
try_files $uri /index.html;
}
执行
reload nginx
配置,使上述配置生效:nginx -s reload
验证安装
平台使用
实际使用中,需要将下面的ip和端口修改为你ngnix服务实际部署环境的的ip和端口。
在浏览器中访问 http://10.100.1.1:4009
并使用如下账号密码登录来验证是否部署成功:
- username:
admin
- password:
Pass1234
Server Side SDK 访问
SDK连接使用的服务端 remote_uri
地址为上述配置的的 ngnix 机器地址和服务端口,加上路径 /server
,例如:以上例子中为 http://10.100.1.1:4009/server
具体步骤可以参考百分比灰度接入