跳转至内容
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
折叠
品牌标识
  1. 主页
  2. 技术实践
  3. 【从头开始】使用docker compose部署OpenZiti

【从头开始】使用docker compose部署OpenZiti

已定时 已固定 已锁定 已移动 技术实践
2 帖子 2 发布者 150 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • Juggernaut 离线
    Juggernaut 离线
    Juggernaut
    发表于 最后由 Juggernaut 编辑
    #1

    前言

    • 下面这坨内容仅包含初始化Ziti环境的内容,如果霸总们已经部署好了可以返回首页了。
    • 部署OpenZiti服务需要对docker、shell有一定的了解。
    • 萌新,内容纯手搓,如果有说得不对的地方还请各位霸总指正。

    话不多说,直接给你干货内容。接下来我用最通俗、最实在、最不玩套路的大白话把问题讲透。

    环境要求

    官方使用的docker compose版本为V2,因此对应的docker版本必须为20.10.0或更高,否则会出现兼容性问题报错,比如在尝试启动容器时提示某些语法错误(如健康检查和depends_on语法不兼容)。
    即便通过修改docker-compose.yml文件的语法使其兼容V1版本,仍然会因为docker版本过低在导致在安全策略问题上出现兼容性问题,如:

    runtime/cgo: pthread_create failed: Operation not permitted
    SIGABRT: abort
    PC=0xfffe2aa7e13c m=0 sigcode=18446744073709551610
    
    goroutine 0 gp=0x6916880 m=0 mp=0x6917ca0 [idle]:
    runtime: g 0 gp=0x6916880: unknown pc 0xfffe2aa7e13c
    stack: frame={sp:0xffffc3be40b0, fp:0x0} stack=[0xffffc33f0000,0xffffc3be45a0)
                       7 6 5 4  3 2 1 0   f e d c  b a 9 8  0123456789abcdef
    此处省略若干雷霆乱码
    

    因此,为了能尽可能少地处理类似的兼容性问题,强烈建议使用高版本的docker。
    下文的安装部署将以docker-26.1.4和docker-compose-v2.27.1为例,其他版本安装方式基本相同。

    检查docker环境

    使用下面的命令检查docker环境是否就绪:

    # 检查docker版本
    docker version
    # 检查docker compose版本
    docker compose version
    

    如果docker版本低于20.10.0,请先升级docker版本。
    另外,官方镜像仓库可能无法访问,或网络延迟极高,请配置镜像加速镜像源或采用其他手段,确保能够顺利拉取镜像。

    准备需要的文件

    使用docker compose部署时需要用到下面几个文件:

    • .env ziti的环境变量文件,docker-compose.yml和容器启动时会从此文件中获取环境变量,.env文件可从官方获取
    • docker-conpose.yml 配置文件,将根据此文件启动docker容器,本文使用的是官方提供的simple-docker-compose.yml文件。可下载此文件并重命名为docker-compose.yml
    • hosts 为方便测试,推荐将ziti-edge-controller和ziti-edge-router配置在系统hosts文件中
    # 可根据实际情况配置ip地址
    127.0.0.1 ziti-edge-controller
    127.0.0.1 ziti-edge-router
    

    如果需要离线部署,还需要准备以下几个镜像:

    • openziti/quickstart 用于创建ziti-edge-controller、ziti-edge-controller-init和ziti-edge-router
    • openziti/zac 用于创建WEB管理页面
    • openziti/hello-world 此镜像在精简版中没有用到
      具体镜像版本等信息可到docker镜像仓库查询

    在线镜像导入方式

    可以使用docker pull命令拉取镜像:

    docker pull openziti/quickstart:latest openziti/zac:latest openziti/hello-world:latest
    

    虽然使用docker compose部署时,会自动从docker hub拉取镜像,但为了避免网络问题导致拉取失败,强烈建议先拉取镜像。

    离线镜像导入方式(无需离线部署可跳过此部分)

    1. 在能够联网的计算机上运行下面的命令,将镜像导出为tar文件:
      # 先拉取镜像再将镜像导出为tar文件
      # 拉取镜像
      docker pull openziti/quickstart:latest openziti/zac:latest openziti/hello-world:latest
      # 如需跨平台导出,如从x86架构的环境中导出aarch64架构的镜像,需使用--platform参数指定平台:
      docker pull --platform linux/arm64 openziti/quickstart:latest openziti/zac:latest openziti/hello-world:latest
      # 该命令会将上面提到的镜像导出为tar文件,并保存为images.tar
      docker save -o images.tar openziti/quickstart:latest openziti/zac:latest openziti/hello-world:latest
      
      备注:如果联网计算机中已存在旧版本镜像或者不是自己想要的镜像版本,请先删除旧版本镜像:
      docker rmi openziti/quickstart:latest openziti/zac:latest openziti/hello-world:latest
      
    2. 将打包的镜像文件复制到需要离线部署的计算机上并执行下面的命令导入镜像:
      docker load -i images.tar
      

    开始部署

    开始部署前再次确认所有需要的文件和docker环境都已就绪。

    1. 创建一个工作目录,如:/home/ziti,将.env、docker-compose.yml文件复制到该工作目录中。
    2. 使用docker compose命令启动docker容器:
      docker compose up -d
      
    3. 等待容器启动成功,并查看容器状态:
      docker compose ps
      # 或者:
      docker ps | grep ziti
      
    4. 访问WEB管理页面:https://ziti-edge-controller:8443

    可能遇到的问题

    • ZAC(也就是WEB管理页面)默认的用户名密码是写在.env文件中的,默认用户名admin,默认密码为空,ziti-controller会在首次启动时初始化一个随机密码,这里建议如果只是测试可以在.env文件中指定管理员密码(不然还得从启动日志里翻)示例如下:
    ZITI_USER=admin
    ZITI_PWD=在这里设置霸总专属密码前后不用加空格
    
    • 此文件中其他容器均依赖ziti-edge-controller容器的启动成功,设置的超时时间为30秒,容易因为健康检查失败导致其他容器不能正常启动,解决方案有两个:
      1. 等待一段时间后重新使用docker compose up -d命令启动docker容器
      2. 修改docker-compose.yml文件中的services.ziti-controller.healthcheck.retries的次数,例如改为60
    • docker-compose.yml文件中使用由docker管理的默认的持久卷位置,若需要自定义持久卷位置可修改其中的volumes设置,如:
    # 这样可以将持久卷位置映射到/home/ziti/data,更方便管理
    # 需要注意的是,必须确保/home/ziti/data目录已存在并具有相应的权限
    # 不放心的可以使用chmod -R 777 /home/ziti/data为目录设置777权限
    volumes:
      ziti-fs:
       driver: local
       driver_opts:
          type: none
          o: bind
          device: /home/ziti/data
    

    需要注意的是windows环境下的docker desktop使用的是wsl2.0,目录映射比较特殊,不建议自定义映射路径。

    1 条回复 最后回复
    0
    • admin 离线
      admin 离线
      admin
      发表于 最后由 编辑
      #2

      不错,感谢分享!

      1 条回复 最后回复
      0

      你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

      厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

      有了你的建议,这篇帖子会更精彩哦 💗

      注册 登录
      回复
      • 在新帖中回复
      登录后回复
      • 从旧到新
      • 从新到旧
      • 最多赞同


      • 登录

      • 没有帐号? 注册

      • 登录或注册以进行搜索。
      • 第一个帖子
        最后一个帖子