开源项目管理工具Taiga

什么是 Taiga ?

Taiga 是一个免费开源,而且功能非常强大的项目管理平台,用于初创企业和敏捷开发团队。Taiga 专注于简洁性,并且界面很干净简单。Taiga 也非常个性化,并集合了很多其它功能和外部工具,还有大量社区创建的工具。

软件特点:

  1. 开源免费Taiga是完全开源的,允许用户自由使用、修改和分发。
  2. 友好的界面Taiga 提供了一个清晰、直观的用户界面,易于理解和使用。
  3. 敏捷管理 :支持 ScrumKanban 两种主要的敏捷开发方法,用户可以根据团队的需求选择合适的方法。
  4. 任务管理:任务卡片详细记录每个工作项的状态、优先级、标签等信息,便于团队成员协作。
  5. 维基与文档:内置维基功能,方便团队共享知识和编写项目文档。
  6. 版本控制集成 :无缝对接 Git,实现代码提交和版本控制的实时同步。
  7. 权限和角色管理:允许用户根据角色设置不同的权限,以控制对项目和任务的访问。
  8. 通知系统:通过电子邮件或应用内通知让用户了解重要的更新和变更。
  9. 自动化工作流 :通过自定义规则和 Webhooks 实现自动化任务分配。
  10. 多语言支持Taiga 提供多种语言,满足全球化团队的需求。
  11. API 可扩展性 :开放 API 允许与其他系统集成。
  12. 分析和报告:提供完整的仪表板和进度报告功能。

安装

在群晖上以 Docker 方式安装。

Taiga 用到 9 个镜像,采用 docker-compose 安装方式,需要准备好三个文件

env.txt

env.txt 是环境变量文件,在官方的 .env 文件基础上修改而成,源文件地址: https://github.com/taigaio/taiga-docker/blob/main/.env

因为添加了中文注释,保存时记得采用 UTF-8 格式

ini 复制代码
# Taiga的URL - 定义Taiga应该在哪里提供服务的变量
## Taiga 服务使用 "http" 或 "https"(安全)连接
## 因为在局域网使用,所以采用 http 协议
TAIGA_SCHEME=http
## Taiga 服务的基本URL
## 其中 192.168.0.197 是群晖服务器的 IP
TAIGA_DOMAIN=192.168.0.197:9118
## 子路径,将附加到 TAIGA_DOMAIN(使用 "" 或 "/subpath")
TAIGA_SUBPATH="" 
## 事件连接协议(使用 "ws" 或 "wss")
WEBSOCKETS_SCHEME=ws

# Taiga的密钥 - 提供加密签名的变量
## 请将其更改为不可预测的随机值
TAIGA_SECRET_KEY=M3JJcauWbz9Zzd6gt8d9mxrQPHpU69PWNsJJd6aFVXa3a8VrtrhHbLC7HE2ayS7a

# Taiga的数据库设置 - 创建Taiga数据库并连接到它的变量
## 数据库主机,使用的 docker-compose.yml 中的 service name 
POSTGRES_HOST=taiga-db
## 数据库库名
POSTGRES_DB=taiga
## 连接到PostgreSQL的用户
POSTGRES_USER=taiga
## 数据库用户的密码
POSTGRES_PASSWORD=taiga

# Taiga 的 SMTP 设置 - 发送Taiga邮件给用户的变量
## 使用SMTP服务器或在控制台中显示电子邮件("django.core.mail.backends.smtp.EmailBackend"或"django.core.mail.backends.console.EmailBackend")
EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
## SMTP 服务器地址
EMAIL_HOST=smtp.88.com
## 默认 SMTP 端口
EMAIL_PORT=465
## 连接 SMTP 服务器的用户
EMAIL_HOST_USER=wbsu2003@88.com
## SMTP 用户的密码
EMAIL_HOST_PASSWORD=<第三方邮件客户端密码>
## 用于自动邮件的默认电子邮件地址
DEFAULT_FROM_EMAIL=wbsu2003@88.com
## 使用 SMTP 服务器的 TLS(安全)连接
EMAIL_USE_TLS=False
## 使用 SMTP 服务器的 SSL(安全)连接
EMAIL_USE_SSL=True

# Taiga的 RabbitMQ 设置 - 用于实时和异步事件的变量
## 连接到RabbitMQ的用户
RABBITMQ_USER=taiga
## RabbitMQ用户的密码
RABBITMQ_PASS=taiga
## RabbitMQ容器名称
RABBITMQ_VHOST=taiga
# 由任何连接的 RabbitMQ 实例共享的唯一值
RABBITMQ_ERLANG_COOKIE=secret-erlang-cookie

