如果将Metabase与OpenProject整合,可能会创建出最强大的仪表盘
为什么写了?
-
- 趣味で調べたことを職場で参照したい
-
- もしかすると参考になる人がいるかもしれない
- OpenProject と Metabase の可能性に震えたから
准备OpenProject
OpenProject是一个基于Web的项目管理系统,用于非地理限制的团队协作。
首先,根据官方说明,OpenProject的安装方法有以下三种:
由于使用docker(-compose)较为方便,因此我打算尝试使用这种方式进行安装。
-
- DEB/RPM packages
既存のマシンなどへ直接インストール(推奨)
docker
docker-compose で起動
Installation with Univention Corporate Server
VMイメージを入手
安装 OpenProject | OpenProject 帮助和文档
https://docs.openproject.org/installation-and-operations/installation/
官方明确提到了两种使用 Docker 进行安装的方法。
我将尝试使用推荐的第一种方法。
-
- One container per process
WebやDBなどの機能ごとにコンテナを分けます(推奨)
All-in-one container
1つのコンテナで全ての機能を賄います
使用Docker安装OpenProject | OpenProject帮助与文档
https://docs.openproject.org/installation-and-operations/installation/docker/
首先,在本地进行试运行只需按照上述页面,并执行以下命令即可启动(非常简单!)。但由于想要与 Metabase 结合使用,所以在启动之前需要编辑 docker-compose.yml 文件。
# docker-compose.yml などを取得する
git clone --depth=1 --branch=stable/10 https://github.com/opf/openproject
# docker-compose.yml のあるディレクトリへ移動する
cd openproject
# デタッチモードで起動
docker-compose up -d
当阅读docker-compose.yml文件时,可以看出其主要元素如下所示。
现在,我们尝试添加Metabase到此处。
![deployment1.png](https://cdn.silicloud.com/blog-img/blog/img/657d1dc137434c4406c14379/13-0.png)
Metabase的准备工作
元数据库是一种简单且开放源码的方式,可以让公司内的任何人提问并从数据中学习。
通过编辑docker-compose.yml文件,添加Metabase,使其具有以下配置。
![deployment2.png](https://cdn.silicloud.com/blog-img/blog/img/657d1dc137434c4406c14379/17-0.png)
然后生成的docker-compose.yml文件如下。
使用docker-compose up -d命令启动,OpenProject将在http://localhost:8080/上运行,而Metabase将在http://localhost:3000/上运行。可能需要等待一段时间才能完成Metabase的启动。
version: "3.7"
networks:
frontend:
backend:
metabase-backend:
volumes:
pgdata:
opdata:
metabase-pgdata:
x-op-restart-policy: &restart_policy
restart: unless-stopped
x-op-image: &image
image: openproject/community:${TAG:-10}
x-op-app: &app
<<: *image
<<: *restart_policy
environment:
- "RAILS_CACHE_STORE=memcache"
- "OPENPROJECT_CACHE__MEMCACHE__SERVER=cache:11211"
- "OPENPROJECT_RAILS__RELATIVE__URL__ROOT=${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}"
- "DATABASE_URL=postgres://postgres:p4ssw0rd@db/openproject"
- "USE_PUMA=true"
# set to true to enable the email receiving feature. See ./docker/cron for more options
- "IMAP_ENABLED=false"
volumes:
- "opdata:/var/openproject/assets"
depends_on:
- db
- cache
x-mb-app: &mb-app
image: metabase/metabase
<<: *restart_policy
environment:
- "MB_DB_TYPE=postgres"
- "MB_DB_DBNAME=metabase"
- "MB_DB_PORT=5432"
- "MB_DB_USER=postgres"
- "MB_DB_PASS=p4ssw0rd"
- "MB_DB_HOST=metabase-db"
depends_on:
- db
- metabase-db
services:
db:
image: postgres:10
<<: *restart_policy
stop_grace_period: "3s"
volumes:
- "pgdata:/var/lib/postgresql/data"
environment:
- POSTGRES_PASSWORD=p4ssw0rd
- POSTGRES_DB=openproject
networks:
- backend
cache:
image: memcached
<<: *restart_policy
networks:
- backend
proxy:
<<: *image
<<: *restart_policy
command: "./docker/proxy"
ports:
- "8080:80"
environment:
- APP_HOST=web
- "OPENPROJECT_RAILS__RELATIVE__URL__ROOT=${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}"
depends_on:
- web
networks:
- frontend
web:
<<: *app
command: "./docker/web"
networks:
- frontend
- backend
worker:
<<: *app
command: "./docker/worker"
networks:
- backend
cron:
<<: *app
command: "./docker/cron"
networks:
- backend
seeder:
<<: *app
command: "./docker/seeder"
restart: on-failure
networks:
- backend
metabase-app:
<<: *mb-app
ports:
- "3000:3000"
networks:
- backend
- metabase-backend
metabase-db:
image: postgres:10
<<: *restart_policy
stop_grace_period: "3s"
volumes:
- "metabase-pgdata:/var/lib/postgresql/data"
environment:
- POSTGRES_PASSWORD=p4ssw0rd
- POSTGRES_DB=metabase
networks:
- metabase-backend
当Metabase启动后,在初始设置时应该注册OpenProject的数据库。
“名称”可以任意命名,而”数据库用户名”和”端口”采用postgres的默认设置,但其他项从docker-compose.yml文件的db服务配置中读取并填写。(请注意,此处仅提供一种翻译选项,因为翻译结果可能存在多种表达方式,不过根据上下文,本翻译应相对贴切。)
![Screenshot_2020-04-26 Metabase.png](https://cdn.silicloud.com/blog-img/blog/img/657d1dc137434c4406c14379/21-0.png)
解析 OpenProject 的数据库架构
由于尚未完全理解,因此将随时更新。
OpenProject存储工作包(相当于Redmine中的票据概念)的表,在Metabase中以Work Packages这个名称显示(如果是以原始SQL进行引用,则称为work_packages)。这个表有许多列,但我们将关注下面列的内容。
-
- Story Points
相対見積もり
Derived Estimated Hours
配下のタスクの見積もりの合計(時間単位)
首先,我制作了一个散点图,用于观察在为产品待办事项分配相对估算后,当我们开始执行任务并对其进行拆分后的时间估算是否相关(由于数据较少,所以不太美观)。
![Screenshot_2020-04-26 Test · ダッシュボード · Metabase.png](https://cdn.silicloud.com/blog-img/blog/img/657d1dc137434c4406c14379/27-0.png)
我希望能使用以99%的概率按时交付项目的思路来显示项目的成功率。启用OpenProject的时间追踪功能后,可以输入任务执行所需的时间,但它不会直接反映在Work Packages表中,因此需要灵活提取。