最近在研究开源网关,找了一圈,发现这个叫 Apinto 的开源网关符合我的需求,下面我将演示如何部署这样一个开源网关。
Apinto功能架构图
开始部署
部署资源
设备推荐配置 | 设备数量 | 部署对象 |
4核8G,250G磁盘空间,2.5GHz | 1 | 控制台程序、Mysql数据库、Redis数据库 |
4核8G,250G磁盘空间,2.5GHz | 2 | 网关节点 |
部署资源
控制台程序、mysql数据库、redis数据库建议安装在一台服务器,Apinto节点原则上一台服务器部署一个节点,多个Apinto节点组成一个Apinto集群。
控制台一键部署
此处使用docker-compose进行一键化部署,因此在部署前,服务器应该已经安装好docker
1.13 及其以上版本,并且安装了docker-compose。
-
Docker安装教程:https://www.runoob.com/docker/ubuntu-docker-install.html
-
Docker-Compose安装教程:https://www.runoob.com/docker/docker-compose.html
1、编辑一键部署文件
(1)编辑docker-compose.yml
文件
vi docker-compose.yml
(2)修改文件配置
version: '3'
services:
mysql:
image: mysql:5.7.21
privileged: true
restart: always
container_name: apinto_mysql
hostname: apinto_mysql
ports:
- "33306:3306"
environment:
- MYSQL_ROOT_PASSWORD={MYSQL_PWD}
- MYSQL_DATABASE=apinto
volumes:
- /var/lib/apinto/mysql:/var/lib/mysql
networks:
- apinto
apinto-dashboard:
image: eolinker/apinto-dashboard
container_name: apinto-dashboard
privileged: true
restart: always
networks:
- apinto
ports:
- "18080:8080"
depends_on:
- mysql
- redis_cluster
environment:
- MYSQL_USER_NAME=root
- MYSQL_PWD={MYSQL_PWD}
- MYSQL_IP=apinto_mysql
- MYSQL_PORT=3306 #mysql端口
- MYSQL_DB="apinto"
- ERROR_DIR=/apinto-dashboard/work/logs # 日志放置目录
- ERROR_FILE_NAME=error.log # 错误日志文件名
- ERROR_LOG_LEVEL=info # 错误日志等级,可选:panic,fatal,error,warning,info,debug,trace 不填或者非法则为info
- ERROR_EXPIRE=7d # 错误日志过期时间,默认单位为天,d|天,h|小时, 不合法配置默认为7d
- ERROR_PERIOD=day # 错误日志切割周期,仅支持day、hour
- REDIS_ADDR=172.100.0.1:7201,172.100.0.1:7202,172.100.0.1:7203,172.100.0.1:7204,172.100.0.1:7205,172.100.0.1:7206 #Redis集群地址 多个用,隔开
- REDIS_PWD={REDIS_PWD} # Redis密码
volumes:
- /var/log/apinto/apinto-dashboard/work:/apinto-dashboard/work #挂载log到主机目录
redis_cluster:
container_name: redis_cluster
image: eolinker/cluster-redis:6.2.7
hostname: redis_cluster
privileged: true
restart: always
environment:
- REDIS_PWD={REDIS_PWD}
- PORT=7201
- HOST={HOST}
volumes:
- /var/lib/apinto/redis-cluster/data:/usr/local/cluster_redis/data
network_mode: host
networks:
apinto:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.100.0.0/24
上述配置中,使用 "{}" 包裹的均为变量,相关变量说明如下:
-
MYSQL_PWD:mysql数据库root用户初始化密码
-
REDIS_PWD:redis密码
-
HOST:Redis广播IP,可设置宿主机的局域网IP/外网IP,建议此处设置宿主机的局域网IP。
查看宿主机IP方法如下:
ip route
执行后得到下列IP列表,从下表可以看到,宿主机默认局域网ip
是172.18.31.253
替换后配置示例如下:
version: '3'
services:
mysql:
image: mysql:5.7.21
privileged: true
restart: always
container_name: apinto_mysql
hostname: apinto_mysql
ports:
- "33306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=apinto
volumes:
- /var/lib/apinto/mysql:/var/lib/mysql
networks:
- apinto
apinto-dashboard:
image: eolinker/apinto-dashboard
container_name: apinto-dashboard
privileged: true
restart: always
networks:
- apinto
ports:
- "18080:8080"
depends_on:
- mysql
- redis_cluster
environment:
- MYSQL_USER_NAME=root
- MYSQL_PWD=123456
- MYSQL_IP=apinto_mysql
- MYSQL_PORT=3306 #mysql端口
- MYSQL_DB="apinto"
- ERROR_DIR=/apinto-dashboard/work/logs # 日志放置目录
- ERROR_FILE_NAME=error.log # 错误日志文件名
- ERROR_LOG_LEVEL=info # 错误日志等级,可选:panic,fatal,error,warning,info,debug,trace 不填或者非法则为info
- ERROR_EXPIRE=7d # 错误日志过期时间,默认单位为天,d|天,h|小时, 不合法配置默认为7d
- ERROR_PERIOD=day # 错误日志切割周期,仅支持day、hour
- REDIS_ADDR=172.100.0.1:7201,172.100.0.1:7202,172.100.0.1:7203,172.100.0.1:7204,172.100.0.1:7205,172.100.0.1:7206 #Redis集群地址 多个用,隔开
- REDIS_PWD=123456 # Redis密码
volumes:
- /var/log/apinto/apinto-dashboard/work:/apinto-dashboard/work #挂载log到主机目录
redis_cluster:
container_name: redis_cluster
image: eolinker/cluster-redis:6.2.7
hostname: redis_cluster
privileged: true
restart: always
environment:
- REDIS_PWD=123456
- PORT=7201
- HOST=172.18.31.253
volumes:
- /var/lib/apinto/redis-cluster/data:/usr/local/cluster_redis/data
network_mode: host
networks:
apinto:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.100.0.0/24
2、部署控制台
在docker-compose.yml
文件所在目录下执行下列命令,即可一键完成部署。
docker-compose up -d
部署完成结果如下图
部署节点
节点提供Docker部署和安装包部署两种部署方式,这两种部署方式都能快速让Apinto节点在您的服务器上运行起来。
安装包部署
Apinto安装包可从https://github.com/eolinker/apinto/releases/中获取,Apinto支持在arm64、amd64架构上运行。
1. 下载安装包并解压(此处以v0.12.4版本的安装包示例)
wget https://github.com/eolinker/apinto/releases/download/v0.12.4/apinto_v0.12.4_linux_amd64.tar.gz && tar -zxvf apinto_v0.12.4_linux_amd64.tar.gz && cd apinto
请根据需要下载对应架构及系统的安装包,安装包下载请点击跳转
2. 安装网关:
./install.sh install
执行该步骤将会生成配置文件/etc/apinto/apinto.yml
和/etc/apinto/config.yml
,可根据需要修改。
3. 启动网关:
apinto start
Docker部署
容器有两个可挂载目录和一个可挂载配置文件:
-
/var/lib/apinto
: 数据目录
#目录结构如下
cluster member
/extends #存放扩展
-
/var/log/apinto
: 系统日志目录
#目录结构如下
error.log #日志文件
-
注意:系统日志文件默认日志过期时间为7天,每天生成新的日志文件,错误日志等级为error。
-
若要修改系统日志配置,可以通过修改
/apinto/apinto.yml
实现。apinto.yml相关文档点此进行跳转。 -
/etc/apinto/config.yml
: 程序运行配置文件
version: 2
#certificate: # 证书存放根目录
# dir: /etc/apinto/cert
client:
#advertise_urls: # open api 服务的广播地址
#- http://127.0.0.1:9400
listen_urls: # open api 服务的监听地址
- http://0.0.0.0:9400
#certificate: # 证书配置,允许使用ip的自签证书
# - cert: server.pem
# key: server.key
gateway:
#advertise_urls: # 转发服务的广播地址
#- http://127.0.0.1:9400
listen_urls: # 转发服务的监听地址
- https://0.0.0.0:8099
- http://0.0.0.0:8099
peer: # 集群间节点通信配置信息
listen_urls: # 节点监听地址
- http://0.0.0.0:9401
#advertise_urls: # 节点通信广播地址
# - http://127.0.0.1:9400
#certificate: # 证书配置,允许使用ip的自签证书
# - cert: server.pem
# key: server.key
该文件用于配置网关的路由监听端口、openAPI监听端口等信息。
默认路由监听端口为8099,openAPI监听端口为9400。
备注:config.yml文件内容参考点此跳转
容器运行示例
docker run -td -p 8099:8099 -p 9400:9400 \
-v /data/apinto/data-dir:/var/lib/apinto \
-v /data/apinto/log-dir:/var/log/apinto \
-v /data/apinto/config-dir/config.yml:/etc/apinto/config.yml \
--name=apinto_node eolinker/apinto-gateway:latest
关于 Apinto
Apinto是一款高性能、可扩展、易维护的API网关。
Apinto网关基于GO语言模块化开发,5分钟极速部署,配置简单、易于维护,支持集群与动态扩容,企业级开箱即用。Apinto除了提供丰富的网关插件外,还将提供监控告警、用户角色等企业插件,同时支持自定义网关插件和可扩展企业插件,满足我们企业的定制化需求。
Apinto支持代理外部流量,转发给内部服务,也支持内部服务之间的通信代理。