Docker和Kubernetes方式部署禅道 分享链接

作者:ysicing 最后编辑:ysicing 于 2024-03-26 13:26:24 浏览量:34245
摘要:基于容器化部署安装禅道指南

Docker及Helm部署安装

一、支持的版本(Tag)

当前版本镜像支持 x86_64(amd64)arm64 架构

1.1 镜像地址

  • 开源版

    • latest, 18.7(具体版本可以参考官网版本)
  • 企业版

    • biz8.7
    • biz8.7.k8s
  • 旗舰版

    • max4.7
    • max4.7.k8s
  • IPD版

    • ipd1.0.2
    • Ipd1.0.2.k8s

 

  • 时间戳版本,这个版本会随着每次镜像更新会自动生成,如有固定版本需求可以考虑时间戳版本如 18.7 有多个版本18.7-2023091818.7-20230916 ,在0916时,18.7最新版本就等于18.7-20230916, 在0918时18.7版本最新版本等于18.7-20230918

二、获取镜像

推荐从国内镜像仓库拉取我们构建好的Docker镜像

docker pull hub.zentao.net/app/zentao:[TAG]

如需使用指定的版本,可以拉取一个包含版本标签的镜像,在Docker Hub仓库中查看 可用版本列表

docker pull hub.zentao.net/app/zentao:[TAG] 

三、运行镜像

禅道容器镜像做了特殊处理,将所有需要持久化的数据都保存到了 /data 目录,因此,运行禅道容器镜像,您只需要将持久化目录挂载到容器的 /data 目录即可

如果挂载的目录为空,首次启动会自动初始化相关文件

后续默认使用最新开源版镜像为例

3.1 使用内置数据库

通过设置 MYSQL_INTERNAL=true 会启动内置的MySQL服务, 默认用户名为 root,密码是 123456

docker run -d -v <你的宿主机目录>/data:/data -p 80:80 -e MYSQL_INTERNAL=true hub.zentao.net/app/zentao 

3.2 使用外部数据库

docker run -it \
    -v $PWD/data:/data \
    -p 80:80 \
    -e MYSQL_INTERNAL=false \
    -e ZT_MYSQL_HOST=<你的MySQL服务地址> \
    -e ZT_MYSQL_PORT=<你的MySQL服务端口> \
    -e ZT_MYSQL_USER=<你的MySQL服务用户名> \
    -e ZT_MYSQL_PASSWORD=<你的MySQL服务密码> \
    -e ZT_MYSQL_DB=<禅道数据库名> \
    hub.zentao.net/app/zentao 

3.3 使用compose运行

示例如下:

# docker-compose.yaml
version: '2'
services:
# db service for zentao
  zentao-db:
    image: bitnami/mariadb
    container_name: zentao-db
    ports:
      - '3306:3306'
    volumes:
      - /data/zentao/db:/bitnami/mariadb
    environment:
      - MARIADB_ROOT_PASSWORD=pass4Zentao
      - MARIADB_DATABASE=zentao
    networks:
      - zentao-net
# zentao service
  zentao:
    image: hub.zentao.net/app/zentao
    container_name: zentao
    ports:
      - '80:80'
    volumes:
      - /data/zentao/file:/data
    depends_on:
      - zentao-db
    environment:
      - ZT_MYSQL_HOST=zentao-db
      - ZT_MYSQL_PORT=3306
      - ZT_MYSQL_USER=root
      - ZT_MYSQL_PASSWORD=pass4Zentao
      - ZT_MYSQL_DB=zentao
      - PHP_MAX_EXECUTION_TIME=120
      - PHP_MEMORY_LIMIT=512M
      - PHP_POST_MAX_SIZE=128M
      - PHP_UPLOAD_MAX_FILESIZE=128M
      - LDAP_ENABLED=false
      - SMTP_ENABLED=false
      - APP_DEFAULT_PORT=80
      - APP_DOMAIN=zentao.demo.com
      - PROTOCOL_TYPE=http
      - IS_CONTAINER=true
      - LINK_GIT=false
      - LINK_CI=false
    networks:
      - zentao-net
