0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Docker-Compose的Apollo部署安装与使用

马哥Linux运维 来源:马哥Linux运维 2024-01-02 10:15 次阅读

前言

Apollo(阿波罗)是携程开源的分布式配置管理中心

本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验

特点

成熟,稳定

支持管理多环境/多集群/多命名空间的配置

配置修改发布实时(1s)通知到应用程序

支持权限控制、配置继承,版本管理,灰度发布,使用监控等

官方提供了 。NET/Java/Go 的 SDK 以及 Http 接口

国产中文,文档友好,大厂背书,使用方案成熟

使用简单,支持 Docker , K8S,官方也提供多种高可用方案参考

使用情况

目前在微服务项目中做为配置中心,表现稳定,体验良好

内存情况:新安装启动在 100M 左右,工作中实际 20 项目,80 客户端使用时,三个服务占 1.5G 左右

测试环境和生产环境分开,安全及避免错误操作

为什么选择 Apollo:稳定&简单,虽然比不上 Nacos 的性能,也没有服务发现功能,但是稳定啊!!!

在我自己部署前,会觉得这个东西好难,好重,好麻烦。写这篇文章的时候的感受只有两个字:牛*

实践

准备

当前版本:v2.1

apollo-db:mysql 5.6.6+ 数据库

默认端口:3306

依赖两个数据库:ApolloPortalDB,ApolloConfigDB

默认账号/密码:apollo/admin

apollo-configservice:Config Service 提供配置的读取、推送等功能。

默认端口:8080

应用程序端连接到此服务使用

apollo-adminservice: Admin Service 提供配置的修改、发布等功能

默认端口:8090

管理界面使用此服务

apollo-portal:Portal 提供 Web 界面用来管理配置

默认端口:8070

Web 管理界面

默认账号/密码:apollo/admin

Deureka:提供服务注册和发现

Config Service 和 Admin Service 会向 Eureka 注册服务,并保持心跳

在 Admin Service 需要指定eureka.service.url

服务配置方式的优先级从高到低分别为:系统参数>环境变量>外部配置文件

使用 Docker Compose 安装

本篇文章基于 Docker V24 及 Docker Compose V2,安装可以参考之前的文章

配置说明

挂载了日志文件到。/logs 目录

固定了镜像版本 mysql v5.7 , apollo v2.1.0

指定 MySql 账号密码: root devops666 ,修改了端口映射 13306:3306

挂载 MySql 数据,初始化脚本文件夹 。/initsql(v2.1 脚本)

Apollo 服务中使用服务名 apollo-db 连接 MySql:SPRING_DATASOURCE_URL:'...apollo-db:3306/...'

设置先启动数据库:depends_on:apollo-db

apollo-configservice 服务中指定向 Deureka(Apollo 服务发现组件)注册的地址:http://192.168.123.214:8080

apollo-adminservice 服务中指定向 Deureka 注册的服务地址:http://192.168.123.214:809

apollo-adminservice 服务需指定 Deureka 服务地址:-Deureka.service.url=``http://192.168.123.214:8080/eureka/

指定网络:devopsnetwork (docker network create devopsnetwork)

web 管理端默认账号密码:apollo admin,登录后修改!!!

配置文件 compose.yml

准备好 compose.yml 及 。/initsql/初始化脚本,修改其中的 IP

拷贝到服务器

