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 分钟前
用 HBuilder 上架 iOS 应用时如何管理Bundle ID、证书与描述文件
后端
ShaneD77128 分钟前
Redis 实战:从零手写分布式锁(误删问题与 Lua 脚本优化)
后端
我命由我1234528 分钟前
Python Flask 开发问题:ImportError: cannot import name ‘Markup‘ from ‘flask‘
开发语言·后端·python·学习·flask·学习方法·python3.11
無量31 分钟前
Java并发编程基础:从线程到锁
后端
小信啊啊43 分钟前
Go语言数组与切片的区别
开发语言·后端·golang
中国胖子风清扬44 分钟前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain
计算机学姐1 小时前
基于php的摄影网站系统
开发语言·vue.js·后端·mysql·php·phpstorm
Java水解1 小时前
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
spring boot·后端
whoops本尊1 小时前
Golang-Data race【AI总结版】
后端
墨守城规1 小时前
线程池用法及原理
后端