# Taiga的附件 - 定义附件将被访问多长时间
## token 的有效期(以秒为单位)
ATTACHMENTS_MAX_AGE=360

# Taiga's Telemetry -启用或禁用匿名 telemetry
ENABLE_TELEMETRY=True

taiga.conf

taiga.confNginx 的配置文件,由多个块组成,定义了不同的请求处理规则,用于代理前端资源、API 请求、管理界面访问、静态文件服务和媒体文件服务,以及 WebSocket 事件通信。

该文件来自官方,未做任何修改,文件地址:https://github.com/taigaio/taiga-docker/blob/main/taiga-gateway/taiga.conf

nginx 复制代码
server {
    listen 80 default_server;

    client_max_body_size 100M;
    charset utf-8;

    # Frontend
    location / {
        proxy_pass http://taiga-front/;
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
    }

    # API
    location /api/ {
        proxy_pass http://taiga-back:8000/api/;
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
    }

    # Admin
    location /admin/ {
        proxy_pass http://taiga-back:8000/admin/;
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
    }

    # Static
    location /static/ {
        alias /taiga/static/;
    }

    # Media
    location /_protected/ {
        internal;
        alias /taiga/media/;
        add_header Content-disposition "attachment";
    }

    # Unprotected section
    location /media/exports/ {
        alias /taiga/media/exports/;
        add_header Content-disposition "attachment";
    }

    location /media/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://taiga-protected:8003/;
        proxy_redirect off;
    }

    # Events
    location /events {
        proxy_pass http://taiga-events:8888/events;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_connect_timeout 7d;
        proxy_send_timeout 7d;
        proxy_read_timeout 7d;
    }
}

docker-compose.yml

在官方的基础上,根据需要做了调整,源文件地址:https://github.com/taigaio/taiga-docker/blob/main/docker-compose.yml

yaml 复制代码
version: "3.5"

services:
  taiga-db:
    image: postgres:13
    container_name: taiga-db
    environment:
      POSTGRES_DB: "${POSTGRES_DB}"
      POSTGRES_USER: "${POSTGRES_USER}"
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 2s
      timeout: 15s
      retries: 5
      start_period: 3s
    volumes:
      - ./db:/var/lib/postgresql/data

  taiga-back:
    image: taigaio/taiga-back:latest
    container_name: taiga-back
    volumes:
      - ./static:/taiga/static
      - ./media:/taiga/media
    env_file: env.txt
    depends_on:
      taiga-db:
        condition: service_healthy
      taiga-events-rabbitmq:
        condition: service_started
      taiga-async-rabbitmq:
        condition: service_started

  taiga-async:
    image: taigaio/taiga-back:latest
    container_name: taiga-async
    volumes:
      - ./static:/taiga/static
      - ./media:/taiga/media
    entrypoint: ["/taiga-back/docker/async_entrypoint.sh"]
    env_file: env.txt
    depends_on:
      taiga-db:
        condition: service_healthy
      taiga-events-rabbitmq:
        condition: service_started
      taiga-async-rabbitmq:
        condition: service_started

  taiga-async-rabbitmq:
    image: rabbitmq:3.8-management-alpine
    container_name: taiga-async-rabbitmq
    environment:
      RABBITMQ_ERLANG_COOKIE: "${RABBITMQ_ERLANG_COOKIE}"
      RABBITMQ_DEFAULT_USER: "${RABBITMQ_USER}"
      RABBITMQ_DEFAULT_PASS: "${RABBITMQ_PASS}"
      RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST}"
    hostname: "taiga-async-rabbitmq"
    volumes:
      - ./async:/var/lib/rabbitmq

  taiga-front:
    image: taigaio/taiga-front:latest
    container_name: taiga-front
    environment:
      TAIGA_URL: "${TAIGA_SCHEME}://${TAIGA_DOMAIN}"
      TAIGA_WEBSOCKETS_URL: "${WEBSOCKETS_SCHEME}://${TAIGA_DOMAIN}"
      TAIGA_SUBPATH: "${TAIGA_SUBPATH}"
      # ...your customizations go here
    # volumes:
    #   - ./conf.json:/usr/share/nginx/html/conf.json

  taiga-events:
    image: taigaio/taiga-events:latest
    container_name: taiga-events
    environment:
      RABBITMQ_USER: "${RABBITMQ_USER}"
      RABBITMQ_PASS: "${RABBITMQ_PASS}"
      TAIGA_SECRET_KEY: "${TAIGA_SECRET_KEY}"
    depends_on:
      taiga-events-rabbitmq:
        condition: service_started

  taiga-events-rabbitmq:
    image: rabbitmq:3.8-management-alpine
    container_name: taiga-events-rabbitmq
    environment:
      RABBITMQ_ERLANG_COOKIE: "${RABBITMQ_ERLANG_COOKIE}"
      RABBITMQ_DEFAULT_USER: "${RABBITMQ_USER}"
      RABBITMQ_DEFAULT_PASS: "${RABBITMQ_PASS}"
      RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST}"
    hostname: "taiga-events-rabbitmq"
    volumes:
      - ./events:/var/lib/rabbitmq

  taiga-protected:
    image: taigaio/taiga-protected:latest
    container_name: taiga-protected
    environment:
      MAX_AGE: "${ATTACHMENTS_MAX_AGE}"
      SECRET_KEY: "${TAIGA_SECRET_KEY}"

  taiga-gateway:
    image: nginx:1.19-alpine
    container_name: taiga-gateway
    ports:
      - "9118:80"
    volumes:
      - ./taiga.conf:/etc/nginx/conf.d/default.conf
      - ./static:/taiga/static
      - ./media:/taiga/media
    depends_on:
      - taiga-front
      - taiga-back
      - taiga-events

