安装禅道

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

作者:ysicing 最后编辑:周悦秋 于 2024-12-20 08:52:58 浏览量:66180
摘要:基于容器化部署安装禅道指南

本文主要介绍Docker镜像、docker compose 以及Kubernetes的方式部署禅道。

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

一、镜像地址

  • 开源版

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

    • biz11.2
    • biz11.2.k8s
  • 旗舰版

    • max6.2
    • max6.2.k8s
  • IPD版

    • ipd3.2
    • Ipd3.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 目录即可

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

后续默认使用最新开源版镜像为例, 如果使用docker部署,推荐使用compose管理维护

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 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 使用内置Redis

从 21.2 版本开始,镜像内置Redis服务,可以通过设置 REDIS_INTERNAL=true 环境变量,开启内置的Redis服务密码是  pass4Redis


推荐使用外部Redis服务,内置Redis仅供测试使用。


3.4 使用compose运行

示例如下:

services:
# db service for zentao
  zentao-db:
    image: mariadb:10.6
    container_name: zentao-db
    ports:
      - '3306:3306'
    volumes:
      - /data/zentao-mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=pass4Zentao
      - MYSQL_DATABASE=zentao
    networks:
      - zentao-net
# zentao service
  zentao:
    image: hub.zentao.net/app/zentao:21.2
    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
    networks:
      - zentao-net
networks:
  zentao-net:
    driver: bridge

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

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

3.5 完整版compose示例(支持外部数据库和redis)


services:
# db service for zentao
  zentao-db:
    image: bitnami/mariadb:10.6
    # 国内镜像
    # image: hub.zentao.net/app/mariadb:10.6-bitnami
    container_name: zentao-db
    pull_policy: if_not_present
    restart: always
    volumes:
      - 'zentao_db:/bitnami/mariadb'
      # 使用宿主机目录挂载数据
      # - '/data/zentao/mariadb:/bitnami/mariadb'
    networks:
      - zentao-net
    environment:
      - MARIADB_USER=my_user
      - MARIADB_PASSWORD=my_password
      - MARIADB_DATABASE=zentao
      - MARIADB_CHARACTER_SET=utf8mb4
      - MARIADB_COLLATE=utf8mb4_unicode_ci
      - MARIADB_ROOT_PASSWORD=pass4Zentao
    healthcheck:
      test: ['CMD', '/opt/bitnami/scripts/mariadb/healthcheck.sh']
      interval: 15s
      timeout: 5s
      retries: 6
  zentao-cache:
    image: bitnami/redis:6.2
    # 国内镜像
    # image: hub.zentao.net/app/redis:6.2-bitnami
    container_name: zentao-cache
    pull_policy: if_not_present
    restart: always
    environment:
      - REDIS_PASSWORD=pass4Zentao
    volumes:
      - 'zentao_cache:/bitnami/redis/data'
      # 使用宿主机目录挂载数据
      # - '/data/zentao/redis:/bitnami/redis/data'
    networks:
      - zentao-net
# zentao service
  zentao:
    image: easysoft/zentao
    # 国内镜像
    # image: hub.zentao.net/app/zentao
    container_name: zentao
    pull_policy: always
    restart: always
    ports:
      - '80:80'
    volumes:
      - 'zentao_data:/data'
      # 使用宿主机目录挂载数据
      # - '/data/zentao/data:/data'
    depends_on:
      - zentao-db
      - zentao-cache
    environment:
      - ZT_MYSQL_HOST=zentao-db
      - ZT_MYSQL_PORT=3306
      - ZT_MYSQL_USER=root
      - ZT_MYSQL_PASSWORD=pass4Zentao
      - ZT_MYSQL_DB=zentao
      - PHP_SESSION_TYPE=redis
      - PHP_SESSION_PATH=tcp://zentao-cache:6379?auth=pass4Zentao
      - PHP_EXT_REDIS=true
      - ZT_REDIS_HOST=zentao-cache
      - ZT_REDIS_PORT=6379
      - ZT_REDIS_PASSWORD=pass4Zentao
      - ZT_REDIS_SERIALIZER=igbinary # php, igbinary
      - ZT_CACHE_ENABLE=true
      - ZT_CACHE_TYPE=redis
      - ZT_CACHE_SCOPE=private
      - ZT_CACHE_LIFETIME=0
      - PHP_MAX_EXECUTION_TIME=120
      - PHP_MEMORY_LIMIT=512M
      - PHP_POST_MAX_SIZE=128M
      - PHP_UPLOAD_MAX_FILESIZE=128M
    networks:
      - zentao-net
      # 指定mac地址设置网络如下,需要删除`- zentao-net`
      # zentao-net:
      # 02:42:ac:11:00:02为示例mac地址
      #   mac_address: 02:42:ac:11:00:02
