最开始只是想找个API网关防止API被恶意请求,找了一圈发现基于Nginx的OpenResty(Lua语言)扩展模块Orange挺好(也找了Kong,可是感受复杂了点没用),还偷懒用Vagrant结合Docker来快速搭建环境,基于别人的Dockerfile把整个实验跑通了,以为还不错。想着好像CoreOS是专门为Docker服务的,还买了一本《CoreOS实践》花小半天时间看完了,CoreOS在集群环境下确实很牛,可是个人环境仍是轻量级点,因此仍是基于CentOS来作,就这样研究了两天时间,与你们分享一下,欢迎留言拍砖或交流!。html
通常开发接口的时候各类语言都已经有很成熟的框架了,互联网领域用得最多的应该是RESTfull+JSON的模式,可是小型项目对接口基于没有安全方面、性能等的考虑, 以前写过一篇直接经过JS抓取数据的《玩爽了!直接在Chrome里抓取数据》,就算考虑的话实现起来也缺乏简便的办法,时间上也不必定容许。mysql
随着微服务的流行,须要有一个相似于API网关的中间件来作API的管理工做,也就是API的实现方面更多的考虑业务逻辑,安全、性能、监控能够交由网关来作(以下图所示,下图根据Kong官方文档修改),这样既提升业务灵活性又不缺安全性。nginx
开头已经说了环境会涉及到VirtualBox、Vagrant、Docker、Nginx、Lua、OpenRety、Orange,好在基本的坑都已经填完了。但你最好也有一些这方面的基础,因为实验步骤冗长不免有些地方没有记录到或者省略。(本文全部步骤基于MacOS环境)git
提早安装VirtualBox、Vagrantgithub
vagrant init centos/7 vagrant up vagrant ssh
编辑Vagrantfile,配置私有IPsql
config.vm.network "private_network", ip: "192.168.88.77"
sudo yum update
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF sudo yum install docker-engine sudo systemctl enable docker.service sudo systemctl start docker sudo docker run --rm hello-world
这里我作了docker volume,还有设置你的mysql root密码,执行命令进入dockerdocker
sudo docker run --name platform-db -v /alidata/database:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=your_root_password -p 3306:3306 mysql:5.7 sudo docker exec -it platform-db /bin/bash
建立数据库和用户数据库
CREATE DATABASE orange; CREATE USER 'orange'@'%' IDENTIFIED BY 'orange'; GRANT ALL PRIVILEGES ON orange.* TO 'orange'@'%';
执行数据库初始化脚本 ,初始化Orange数据库centos
直接使用我发布的docker镜像 cbcye/orange5api
sudo docker run -d --name orange \ --link platform-db:orange-database \ -p 7777:7777 \ -p 8888:8888 \ -p 9999:9999 \ --security-opt seccomp:unconfined \ cbcye/orange5
编辑配置文件
sudo docker exec -it platform-db /bin/bash vi /usr/local/orange/orange.conf #修改数据库链接信息 vi /usr/local/orange/conf/nginx.conf #配置upstream server,真实api server
重启orange
sudo docker stop orange sudo docker start orange
访问http://192.168.88.77:9999/ 用户名:admin 密码:orange_admin
至此环境搭建成功
将真实API地址/api/appdata 经过/appdata的方式暴露给外部请求
一分钟只容许2次请求
当请求超过限制的话则会提示HTTP错误,而真实的API Server不须要作任何操做
如开头所说,API Gateway做为微服务重要的中间件,对原有API Server不须要改动或者改动很小就能实现,通用的功能也很容易整合,基于Nginx的OpenResty开发的Orange性能也能获得保障。所以颇有必要使用API Gateway把开放的接口管理起来。欢迎留言拍砖或交流!
#查看docker日志 sudo docker logs <container_name> #查看全部docker sudo docker ps --all #删除 docker sudo docker rm orange
#进入docker控制台(container名称:platform-db)
sudo docker exec -it platform-db /bin/bash #Orange日志位置 /usr/local/orange/logs/
最近我发现国内出现了一个能够直接使用的API网关产品(小豹API网关),相比开源产品,对企业使用起来更加方便,功能看起来比Orange的管理、监控更增强大,看网站介绍能够用于微服务网关、API服务治理平台、OpenAPI的网关。