最開始只是想找個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的網關。