networks:
  zentao-net:
    driver: bridge 

将上面文件保存为 docker-compose.yml

# 执行
docker-compose up -d
# 新版本docker插件方式
docker compose up -d 

四、环境变量

变量名 默认值 说明
DEBUG false 是否打开调试信息,默认关闭
PHP_SESSION_TYPE files php session 类型,files | redis
PHP_SESSION_PATH /data/php/session php session 存储路径
PHP_MAX_EXECUTION_TIME 120 最大执行时间,单位秒,有助于防止有问题程序占尽服务器资源。默认120
PHP_MEMORY_LIMIT 256M 单个php进程允许分配的最大内存
PHP_POST_MAX_SIZE 128M 允许最大Post数据大小
PHP_UPLOAD_MAX_FILESIZE 128M 单个文件上传的最大值
MYSQL_INTERNAL false 使用内部的MySQL,默认关闭
ZT_MYSQL_HOST 127.0.0.1 MySQL 主机地址
ZT_MYSQL_PORT 3306 MySQL 端口
ZT_MYSQL_DB zentao zentao数据库名称
ZT_MYSQL_USER root MySQL用户名
ZT_MYSQL_PASSWORD pass4zenTao MySQL密码
LDAP_ENABLED false 是否启用LDAP
LDAP_HOST 127.0.0.1 LDAP服务主机地址
LDAP_PORT 389 LDAP服务端口
LDAP_BASEDN dc=quickon,dc=org LDAP BaseDN
LDAP_ADMINUSER cn=admin,dc=quickon,dc=org LDAP 管理员
LDAP_BINDPASSWORD pass4zenTao LDAP Bind 密码
LDAP_USERKEY uid LDAP 用户名称的字段名
LDAP_EMAILKEY mail LDAP 用户邮箱的字段名
LDAP_GROUP 1 默认用户组(1: 管理员, 2: 研发, 3: 测试, 类比)
LDAP_REALNAME name LDAP 用户真实姓名的字段名
LDAP_REPEATPOLICY number LDAP 用户重名策略,number:数字后缀,dept:部门后缀
LDAP_AUTOCREATE 1 LDAP 用户自动创建,1:自动创建,0:不自动创建
SMTP_ENABLED false 启用SMTP
SMTP_FROMNAME ZenTao $VERSION SMTP发件人显示名称
SMTP_HOST 127.0.0.1 SMTP 服务主机地址
SMTP_PORT 25 SMTP 服务端口号
SMTP_USER zentao@easycorp.cn SMTP发件人邮箱地址
SMTP_PASS pass4zenTao SMTP发件人邮箱密码
LINK_GIT false DevOps模块,是否链接Git服务
GIT_TYPE gitea 连接的git服务名称,目前支持 gitea/gogs/gitlab
GIT_INSTANCE_NAME gitea Git 服务名称
GIT_USERNAME root Git 管理员账号名称,用于生成token
GIT_PASSWORD pass4QuickOn Git 管理员密码,用于生成token
GIT_PROTOCOL https Git 服务协议类型,http或https(废弃)
GIT_DOMAIN https://git.haogs.cn Git 服务域名(完整域名包含协议头)
GIT_TOKEN - Git Token优先级高于用户名, 默认为空
LINK_CI false DevOps模块,是否链接CI服务
CI_TYPE jenkins 连接的ci服务名称,目前支持 jenkins
CI_USERNAME root CI 管理员账号名称,用于生成token
CI_PASSWORD pass4QuickOn CI 管理员密码,用于生成token
CI_PROTOCOL https CI 协议类型,http或https(废弃)
CI_URL https://jenkins.haogs.cn CI 服务域名(完整域名包含协议头)
CI_TOKEN - CI Token优先级高于用户名, 默认为空
LINK_SCAN false DevOps模块,是否链接扫描服务
SCAN_TYPE sonarqube 连接的扫描服务名称,目前支持 sonarqube
SCAN_USERNAME admin SCAN 管理员账号名称,用于生成token
SCAN_PASSWORD pass4QuickOn SCAN 管理员密码,用于生成token
SCAN_PROTOCOL https SCAN 协议类型,http或https(废弃)
SCAN_URL https://sonarqube.haogs.cn SCAN 服务域名(完整域名包含协议头)
IS_CONTAINER true 是否在容器内运行,zentao更新时使用

