环境
jdk1.8、mysql5.7* 、系统可用内存2G+
下载Quick Start安装包
github地址:GitHub - apolloconfig/apollo-quick-start: Apollo Quick Startgg
百度网盘地址:通过[网盘链接](https://pan.baidu.com/s/1Ieelw6y3adECgktO0ea0Gg)下载,提取码: 9wwe
apollo 安装
1、创建数据库并执行sql
下载文件后解压,在./sql目录下有两个sql文件,先创建两个mysql数据库(ApolloPortalDB
和ApolloConfigDB
),并分别执行目录中的sql文件。
2、修改./demo.sh文件,包括数据库连接信息及服务器端口地址信息
#apollo config db info
apollo_config_db_url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)
#将地址改为服务器IP地址
config_server_url=http://xxx.xxx.xxx.xxx:8080
admin_server_url=http://xxx.xxx.xxx.xxx:8090
portal_url=http://xxx.xxx.xxx.xxx:8070
3、验证端口是否被占用
使用以下命令验证即可:
lsof -i:8070、lsof -i:8080、lsof -i:8090
4、赋权demo.sh文件执行权限
chomd 777 demo.sh
5、执行./demo.sh脚本
6、浏览器访问http://xxx.xxx.xxx.xxx:8070
用户名/密码:apollo/admin
遇到的问题
1、执行demo.sh脚本后,总是卡住,日志信息为:
Config service failed to start in 120 seconds! Please check ./service/apollo-service.log for more information.
然后查看./service/apollo-service.log,发现日志信息只有以下内容:
2022-08-23 15:19:33.906 INFO 3221 --- [main] c.c.f.apollo.assembly.ApolloApplication : The following profiles are active: github
2022-08-23 15:43:47.868 INFO 10701 --- [main] c.c.f.apollo.assembly.ApolloApplication : Starting ApolloApplication v1.9.2 using Java 1.8.0_161 on localhost.localdomain with PID 10701 (/home/mg_gg_be/apollo/apollo-quick-start-1.9.2/service/apollo-service.jar started by mg_gg_be in /home/mg_gg_be/apollo/apollo-quick-start-1.9.2/service)
2022-08-23 15:43:47.875 INFO 10701 --- [main] c.c.f.apollo.assembly.ApolloApplication : The following profiles are active: github
2022-08-23 15:43:55.333 INFO 10701 --- [main] o.s.cloud.context.scope.GenericScope : BeanFactory id=e4e7a962-7e6a-32f7-a9a2-73b8244230aa
根据这个日志看不出问题,然后再去看生成的console.log发现了问题:
可以看出,是系统内存不足,导致启动失败了,查询资料得知,由于apollo要一次性启动三个项目,所需要的内存1.XG以上,最好是2G以上。
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000078e300000, 407896064, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 407896064 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/mg_gg_be/apollo/apollo-quick-start-1.9.2/service/hs_err_pid3221.log
2、数据库密码问题,执行不成功,查看日志发现提示数据库密码错误:
java.sql.SQLException: Access denied for user 'Mg_gg_apollo_config'@'XX.XX.XX.XX' (using password: YES)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:829)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:449)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:242)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
然后查看demo.sh文件,发现密码并没有错误,最后发现数据库密码中有@和$两个特殊字符,在sheel脚本中需要将其强转成普通字符才可以,修改后重新执行,成功!
shell转义符介绍如下:
shell提供转义符有三种:单引号,双引号,反斜杠,本人使用的是单引号。
字符说明
''
单引号,硬转义,其内部所有的shell元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。
""
双引号,软转义,其内部只允许出现特定的shell元字符($,`,\):$用于变量值替换、`用于命令替换、\用于转义单个字符
\
反斜杠,转义,去除其后紧跟的元字符或通配符的特殊意义。