Web应用的创建笔记(3)_创建镜像与部署到API Gateway

在上一篇文章中,我已成功创建了一个基本的管理功能的WEB应用,提供了几个REST API用于对产品进行管理。

在这个文章中,我将把提供这些API服务的WEB后端应用程序创建一个Docker镜像,放到服务器上运行。然后再把这些API注册发布到KONG API Gateway

创建Docker镜像:

1. 在服务器上安装Docker,具体安装步骤参照Docker官网。Doker安装好之后,运行命令sudo docker pull java, 获取Java镜像。

2. 把之前创建的Spring boot的Rest API进行打包发布。运行maven projects里面的package, 打包完成之后生成的JAR文件在target目录,上传到服务器的myweb目录。

3. 创建Docker文件,在myweb目录新建一个Dockerfile文件,输入以下信息:

FROM java:latest
VOLUME /tmp
ADD myweb-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

4. 在myweb目录下创建镜像,运行以下命令:

sudo docker build -t myweb:0.1 .

镜像创建成功后,运行一下命令来运行镜像(注意—net=’host’是使得镜像与宿主机的网络连通,不然的话没法访问mysql服务。这个选项好像会有些安全隐患,留待以后再做进一步研究):

sudo docker run --net='host' myweb:0.1

镜像运行成功后,打开网页http://server ip:9090/all,可以见到有输出全部的产品信息

配置KONG API Gateway:

1. 首先安装postgresql,按照官网的步骤,创建/etc/apt/sources.list.d/pgdg.list,在文件里面添加一行debhttp://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main, 然后执行以下命令:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
Sudo apt-get install postgresql-10

2.  安装好postgresql之后,执行以下命令来创建kong user:

createuser kong

输入以下命令进入psql命令行,设置kong的密码:

sudo -u postgres psql
\password kong
\q

创建kong数据库:

CREATE DATABASE kong OWNER kong

3. 安装KONG,在kong的网站下载对应的安装包,然后执行以下命令:

$ sudo apt-get update
$ sudo apt-get install openssl libpcre3 procps perl
$ sudo dpkg -i kong-community-edition-0.13.1.*.deb

安装好之后,去到/etc/kong目录,把kong.conf备份一下。把kong里面的和psql数据库相关的几行去掉注释,另外还要设置kong用户的密码,然后执行以下命令来migrate:

kong migrations up [-c /etc/kong/kong.conf]

执行以下命令来启动kong:

sudo kong start [-c /etc/kong/kong.conf]

访问http://localhost:8001即可看到kong启动完成后的配置信息

4. 发布API到KONG,首先要定义多个Service,分别对应之前创建的多个REST API。

创建获取所有产品信息的service, 执行以下的命令:

curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=get-all-products' \
--data 'url=http://server ip:9090/all'
创建获取产品详细信息的service, 执行以下的命令:
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=get-product' \
--data 'url=http://server ip:9090/productdetail/'

创建添加产品的service, 执行以下的命令:

curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=create-product' \
--data 'url=http://server ip:9090/createproduct/'

创建更新产品信息的service, 执行以下的命令:

curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=update-product' \
--data 'url=http://server ip:9090/updateproduct/'
创建删除产品的service, 执行以下的命令:
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=delete-product' \
--data 'url=http://server ip:9090/deleteproduct/'

5. 为Services配置相应的routes,执行以下的命令:

curl -i -X POST \
--url http://localhost:8001/services/get-all-products/routes \
--data 'hosts[]=server ip' \
--data 'paths[]=/all'
curl -i -X POST \
--url http://localhost:8001/services/get-product/routes \
--data 'hosts[]=server ip' \
--data 'paths[]=/productdetail'
curl -i -X POST \
--url http://localhost:8001/services/create-product/routes \
--data 'hosts[]=server ip' \
--data 'paths[]=/createproduct'
curl -i -X POST \
--url http://localhost:8001/services/update-product/routes \
--data 'hosts[]=server ip' \
--data 'paths[]=/updateproduct'
curl -i -X POST \
--url http://localhost:8001/services/delete-product/routes \
--data 'hosts[]=server ip' \
--data 'paths[]=/deleteproduct'

KONG的API Gateway已经配置好了

前端代码修改:

修改前端的代码,把Angular的项目的product.service.ts中的指向API的链接全都更新为新的API Gateway的链接。

private productsUrl ='http://server ip:8000/all';   
private productDetailUrl ='http:// server ip:8000/productdetail';
private productUpdateUrl ='http:// server ip:8000/updateproduct';
private productCreateUrl ='http:// server ip:8000/createproduct';
private productDeleteUrl ='http:// server ip:8000/deleteproduct';

启动Web前端,访问页面,可以看到系统实现的功能和之前一样,表明我们的API Gateway已经设置成功了。

猜你喜欢

转载自blog.csdn.net/gzroy/article/details/80268817