# 一键安装

在Linux机器上一键安装运行FizzGate:

wget https://gitee.com/fizzgate/fizz-gateway-node/raw/master/install.sh && bash install.sh

一键安装使用docker-compose集成了fizz-gateway-node、fizz-manager-professional、MySQL、Redis,其中:

fizz-gateway-node:日志映射目录为:./docker_volumes/fizz-gateway-node/logs:/opt/fizz-gateway-node/logs

fizz-manager-professional:日志映射目录为:./docker_volumes/fizz-manager-professional/logs:/opt/fizz-manager-professional/logs

MySQL:root账号密码为root123456,数据映射目录为:./docker_volumes/mysql:/var/lib/mysql

Redis默认不设置密码

服务启动后访问管理后台 http://{部署机器IP地址}:8000/#/login,使用超级管理员账户admin密码Aa123!登录

网关地址格式:

http://127.0.0.1:8600/[服务名]/[API Path]

# 手动安装

# 安装依赖

安装以下依赖软件:

  • Redis 2.8或以上版本
  • MySQL 5.7或以上版本
  • Apollo配置中心 (可选)
  • Eureka v1.10.17或Nacos v2.0.4或以上版本(可选)

# 安装MySQL

  • 操作系统 CentOS 6.5
  • MySQL 5.7.30
  1. 下载MySQL
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.30-1.el6.x86_64.rpm-bundle.tar
  1. 解压
tar -xvf mysql-5.7.30-1.el6.x86_64.rpm-bundle.tar
  1. 安装
sudo yum install mysql-community-{server,client,common,libs}-*
  1. 启动
sudo service mysqld start

启动成功会显示以下信息:

[root@localhost ~]# sudo service mysqld start
Initializing MySQL database:                               [  OK  ]
Starting mysqld:                                           [  OK  ]
  1. 初始密码
sudo grep 'temporary password' /var/log/mysqld.log
  1. 使用初始密码登录
mysql -uroot -p
  1. 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
  1. 退出登录
quit

# 安装Redis 6.0.8

  1. 下载解压并编译
$ wget http://download.redis.io/releases/redis-6.0.8.tar.gz
$ tar xzf redis-6.0.8.tar.gz
$ cd redis-6.0.8
$ make
  1. 启动redis

运行编译后的文件:

$ src/redis-server
  1. 客户端连接
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

# 安装Apollo配置中心

说明: apollo是可选组件(如何启用请看安装fizz-gateway-node社区版说明),如果不使用apollo可使用本地配置文件(application.yml), 如果不使用apollo可跳过此步骤。

安装步骤详见apollo官方文档: (opens new window)

# 安装Eureka服务注册中心

环境要求:

  • JDK 1.8 或以上版本
  • Tomcat 6.0.10 或以上版本 (如使用spring cloud已内置)
  1. 安装JDK 1.8

1)下载JDK,如: jdk-8u192-linux-x64.tar.gz

tar -zxvf jdk-8u192-linux-x64.tar.gz
mv jdk1.8.0_192 /usr/local/

2)设置JDK环境变量,将下面内容追回到/etc/profile文件后面

JAVA_HOME=/usr/local/jdk/jdk1.8.0_192
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/dt.jar
export JAVA_HOME JRE_HOME PATH CLASSPATH

3)执行以下命令全环境变量生效:

source /etc/profile

4)查看是否安装成功

java -version
  1. 安装eureka

1)使用IDE创建一个spring boot项目,如:sc-eureka-server

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>we</groupId>
    <artifactId>sc-eureka-server</artifactId>
    <version>1.0.0</version>
    <name>sc-eureka-server</name>
    <description>eureka server</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

在启动类上添加@EnableEurekaServer注解来启用Euerka注册中心功能:

@SpringBootApplication
@EnableEurekaServer
public class ScEurekaServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ScEurekaServerApplication.class, args);
	}

}

application.properties配置文件:

spring.application.name=sc-eureka-server

server.port=8761
eureka.instance.hostname=localhost
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.server.enableSelfPreservation=false

2) maven构建并运行sc-eureka-server应用, 启动后访问地址http://localhost:8761/可以看到Eureka注册中心的界面

