apollo部署和nginx代理问题解决

我正在参加「金石计划5.0」

一、写在前面

今天我们来学习一个分布式环境下,配置管理中心。

很多小伙伴可能会说:呵呵,用nacos不是挺好?

哈哈,我只能说:nacos确实是挺好的,而且还包含了注册中心的功能。不过哥们也是没有办法呀,甲方要求用apollo,我们确实只能去学习下apollo相关的知识点和使用方法了。

唉,又是掌握新技能的一天!!!

二、apollo介绍

Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

  • apollo架构说明

JVM8080:对外暴露的网络端口是8080,里面有Meta Server,Eureka,Config Service,其中Config Service又使用了ConfigDB

JVM8090:对外暴露的网络端口是8090,里面有Admin Service,并且Admin Service使用了ConfigDB

JVM8070:对外暴露的网络端口是8070,里面有Portal,并且Portal使用了PortalDB

复制代码
进程JVM8070依赖进程JVM8090和PortalDB

进程JVM8090依赖进程JVM8080和ConfigDB

进程JVM8080依赖ConfigDB

这里说明一下,apollo单机部署,最少需要2个database:1个PortalDB和ConfigDB

3个jvm进程:8070portal,8080configService,8090adminService

其中,8070portal,是web端配置中心管理端,也是我们经常使用到的。

这里为什么要先说明一下apollo架构呢,因为我们通过apollo的部署文档,直接跑起apollo服务。

一下子,直接跑起3个jvm进程,可能有些小伙伴,一时之间会有点迷惑,为啥有那么服务,我要用到哪个服务?能不能只跑起我需要的服务?

通过这个apollo架构图,可以知道,这3个jvm进程之间是由相互联系的,所以不能单单跑起某个服务,是需要所有的jvm服务都要跑起来,才行!!!

唉,看到这里,确实是有槽点了,3个jvm进程,消耗服务器资源不是更多了?

三、apollo单机部署

apollo文档说明

  • 环境准备

jdk环境:1.8+

mysql数据库:5.6.5+

  • apollo下载

直接下载Quick Start安装包,就可以直接使用,免去了编译、打包过程。

apollo-build-scripts项目

apollo-quick-start目录结构如上,一般我们要注意的有下面两个地方:

1.sql,是数据库脚本(创建数据库时用到)

2.demo.sh,是运行apollo的脚本(启动apollo时用到)

  • 创建数据库

Apollo服务端共需要两个数据库:ApolloPortalDBApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql(上面提到)文件,只需要导入数据库即可。

注意:如果你本地已经创建过Apollo数据库,请注意备份数据。这里的sql文件会清空Apollo相关的表。

并执行sql文件,初始化数据库

  • 配置数据库连接信息

Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑demo.sh(上面提到),修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。

注意:填入的用户需要具备对ApolloPortalDB和ApolloConfigDB数据的读写权限。

sh 复制代码
vi demo.sh

修改数据库连接配置

ini 复制代码
#apollo config db info
apollo_config_db_url="jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_config_db_username=root
apollo_config_db_password=root

# apollo portal db info
apollo_portal_db_url="jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
apollo_portal_db_username=root
apollo_portal_db_password=root

注意:不要修改demo.sh的其它部分

  • 启动Apollo配置中心

Quick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。

例如,在Linux/Mac下,可以通过如下命令检查:

sh 复制代码
lsof -i:8080 

启动apollo

bash 复制代码
./demo.sh start

当看到如下输出后,就说明启动成功了!

swift 复制代码
==== starting service ====
Service logging file is ./service/apollo-service.log
Application is running as root (UID 0). This is considered insecure.
Started [12798]
Waiting for config service startup....
Config service started. You may visit http://localhost:8080 for service status now!
Waiting for admin service startup.
Admin service started
==== starting portal ====
Portal logging file is ./portal/apollo-portal.log
Application is running as root (UID 0). This is considered insecure.
Started [13379]
Waiting for portal startup....
Portal started. You can visit http://localhost:8070 now!

访问:http://localhost:8070

输入用户名apollo,密码admin后登录

三、nginx代理apollo

因为apollo,8070端口的服务,是占用了/根目录访问的,那么我们用nginx代理,/根目录,一般是不会给这些中间件使用的。

所以我们要给apollo加上一个访问前缀。

直接nginx加前缀试试:

nginx 复制代码
location /apollo/ {
    proxy_pass http://127.0.0.1:8070/;
}

直接访问,有些请求,是会丢失了/apollo前缀,所以还不能简单的通过nginx加访问前缀

nginx访问的,登录完成后,是页面异常。就是有些接口丢失了/apollo

出现了这种情况,哥们一度以为要去改源码了,但是经过网上的一些资料,我们可以给apollo一个访问前缀。

嘿,看到这里,好像有种茅舍顿开的感觉,springboot项目,加访问前缀,不是简简单单的事吗?

sh 复制代码
-Dserver.servlet.context-path=/apollo

编辑一下demo.sh文件,在下面这个地方加上这个前缀即可。

重启apollo服务

加了前缀后,nginx就正常了

登录后,也正常


好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下,再走呗!!!

相关推荐
追逐时光者1 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_1 小时前
敏捷开发流程-精简版
前端·后端
苏打水com2 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
西瓜er3 小时前
JAVA:Spring Boot 集成 FFmpeg 实现多媒体处理
java·spring boot·ffmpeg
间彧3 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧3 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧3 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧3 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧4 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng5 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端