分享一款轻量且开源的在线项目管理软件 - DooTask

背景知识简介

DooTask是一款轻量级的开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具。

这款轻量级的管理软件非常适合小团队使用,它相比较市面上常见的项目管理软件我认为最大的优点在于它没有花里胡哨的软件功能非常容易聚焦任务本身。

目前我也尝试在自己管理的团队当中小范围试用了起来,大家对它的反馈都非常积极。(PS:可能是之前使用的是禅道大家可能觉得它用起来并不是非常好用而且它的颜值确实有点不太符合年轻人的审美 哈哈。)

DooTask管理软件

DooTask安装说明

第一步 确定硬件配置

首先我们需要确保硬件环境是符合要求的。

  • 必须安装:Docker 和 Docker Compose v2.0+
  • 支持环境:Centos/Debian/Ubuntu/macOS
  • 硬件建议:2核4G以上

这里需要注意,Docker Compose是需要V2.0版本以上的,V2.0一下的版本是没办法使用的,这里大家自行百度升级一下即可。

第二步 部署项目

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1、克隆项目到您的本地或服务器

# 通过github克隆项目
git clone --depth=1 https://github.com/kuaifan/dootask.git
# 或者你也可以使用gitee
git clone --depth=1 https://gitee.com/aipaw/dootask.git

# 2、进入目录
cd dootask

# 3、一键安装项目(自定义端口安装 ./cmd install --port 2222)
./cmd install

当执行./cmd install后稍等一会就会跳出管理员账户以及密码。

第三步 配置备份脚本

个人觉得既然是公司的项目数据还是安全一些为好,所以写一个备份的脚本还是有必要的。

脚本分为两个文件,一个文件为dootask_backup.sh另一个文件为file_backups_conf.txt。也就是一个是脚本文件另一个为配置脚本的文件,这样大家只需要去修改配置文件中的备份路径就可以了不用再去脚本中找要改的地方。

file_backups_conf.txt配置

实际使用的时候将#后面的注释去除,以免出现配置文件不识别的问题。

另外需要注意的是如果在Windows下编辑的配置文件每行结尾会变是<换行><回车>也就是\n\r,这会导致脚本识别错误,所以Windows用户编辑完还需要执行清除\r的命令,如果是在Linux下创建的文件就不需要执行修改命令。

1
2
3
# 执行去除\r回车符
cat file_backups_conf.txt | tr '\n' ' '
# 注意tr最后那个参数是空格,否则会报错
1
2
3
4
5
6
backupmysql=/root/dootask/docker/mysql/backup       #备份的数据库生成路径
savebackupmysql=/backup #备份数据的存储路径
backupFilePath=/root/dootask/public/uploads #软件所产生的数据文件路径
saveBackupFilePath=/backup #备份数据的存储路径
fileName=upload_dootask #备份数据打包的文件夹名称
backupsFileDay=4 #备份天数,超出自动删除旧文件

dootask_backup.sh配置

大家需要注意的是这里演示的脚本中默认放在root文件夹中的,如果大家并不是放在这个文件夹中需要修改一下第4行的cd路径,这个cd是给crontab这个调皮程序用的,它每次执行就是在它那个目录下,这会导致很多软件中没有软连接的命令无法使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash

# 大家如果软件存放路径和教程不一致需要手动进行修改该路径
cd /root/dootask

#file_backups_conf.txt文件路径
file_backups_conf="/root/dootask/file_backups_conf.txt"

#判断文件是否存在
if [ -f "${file_backups_conf}" ];then
echo $(date +'%Y-%m-%d %H:%M:%S')" 要备份的文件存在,开始进行文件备份"

#获取等号前内容,作为map中的Key值
dbArrOne=($(awk -F'[=]' '{print $1}' ${file_backups_conf} ))

#获取等号后内容,作为map中的value值
dbArrTwo=($(awk -F'[=]' '{print $2}' ${file_backups_conf}))

#创建一个空map
declare -A map=()

