前言
- 下面这坨内容仅包含初始化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拉取镜像,但为了避免网络问题导致拉取失败,强烈建议先拉取镜像。
离线镜像导入方式(无需离线部署可跳过此部分)
- 在能够联网的计算机上运行下面的命令,将镜像导出为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:latestdocker rmi openziti/quickstart:latest openziti/zac:latest openziti/hello-world:latest - 将打包的镜像文件复制到需要离线部署的计算机上并执行下面的命令导入镜像:
docker load -i images.tar
开始部署
开始部署前再次确认所有需要的文件和docker环境都已就绪。
- 创建一个工作目录,如:/home/ziti,将.env、docker-compose.yml文件复制到该工作目录中。
- 使用docker compose命令启动docker容器:
docker compose up -d - 等待容器启动成功,并查看容器状态:
docker compose ps # 或者: docker ps | grep ziti - 访问WEB管理页面:https://ziti-edge-controller:8443
可能遇到的问题
- ZAC(也就是WEB管理页面)默认的用户名密码是写在.env文件中的,默认用户名admin,默认密码为空,ziti-controller会在首次启动时初始化一个随机密码,这里建议如果只是测试可以在.env文件中指定管理员密码(不然还得从启动日志里翻)示例如下:
ZITI_USER=admin
ZITI_PWD=在这里设置霸总专属密码前后不用加空格
- 此文件中其他容器均依赖ziti-edge-controller容器的启动成功,设置的超时时间为30秒,容易因为健康检查失败导致其他容器不能正常启动,解决方案有两个:
- 等待一段时间后重新使用
docker compose up -d命令启动docker容器 - 修改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,目录映射比较特殊,不建议自定义映射路径。