3)把target/sc-eureka-server-1.0.0.jar传到linux服务器上运行. (仅以单机部署为例)

nohup java -jar sc-eureka-server-1.0.0.jar & 

4)eureka客户端的注册地址为:http://localhost:8761/eureka/ (替换localhost为服务器的IP)

eureka.client.serviceUrl.defaultZone = http://localhost:8761/eureka/

# 安装FizzGate

# 管理后台(fizz-manager-professional)

从gitee的releases(https://gitee.com/fizzgate/fizz-gateway-node/releases) 下载 fizz-manager-professional 安装包

说明:

  1. 以下安装步骤出现的{version}表示所使用管理后台的版本号,例如1.3.0

安装方式一:二进制安装包

  1. 解压fizz-manager-professional-{version}.zip安装包
  2. 首次安装执行fizz-manager-professional-{version}-mysql.sql数据库脚本,从低版本升级至高版本选择执行update目录下对应升级脚本
  3. 修改application-prod.yml文件,将相关配置修改成部署环境的配置
  4. Linux启动 执行 chmod +x boot.sh 命令给boot.sh增加执行权限;执行 ./boot.sh start 命令启动服务,支持 start/stop/restart/status命令
  5. Windows启动 执行.\boot.cmd start 命令启动服务,支持 start/stop/restart/status命令

安装方式二(v2.0.0或以上版本):docker:

下载SQL脚本页:https://gitee.com/fizzgate/fizz-gateway-node/releases/tag/{version} (把{version}替换为对应版本号)

首次安装执行fizz-manager-professional-{version}-mysql.sql数据库脚本,从低版本升级至高版本选择执行update目录下对应升级脚本(如有脚本则执行)

  1. 下载对应版本的镜像:docker pull fizzgate/fizz-manager-professional:{version}
  2. 通过环境变量方式修改redis配置、database配置(其它配置同理)并运行镜像
docker run --rm -d -p 8000:8000 \
-e "spring.redis.host={your redis host IP}" \
-e "spring.redis.port={your redis port}" \
-e "spring.redis.password={your redis password}" \
-e "spring.redis.database={your redis database}" \
-e "spring.datasource.url=jdbc:mysql://{your MySQL database host IP}:3306/fizz_manager?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true" \
-e "spring.datasource.username={your MySQL database username}" \
-e "spring.datasource.password={your MySQL database password}" \
fizzgate/fizz-manager-professional:{version}

或通过映射目录方式使用外部配置文件和输出日志到宿主机, 配置文件可从安装包里获取,在宿主机创建fizz-manager-professional/config和fizz-manager-professional/logs目录,把application-prod.yml配置文件放置config下,在fizz-manager-professional目录下运行镜像

cd fizz-manager-professional
docker run --rm -d -p 8000:8000 \
-v $PWD/config:/opt/fizz-manager-professional/config \
-v $PWD/logs:/opt/fizz-manager-professional/logs fizzgate/fizz-manager-professional:{version}

服务启动后访问 http://{部署机器IP地址}:8000/#/login,使用超级管理员账户admin密码Aa123!登录

# 集群部署

集群部署时只需部署一个管理后台服务实例。

# 网关节点(fizz-gateway-node)

说明:

  1. 支持配置中心:apollo、nacos,支持注册中心:eureka、nacos,详细配置方法查看application.yml文件。
  2. 如果使用apollo配置中心,可把application.yml文件内容迁到配置中心(apollo上应用名为:fizz-gateway);如果不使用apollo可去掉下面启动命令里的apollo参数。
  3. 以下安装步骤出现的{version}表示所使用网关的版本号,例如1.3.0

安装方式一:二进制安装包

  1. 下载fizz-gateway-node的二进制安装包,解压修改application.yml配置文件里配置中心、注册中心、redis(redis配置需与管理后台一致)的配置
  2. 根据需要修改boot.sh脚本的apollo连接,不使用apollo配置中心可跳过
#修改为Apollo Meta Server的实际地址
APOLLO_META_SERVER=${APOLLO_META_SERVER:-http://localhost:66}
  1. 执行 ./boot.sh start 命令启动服务,支持 start/stop/restart/status命令

安装方式二:源码安装:

  1. 本地clone仓库上的最新代码,修改application.yml配置文件里配置中心、注册中心、redis(redis配置需与管理后台一致)的配置
  2. 在项目根目录fizz-gateway-node下执行Maven命令mvn clean package install -DskipTests=true
  3. 在项目目录fizz-gateway-node/fizz-bootstrap下执行Maven命令mvn clean package -DskipTests=true
  4. 进入fizz-gateway-node/fizz-bootstrap/target/fizz-gateway-node目录,执行 ./boot.sh start 命令启动服务,支持 start/stop/restart/status命令

安装方式三(v2.0.0或以上版本):docker:

  1. 下载对应版本的镜像:docker pull fizzgate/fizz-gateway-node:{version}
  2. 通过环境变量方式修改redis配置(其它配置同理)并运行镜像
docker run --rm -d -p 8600:8600 \
-e "aggregate.redis.host={your redis host IP}" \
-e "aggregate.redis.port={your redis port}" \
-e "aggregate.redis.password={your redis password}" \
-e "aggregate.redis.database={your redis database}" \
fizzgate/fizz-gateway-node

或通过映射目录方式使用外部配置文件和输出日志到宿主机, 配置文件可从安装包或源码里获取,在宿主机创建fizz-gateway-node/config和fizz-gateway-node/logs目录,把application.yml和log4j2-spring.xml配置文件放置config下,在fizz-gateway-node目录下运行镜像

cd fizz-gateway-node
docker run --rm -d -p 8600:8600 --privileged \
-v $PWD/config:/opt/fizz-gateway-node/config \
-v $PWD/logs:/opt/fizz-gateway-node/logs fizzgate/fizz-gateway-node:{version}

网关的默认服务端口为8600,网关地址格式:

http://127.0.0.1:8600/[服务名]/[API Path]

网关的默认上下文为/, 可以通过修改以下步骤修改, 可配置为其它值如:/proxy;(v2.7.0及以下版本默认上下文为/proxy)

  1. 修改fizz-manager-professional的application.yml配置
gateway:
  prefix: /proxy
  1. 修改fizz-gateway-node的application.yml配置
gateway:
  prefix: /proxy

服务编排测试地址:

http://127.0.0.1:8600/_proxytest/[服务名]/[API Path],其中/_proxytest为测试目录不要对公网开放。

# 集群部署

网关节点服务支持多实例部署,如果网关部署了多个节点可配置通过nginx做负载均衡

# nginx配置

如果网关部署了多个节点可配置通过nginx做负载均衡,参考配置如下:

修改nginx.conf文件,在http下添加upstream

http {
  upstream fizzgate {
      server 10.10.1.1:8600;
      server 10.10.1.2:8600;
      server 10.10.1.3:8600;
  }
  # 您的server配置
  # server {
  #   省略...
  # } 
}

然后在 location中添加

server {
  #
  # 您的其他配置
  # 省略...
  #
  location / {
    # 省略...
    proxy_pass http://fizzgate;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
  }
}

这里的fizzgate 跟 upstream后面的名字对应。第2行的请求头X-Forwarded-For是记录代理过程做的配置,通过配置此请求头fizzgate可获取到调用方的IP。第3行表示在转发时同时转发Host请求头,用于按Host统计流量。

CORS跨域配置:nginx不用配置CORS相关信息,可在FizzGate管理后台的网关管理->设置管理页面一键开启CORS

管理端支持HTTPS配置:如果管理后台开启了HTTPS,需要在后台设置:

server{
  #
  # 您的其他配置
  # 省略...
  #
  # 添加两行配置
  add_header Strict-Transport-Security max-age=0;
  add_header Content-Security-Policy upgrade-insecure-requests;
  #
  # 您的其他配置
  # location / {
  # 
  # }
  # 省略...
}
   

# 网关内部管理接口

/admin/**

这个path对应网关内部的管理接口,用于健康、缓存、聚合配置等的检查,亦需在 nginx 中配置对应的 location:

location /admin/ {
  proxy_pass http://fizzgate;
}

注意:内部管理接口不能对公网开放。

# 版本升级

说明:以下步骤出现的{version}表示所使用的版本号,例如1.3.0

# 管理后台

安装方式一:二进制安装包

从gitee的releases(https://gitee.com/fizzgate/fizz-gateway-node/releases) 下载 fizz-manager-professional 安装包

1、执行SQL脚本

从低版本升级至高版本选择执行update目录下对应升级脚本,如果跨多个版本则执行当前版本和目标版本间的所有升级脚本。

2、拷贝安装包里除application-prod.yml外的文件或文件夹到安装目录覆盖对应文件,用文本对比工具对比新旧版本的配置文件application-prod.yml进行相关配置项的合并。

3、重启服务

boot.sh restart

安装方式二(v2.0.0或以上版本):docker

1、执行SQL脚本

下载SQL脚本页:https://gitee.com/fizzgate/fizz-gateway-node/releases/tag/{version} (把{version}替换为对应版本号)

从低版本升级至高版本选择执行update目录下对应升级脚本,如果跨多个版本则执行当前版本和目标版本间的所有升级脚本。

  1. 下载对应版本的镜像:docker pull fizzgate/fizz-manager-professional:{version}

  2. 通过环境变量方式修改redis配置、database配置(其它配置同理)并运行镜像,运行前先停掉原镜像。

docker run --rm -d -p 8000:8000 \
-e "spring.redis.host={your redis host IP}" \
-e "spring.redis.port={your redis port}" \
-e "spring.redis.password={your redis password}" \
-e "spring.redis.database={your redis database}" \
-e "spring.datasource.url=jdbc:mysql://{your MySQL database host IP}:3306/fizz_manager?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true" \
-e "spring.datasource.username={your MySQL database username}" \
-e "spring.datasource.password={your MySQL database password}" \
fizzgate/fizz-manager-professional:{version}

或通过映射目录方式使用外部配置文件和输出日志到宿主机, 配置文件可从fizz-manager-professional安装包(https://gitee.com/fizzgate/fizz-gateway-node/releases)里获取,在宿主机创建fizz-manager-professional/config和fizz-manager-professional/logs目录,修改配置文件里的修改redis配置、database配置(其它配置同理),把application-prod.yml配置文件放置config下,在fizz-manager-professional目录下运行镜像

cd fizz-manager-professional
docker run --rm -d -p 8000:8000 \
-v $PWD/config:/opt/fizz-manager-professional/config \
-v $PWD/logs:/opt/fizz-manager-professional/logs fizzgate/fizz-manager-professional:{version}

服务启动后访问 http://{部署机器IP地址}:8000/#/login

# 网关节点

安装方式一:二进制安装包

从gitee的releases(https://gitee.com/fizzgate/fizz-gateway-node/releases) 下载 fizz-gateway-node 安装包

1、拷贝安装包里除application.yml和log4j2-spring.xml外的文件或文件夹到安装目录覆盖掉对应文件,用文本对比工具对比新旧版本的配置文件application.yml和log4j2-spring.xml进行相关配置项的合并。

2、重启服务 boot.sh restart

安装方式二(v2.0.0或以上版本):docker

  1. 下载对应版本的镜像:docker pull fizzgate/fizz-gateway-node:{version}
  2. 通过环境变量方式修改redis配置(其它配置同理)并运行镜像,运行前先把旧镜像停掉
docker run --rm -d -p 8600:8600 \
-e "aggregate.redis.host={your redis host IP}" \
-e "aggregate.redis.port={your redis port}" \
-e "aggregate.redis.password={your redis password}" \
-e "aggregate.redis.database={your redis database}" \
fizzgate/fizz-gateway-node

或通过映射目录方式使用外部配置文件和输出日志到宿主机, 配置文件可从安装包或源码里获取,在宿主机创建fizz-gateway-node/config和fizz-gateway-node/logs目录,修改application.yml和log4j2-spring.xml配置文件并放置config下,在fizz-gateway-node目录下运行镜像

cd fizz-gateway-node
docker run --rm -d -p 8600:8600 --privileged \
-v $PWD/config:/opt/fizz-gateway-node/config \
-v $PWD/logs:/opt/fizz-gateway-node/logs fizzgate/fizz-gateway-node:{version}