然后执行下面的命令

bash 复制代码
# 新建文件夹 taiga 和 子目录
mkdir -p /volume1/docker/taiga/{async,db,events,media,static}

# 进入 taiga 目录
cd /volume1/docker/taiga

# 将 env.txt 和 docker-compose.yml 放入当前目录

# 一键启动
docker-compose --env-file env.txt up -d

运行

在开始访问之前,还需要创建一个管理员,需要进入到容器内操作

bash 复制代码
# 进入 taiga-back 容器
docker exec -it taiga-back /bin/bash

# 创建管理员用户
python manage.py createsuperuser

依次输入

  • Username:用户名。例如:laosu
  • Email address:邮件地址。例如:wbsu2003@gmail.com
  • Password:密码。

接下来就可以访问了,在浏览器中输入 http://群晖IP:9118

点右上角的 Login,进入到登录界面

输入我们前面创建的管理员账号,下面是登录成功后的主界面

点绿色按钮 NEW PROJECT 新建项目。模版类型包括:敏捷和看板两种

  • SCRUM

Scrum 是一个用于开发、交付和维护复杂产品的敏捷框架。尽管它最初侧重于软件开发,但它已用于研究、销售、营销和先进技术等其他领域。它专为十人或更少成员的团队而设计,这些团队将工作分解为可在时间限制内的迭代(称为冲刺)内完成的目标,迭代时间不超过一个月,最常见的是两周。

详细介绍和操作可以参考:https://community.taiga.io/t/quick-intro-to-scrum-module/124

  • KANBAN

Kanban 旨在通过平衡需求和可用容量以及改进系统级瓶颈的处理来管理工作。

详细介绍和操作可以参考::https://community.taiga.io/t/the-5-min-kanban-module-overview/122

中文

右上角用户 --> Edit Profile --> Language

下拉找到 中文(简体),保存之后就是中文界面了

参考文档

Taiga.io

地址:https://github.com/taigaio

taigaio/taiga-docker: Deployment utilities for Taiga

地址:https://github.com/taigaio/taiga-docker
Taiga: Your opensource agile project management software

地址:https://taiga.io/
Taiga Documentation

地址:https://docs.taiga.io/
Taiga

地址:https://tree.taiga.io/project/taiga/timeline

相关推荐
意疏4 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
墨鸦_Cormorant4 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker
Code_Artist4 小时前
Docker镜像加速解决方案:配置HTTP代理,让Docker学会科学上网!
docker·云原生·容器
wanmei0025 小时前
Dockerfile复制目录进入镜像里
docker
inter_peng5 小时前
[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
tcp/ip·docker·eureka
Linux运维日记6 小时前
k8s1.31版本最新版本集群使用容器镜像仓库Harbor
linux·docker·云原生·容器·kubernetes
一名路过的小码农7 小时前
ceph 18.2.4二次开发,docker镜像制作
ceph·docker·容器
xiangshangdemayi10 小时前
Windows环境GeoServer打包Docker极速入门
windows·docker·容器·geoserver·打包·数据挂载
程序员JerrySUN10 小时前
熟悉的 Docker,陌生的 Podman
linux·docker·容器·系统架构·podman
gobeyye11 小时前
Docker 用法详解
运维·docker·容器