#通过循环,将file_backups_conf配置文件中的信息存储在map中
for((i=0;i<${#dbArrOne[@]};i++))
do
map[${dbArrOne[i]}]=${dbArrTwo[i]}
done

#获取当前年月日
saveday=$(date +%Y%m%d)

#获取超出备份天数的年月日
delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d)

# 进行对数据库的备份操作 #

./cmd mysql backup

#备份文件
echo $(date +'%Y-%m-%d %H:%M:%S')" 备份文件:"${map["backupmysql"]}
echo $(date +'%Y-%m-%d %H:%M:%S')" 备份目标:"${map["savebackupmysql"]}

#判断保存备份文件路径是否存在
if [ -f "|${map['savebackupmysql']}/${saveday}/${map['fileName']}_$(date +'%Y%m%d%H%M%S')" ];then
cp -f -r ${map["backupmysql"]} ${map["savebackupmysql"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/
else
mkdir -p ${map["savebackupmysql"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')
cp -f -r ${map["backupmysql"]} ${map["savebackupmysql"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/
fi

#删除保存文件路径中n天前备份的数据文件
echo $(date +'%Y-%m-%d %H:%M:%S')" 删除备份文件:"${map["savebackupmysql"]}/${delday}
rm -f -r ${map["savebackupmysql"]}/${delday}
rm -f -r ${map["backupmysql"]}

echo $(date +'%Y-%m-%d %H:%M:%S')" 文件备份完毕,脚本执行完毕"

# 进行资源文件夹备份操作 #

#备份文件
echo $(date +'%Y-%m-%d %H:%M:%S')" 备份文件:"${map["backupFilePath"]}
echo $(date +'%Y-%m-%d %H:%M:%S')" 备份目标:"${map["saveBackupFilePath"]}

#判断保存备份文件路径是否存在
if [ -f "|${map['saveBackupFilePath']}/${saveday}/${map['fileName']}_$(date +'%Y%m%d%H%M%S')" ];then
cp -f -r ${map["backupFilePath"]} ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/
else
mkdir -p ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')
cp -f -r ${map["backupFilePath"]} ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/
fi

#删除保存文件路径中n天前备份的数据文件
echo $(date +'%Y-%m-%d %H:%M:%S')" 删除备份文件:"${map["saveBackupFilePath"]}/${delday}
rm -f -r ${map["saveBackupFilePath"]}/${delday}

echo $(date +'%Y-%m-%d %H:%M:%S')" 文件备份完毕,脚本执行完毕"

else
echo "配置文件不存在"
fi

echo "脚本执行结束"

第四步 将脚本添加到crontab软件中

执行crontab -e显示和编辑crontab文件,在这里头我们添加一下命令。该任务每次执行的时候会自动打印日志到dootask.log该文件中。

1
00 3 * * * /root/dootask/dootask_backup.sh >> /backup/log_docker/dootask.log

对于crontab的定时任务配置简单举几个例子:

30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令
*/15 * * * * ls 每15分钟执行一次ls命令
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令

第五步 验证脚本是否正常执行

我这里设置的是凌晨3点触发脚本执行,大家实际调试的时候自己根据crontab命令调整一下时间来加快验证定时任务是否起作用。

不会这里细心的你肯定会发现定时触发的脚本在备份数据库时候总是不对,备份出来的数据库文件只有1Kb左右,但是手动触发.sh脚本没有这个问题。

其实这个原因是DooTask的作者在他的cmd脚本文件夹中对Docker的命令都带上了-it交互模式参数,这个命令是没办法后台静默运行的,这会导致crontab不能按照我们预期进行执行。

在这里我们需要肯定一点的是,去除 -it交互模式参数其实并不会影响到DooTask的运行,我们可以放心大胆的修改。

打开DooTask文件夹中的cmd文件,找到docker exec -it "$name" /bin/sh -c "$cmd"将其修改为docker exec "$name" /bin/sh -c "$cmd"即可。

修改cmd文件

再次让crontab按计划触发脚本,此时我们就会注意到数据库文件已经和手动备份出来的文件大小一致了,到此整个Dootask软件安装结束。

参考文章

如果对您有帮助,请小编喝一杯咖啡吧!