然后运行docker compose up -d即可

 version: '3.1'
 services:
   # Apollo数据库
   apollo-db:
     image: mysql:5.7
     container_name: apollo_db_5_7
     restart: always
     environment:
       TZ: Asia/Shanghai
       MYSQL_ROOT_PASSWORD: 'devops666'
     ports:
       - "13306:3306"
     volumes:
       - ./initsql:/docker-entrypoint-initdb.d
       - ./data:/var/lib/mysql
     networks:
       - devopsnetwork


   # Apollo 服务发现注册中心
   apollo-configservice:
     container_name: apollo_configservice_2_1
     image: apolloconfig/apollo-configservice:2.1.0
     restart: always
     depends_on:
       - apollo-db
     environment:
       SPRING_DATASOURCE_URL: 'jdbc//apollo-db:3306/ApolloConfigDB?characterEncoding=utf8'
       SPRING_DATASOURCE_USERNAME: 'root'
       SPRING_DATASOURCE_PASSWORD: 'devops666'
       JAVA_OPTS: "-Deureka.instance.homePageUrl=http://192.168.123.214:8080"
       # EUREKA_INSTANCE_HOME_PAGE_URL: http://192.168.123.214:8080
       # EUREKA_INSTANCE_PREFER_IP_ADDRESS: false
     volumes:
       - ./logs:/opt/logs
     ports:
       - "8080:8080"
     networks:
       - devopsnetwork


   #核心接口服务
   apollo-adminservice:
     container_name: apollo_adminservice_2_1
     image: apolloconfig/apollo-adminservice:2.1.0
     restart: always
     environment:
       SPRING_DATASOURCE_URL: 'jdbc//apollo-db:3306/ApolloConfigDB?characterEncoding=utf8'
       SPRING_DATASOURCE_USERNAME: 'root' 
       SPRING_DATASOURCE_PASSWORD: 'devops666'
       JAVA_OPTS: "-Deureka.instance.homePageUrl=http://192.168.123.214:8090 -Deureka.service.url=http://192.168.123.214:8080/eureka/ "
     depends_on:
       - apollo-db
     ports:
       - "8090:8090"
     volumes:
       - ./logs/:/opt/logs      
     networks:
       - devopsnetwork
       
  
   apollo-portal:
     image: apolloconfig/apollo-portal:2.1.0
     container_name: apollo_portal_2_1
     restart: always
     environment:
       SPRING_DATASOURCE_URL: 'jdbc//apollo-db:3306/ApolloPortalDB?characterEncoding=utf8'
       SPRING_DATASOURCE_USERNAME: 'root'
       SPRING_DATASOURCE_PASSWORD: 'devops666'
       APOLLO_PORTAL_ENVS: 'dev'      
       DEV_META: 'http://192.168.123.214:8080'
       # 默认账号 apollo admin
     depends_on:
       - apollo-db
     ports:
       - "8070:8070"
     volumes:
       - ./logs/:/opt/logs         
     networks:
       - devopsnetwork


 networks:
   devopsnetwork:
     external: true
 ```

部署成功

部署机器IP:192.168.123.214

723a4884-a8a7-11ee-8b88-92fbcf53809c.jpg

72452a7e-a8a7-11ee-8b88-92fbcf53809c.jpg

使用 K8S 安装

跟着官方文档一步步来即可,helm 的文件可以从apolloconfig/apollo-helm-chart获取,这里只分享下步骤和些注意的地方

初始化数据库

可以使用已有或者部署 mysql 服务,并创建 apollo 专门的账号密码

执行 Apollo 对应版本的v2.1 默认初始化脚本创建 ApolloConfigDB,ApolloPortalDB

生产环境 记得修改 ServerConfig 表的 环境和组织apollo.portal.envs:proorganizations:[{"orgId":"xxx","orgName":"xxx公司"}]

使用 helm 添加 apollo repo

安装 apollo-service

安装 apollo-portal

k8s 使用

可以将 Apollo 相关配置存储到 k8s 的ConfigMap中方便 k8s 服务中使用

使用

.NET SDK

官方:Com.Ctrip.Framework.Apollo.Configuration

添加包:Com.Ctrip.Framework.Apollo.Configuration

appsetting.json 中添加 apollo 配置

MetaServer:Apollo 服务地址,系统信息中也可以查看到

AppId:应用 Id

Namespaces:命名空间默认是 application

获取参数注册:可以是配置,也可以是从环境变量中

builder.Configuration.AddApollo(builder.Configuration.GetSection("apollo"));

注入IConfiguration使用即可

连接配置


  "apollo": {
    "MetaServer": "http://192.168.123.214:8080",
    "AppId": "devops.test",
    "Namespaces": [ "application" ]
  }

72572bf2-a8a7-11ee-8b88-92fbcf53809c.jpg

726a653c-a8a7-11ee-8b88-92fbcf53809c.jpg

Demo 示例

dotnet v7.0


var builder = WebApplication.CreateBuilder(args)
builder.Configuration.AddApollo(builder.Configuration.GetSection("apollo"))
app.MapGet("/config", context =>
{
    context.Response.Headers["Content-Type"] = "text/html
    //配置服务
    var configService = context.RequestServices.GetRequiredService()
    string? key = context.Request.Query["key"]
    if (string.IsNullOrWhiteSpace(key))
    {
        return context.Response.WriteAsync("获取配置:/config?key=test");
    }
    var value = configService[key];
    return context.Response.WriteAsync(value ?? "undefined");
});

完整 Demo 示例 :Github 地址

踩过的坑

数据库配置连接,使用服务名,而不是容器名

-Deureka.instance.homePageUrl 和 -Deureka.service.url 参数一开始没有理解到是做什么的,只知道配置健康检查失败,看了文档才理解到是 Deureka.instance.homePageUrl 是注册的服务地址,-Deureka.service.url 是注册中心的接口地址

后语

时间充裕的情况最好是过一遍文档,知道是怎么设计的,遇到问题真会一头雾水。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8986

    浏览量

    85120
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1024

    浏览量

    45733
  • Apollo
    +关注

    关注

    5

    文章

    340

    浏览量

    18391

原文标题:Apollo 配置中心的部署与使用经验

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【飞腾派4G版免费试用】3.JITSI视频会议想开就开

    ,jvb,jigasi,jibri} JITSI,启动 docker-compose up -d 打开浏览器访问 https://localhost:8443 ,到这就说明安装成功了。
    发表于 12-25 18:44

    【昉·星光 2 高性能RISC-V单板计算机体验】为 Ubuntu 安装 Docker 及常用软件

    docker sudo apt install docker.io 安装 docker-compose sudo apt-get install
    发表于 02-21 17:54

    docker流程部署步骤

    为女朋友写一个小程序(五)— —如何用docker简化部署
    发表于 09-12 08:26

    基于DOCKER容器的ELK日志收集系统分析

    工具docker-compose,一键式构建基于Docker容器的ELK日志收集系统的实验环境,证明了本系统收
    发表于 11-06 14:15 3次下载
    基于<b class='flag-5'>DOCKER</b>容器的ELK日志收集系统分析

    云计算核心技术Docker教程:Docker Compose的pull和push命令详解

    Docker-Compose pull命令可以拉取docker-compose.yml或者docker-stack.yml文件中定义的服务关联的镜像,Docker-Compose pu
    的头像 发表于 11-17 18:22 9151次阅读

    云计算核心技术DockerCompose中的环境变量

    :${TAG}” 如果您有多个环境变量,则可以通过提供环境变量文件的路径来替换它们。默认情况下,该docker-compose 命令将.env在您运行该命令的目录中查找一个名为的文件。通过将文件作为参数,你
    的头像 发表于 02-16 09:58 3687次阅读

    docker compose一键打包部署项目的实践

    【导读】本文介绍了 docker compose 一键打包部署项目的实践。
    的头像 发表于 08-30 11:03 1492次阅读

    Docker-compose常用的解决方法

    我们常常见到很多比较棒的开源项目,但在本地安装运行的话就会很复杂,要配置不同的环境,安装不同的依赖,好一点的会用docker直接拉取,或者打包好。
    的头像 发表于 09-05 15:22 1445次阅读

    使用podman-compose部署wordpress的示例

    我们对于docker-compose并不陌生,它是一个用于编排多个可能相互依赖的容器的工具。
    的头像 发表于 10-17 10:59 2679次阅读

    SpringBoot接入轻量级分布式日志框架GrayLog

    老样子,直接上docker-compose,如果一直跟着我的步伐,应该对着不陌生了。docker-compose.yml 的内容其实我也是抄官网的,这里还是贴下吧(就不用你们翻了)
    的头像 发表于 10-27 10:29 1046次阅读

    Linux中如何使用Docker安装MySQL

    如果您是 MySQL 的新手或希望快速轻松地安装 MySQL 数据库的人,那么本文适合您,在本文中,我们将学习如何在 Linux 中使用 DockerDocker compose
    的头像 发表于 05-12 16:22 3605次阅读
    Linux中如何使用<b class='flag-5'>Docker</b><b class='flag-5'>安装</b>MySQL

    使用Docker安装WordPress教程

    本教程将向您展示如何使用 Docker ComposeDocker 容器中运行 WordPress 安装
    的头像 发表于 07-28 11:39 1483次阅读
    使用<b class='flag-5'>Docker</b><b class='flag-5'>安装</b>WordPress教程

    linux docker安装部署

    了解如何在Linux上安装部署Docker。 一、安装Docker 在开始之前,请确保您的Linux系统满足以下要求: 64位版本的Lin
    的头像 发表于 11-23 09:27 1047次阅读

    如何利用树莓派安装DockerDocker-compose呢?

    本文主要演示了树莓派如何安装DockerDocker-compose的过程。
    的头像 发表于 12-14 16:19 2730次阅读
    如何利用树莓派<b class='flag-5'>安装</b><b class='flag-5'>Docker</b>和<b class='flag-5'>Docker-compose</b>呢?

    宝塔面板Docker一键安装部署GPTAcademic,开发私有GPT学术优化工具

    使用宝塔Docker-compose,5分钟内在海外服务器上搭建gpt_academic。这篇文章讲解如何使用宝塔面板的Docker服务搭建GPT 学术优化 (GPT Academic)。   在
    的头像 发表于 07-02 11:58 2416次阅读
    宝塔面板<b class='flag-5'>Docker</b>一键<b class='flag-5'>安装</b>:<b class='flag-5'>部署</b>GPTAcademic,开发私有GPT学术优化工具