4.1 Session配置

如果使用redis作为session存储,session path配置值PHP_SESSION_PATH

无密码: tcp://127.0.0.1:6379

有密码: tcp://127.0.0.1:6379?auth=password

有用户密码: tcp://127.0.0.1:6379?auth=user:password

# 运行redis
docker run -d --rm --name redis redis:3.2.12-alpine3.8
# 运行mysql
docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=pass4you mysql:5.7.38-debian
# 运行禅道
docker run -d --rm --name zentao \
--link mysql \
--link redis \
-e ZT_MYSQL_HOST=mysql \
-e ZT_MYSQL_PORT=3306 \
-e ZT_MYSQL_USER=root \
-e ZT_MYSQL_PASSWORD=pass4you \
-e ZT_MYSQL_DB=zentao \
-e PHP_SESSION_TYPE=redis \
-e PHP_SESSION_PATH=tcp://redis:6379 \
-v /data/zentao:/data \
-p 8088:80 \
hub.zentao.net/app/zentao:latest 

4.2 调整最大上传文件的限制

通过设置 PHP_POST_MAX_SIZEPHP_UPLOAD_MAX_FILESIZE 这两个环境变量的值来调整最大上传文件的限制,另外,如果考虑到用户网速的因素,建议把PHP_MAX_EXECUTION_TIME 也加大一些,这样可以保证用户的文件可以上传完成

# 运行mysql
docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=pass4you mysql:5.7.38-debian
# 运行禅道
docker run -d --rm --name zentao \
--link mysql \
--link redis \
-e ZT_MYSQL_HOST=mysql \
-e ZT_MYSQL_PORT=3306 \
-e ZT_MYSQL_USER=root \
-e ZT_MYSQL_PASSWORD=pass4you \
-e ZT_MYSQL_DB=zentao \
-e PHP_MAX_EXECUTION_TIME=300 \
-e PHP_POST_MAX_SIZE=512M \
-e PHP_UPLOAD_MAX_FILESIZE=512M \
-v /data/zentao:/data \
-p 8088:80 \
hub.zentao.net/app/zentao:latest 

五、Kubernetes通过helm命令安装开源版示例

helm repo add zentao https://hub.qucheng.com/chartrepo/stable
helm repo update
helm search repo zentao/zentao
helm upgrade -i zentao-open zentao/zentao --set ingress.enabled=true --set ingress.host=zentao.example.local 

5.1 高级自定义配置

# 下载zentao charts
helm pull zentao/zentao --untar
# 自定义配置 zentao/values.yaml, 示例
helm upgrade -i zentao-open zentao/zentao -f custom.yaml 

六、版本升级

目前容器镜像已做特殊处理,同一发行版可以直接修改镜像版本号直接升级

七、其他

7.1 绑定IP和MAC地址

# 创建docker网络, ip子网地址示例172.172.172.0/24,网络驱动名示例zentao-net
docker network create --subnet=[ip范围] [网络驱动名] 
# 启动容器指定
docker run \
--name [容器名] \
-p [主机端口]:80 \
--network=[网络驱动名] \
--ip [容器IP] \
--mac-address [mac地址] \
-v [主机禅道目录]:/data \
-e MYSQL_INTERNAL=true \
-d hub.zentao.net/app/zentao:[镜像标签] 

7.2 附录

Docker方式部署禅道

easysoft/zentao镜像