Apollo多环境部署需数据库隔离、服务地址收敛及application-github.properties字段精确绑定;MySQL 8.0+须先执行ALTER USER...IDENTIFIED WITH mysql_native_password,再导入SQL,否则因认证插件不兼容导致启动失败。

生产多环境部署 Apollo,不是把 DEV 配置复制几份改个名就行。核心在于数据库隔离、服务注册地址收敛、以及 application-github.properties 中每个字段都必须按环境精确绑定——漏配一个 IP 或写错一个库名,configservice 就卡在 Eureka 注册失败,portal 打不开,连登录页都进不去。
MySQL 8.0+ 必须先改认证插件再建库
MySQL 8.0 默认用 caching_sha2_password,Apollo 的 JDBC 驱动(5.1.x)不认,启动时日志里只报 Client does not support authentication protocol,根本不会提示是认证问题。
- 用 root 登录 MySQL 后立刻执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 然后才导入 SQL:
mysql -uroot -p 和 <code>mysql -uroot -p - 两个库必须分离:
ApolloPortalDB全局只一套;ApolloConfigDB_DEV、ApolloConfigDB_FAT、ApolloConfigDB_PRO各环境独立建库,不能共用 - 密码里不能含空格,否则
spring.datasource.password解析截断,连接池起不来,日志只显示Connection refused
application-github.properties 每个环境都要单独改这三处
这个文件在 apollo-configservice/conf/ 和 apollo-adminservice/conf/ 下各一份,内容相似但用途不同。DEV 环境能跑通,不代表 FAT 就自动 OK——因为配置是硬编码进包里的,不是启动时动态加载。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
spring.datasource.url必须指向对应环境的库,例如 PRO 环境写:jdbc:mysql://10.10.20.100:3306/ApolloConfigDB_PRO?characterEncoding=utf8,不能写localhost -
apollo.configService.url和apollo.adminService.url在apollo-portal/conf/application-github.properties里也要同步,填的是内网可访问的 VIP 或具体 IP + 端口,比如http://10.10.20.100:8080 -
apollo.profile=github必须显式设置,否则 Spring Boot fallback 到空 profile,读不到任何配置项
服务必须按 configservice → adminservice → portal 顺序启动,且注册 IP 要可控
ConfigService 启动失败,90% 是它把自己注册到了 docker0 或 vethxx 这类不可达网卡上,导致 AdminService 和 Portal 根本发现不了它。
- 启动脚本里加 JVM 参数强制指定注册地址:
-Deureka.instance.ip-address=10.10.20.100 -Dspring.cloud.inetutils.ignoredInterfaces[0]=docker0 - 多节点部署时,
eureka.service.url不是在配置文件里写的,而要提前写进ApolloConfigDB_SERVERCONFIG表:UPDATE ServerConfig SET Value='http://10.10.20.100:8080/eureka/,http://10.10.20.101:8080/eureka/' WHERE `Key`='eureka.service.url'; - 启动后立刻验证:
curl http://10.10.20.100:8080/eureka/apps应返回包含configservice和adminservice的 XML,空或 404 就说明注册失败
Portal 访问不到 ConfigService?先查 $JAVA_HOME 和端口放行
Portal 页面空白或报“无法连接配置中心”,往往不是 Portal 自己崩了,而是它压根没拿到 ConfigService 地址——要么 $JAVA_HOME 没生效,要么防火墙拦了 8080 端口。
- 在 Portal 启动前运行:
echo $JAVA_HOME,确认输出非空,且该路径下存在/bin/java - 检查
iptables或firewalld:sudo firewall-cmd --list-ports,确保 8070(Portal)、8080(ConfigService)、8090(AdminService)已放行 - Portal 日志里如果出现
No instances found for configservice,说明它连 Eureka 都没连上,重点查apollo.configService.url值和网络连通性,而不是 Portal 本身配置
最常被跳过的一步:PRO 环境上线前,没在 ApolloPortalDB.ServerConfig 表里把 apollo.portal.envs 改成 DEV,FAT,UAT,PRO,结果 Portal 界面右上角环境切换菜单里压根没有 PRO 选项——这个值不是靠配置文件控制的,是数据库硬编码的。

