networks:
  zentao-net:
    driver: bridge
# persistence for mysql, cache and zentao
volumes:
  zentao_db:
  zentao_cache:
  zentao_data:


注意点: 存储根据需要设置,示例使用docker volume,可以选择映射宿主句目录(如果遇到数据库或者redis没法启动,需要将映射目录权限设置为777)


四、环境变量

变量名 默认值 说明
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,默认关闭
REDIS_INTERNAL false 使用内部的Redis,默认关闭
RR_INTERNAL true Roadrunner服务,默认开启
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发件人邮箱密码
IS_CONTAINER true 是否在容器内运行,zentao更新时使用

4.1 Session配置

如果使用内置的 redis 作为 session存储,需要设置3个环境变量:

1. 启用内置 Redis服务:REDIS_INTERNAL=true

2. session 存储类型:PHP_SESSION_TYPE=redis

2. session 存储路径:  PHP_SESSION_PATH=tcp://127.0.0.1:6379?auth=pass4Redis


使用内置Redis服务配置PHP session:

dokcer run -it -e REDIS_INTERNAL=true -e PHP_SESSION_TYPE=redis -e PHP_SESSION_PATH=tcp://127.0.0.1:6379?auth=pass4Redis -p 8080:80 hub.zentao.net/app/zentao:latest



使用独立的MySQL和Redis:

# 运行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 -e MYSQL_DATABASE=zentao mariadb:10.6
# 运行禅道
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 -e MYSQL_DATABASE=zentao mariadb:10.6
# 运行禅道
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版本要求高于3.8.2版本,推荐下载最新版本helm

helm repo add zentao https://hub.zentao.net/chartrepo/stable 
helm repo update
helm search repo zentao/zentao
helm upgrade -i zentao zentao/zentao --set ingress.enabled=true --set ingress.host=zentao.example.local 
zentao/zentao 开源版本
zentao/zentao-max 旗舰版本
zentao/zentao-biz 企业版本
zentao/zentao-ipd 旗舰版本
zentao/zentaopaas devops版本
注意: 如果mysql或者redis没法正常启动,查看日志提示持久化目录权限问题,需要保证目前权限777即可;如果禅道遇到没有相关权限的话,卸载重新安装,在pod启动完成后先将/data目录给予777权限 chomd 777 -R /data, 然后再走安装引导流程

5.1 高级自定义配置


# 下载zentao charts
helm pull zentao/zentao --untar 
# 自定义配置 zentao/values.yaml为custom.yaml(只自定义原配置需要修改的值) 
helm upgrade -i zentao zentao/zentao -f custom.yaml
# 给个简单示例,如果禅道开源版我想禁用NodePort
方法1:
helm upgrade -i zentao zentao/zentao --set service.type=ClusterIP
方法2:
helm upgrade -i zentao zentao/zentao -f custom.yaml
# cat custom.yaml
service:
  type: ClusterIP


六、版本升级

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

七、其他

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镜像

compose配置示例

返回顶部
刘斌
高级客户经理
17685869372
526288068
统一服务热线 4006-8899-23
我要提问提问有任何问题,您都可以在这里提问。 问题反馈反馈点击这里,让我们聆听您的建议与反馈。