# 使用 Habitica 养成好习惯

## 概述

Habitica 是一款角色扮演游戏（RPG），玩家可以收集金币、物品、装备、宠物等，并通过升级提升实力，升级所需的经验来自完成现实生活中的目标（习惯、日常任务和待办事项）。

习惯可以设置为“积极的”、“消极的”或两者兼有：

- 完成积极的习惯，比如“1 小时高效工作”，就可以获得经验值和金币
- 完成消极的习惯，比如“吃垃圾食品”，生命值就会下降

> [!question]  为什么要用 Habitica 来养成习惯？
> - 生活中的目标（习惯、日常任务和待办事项）通常会有很多，平时大家都比较忙碌，会容易忘记，定期看 Habitica 可以提醒我们去完成这些目标。
> - 完成 Habitica 上设定的目标以后，会有正向的回馈（经验值和金币），可以提供足够的情绪价值，这样我们更容易坚持下去。

## 好习惯

什么样的习惯是一个好的习惯呢？不妨来思考：

- 每天去采购新鲜的食材是否是一个好的习惯
- 晚上自己做饭是否是一个好的习惯
- 尽可能让自己吃上新鲜的饭菜是否是一个好的习惯
- 饭后洗碗是否是一个好的习惯
- 饭后抽空出去跑步是否是一个好的习惯

毫无疑问，这些都可以被称之为好习惯，但是当它们合到一起呢？

就本人而言：

- 大概平常晚上 5 点钟可以下班，到家一般 6 点左右，如果有加班或者路上堵车可能还不止，而当我买菜、做饭、吃饭、洗碗之后，通常已经接近晚上 9 点了。
- 不管是做菜还是做饭，都会有一个**最少的量**，比这个最少的量更少时，既不方便买菜，也不方便下锅，而一个人吃这个最少的量时，通常要吃上好几顿。为了保证食材的新鲜，本人一般在三顿内就要吃完。
- 本人一直以来身材的塑造都是通过晚上跑步，跑了就会保持好的身材，没跑就会发胖。

那么，结果就很明显了，虽然这样看着非常上进，但是每天会没有任何的**空闲时间**，并且因为要按时吃完食物，每一天的**热量**都是超标的，晚上的跑步只不过是消耗了这一部分多出的热量，对于瘦身而言也**没有半点作用**。

所以绕了一圈这些都成了无用功，并且因为透支了每天的精力和时间，没有时间的我失去了个人成长的机会，仅剩的时间变会沉迷于“奶头乐”。

但是，人是不可以没有空闲时间的。如果一个人的收入只能够刚好维系日常生活，那么这个人便不会有积蓄；如果一个人的空闲时间只能够刚好维系日常生活，那么这个人便不会有任何的成长。

有人有过类似的观点，引用如下：

> [!quote]  引用
> 全世界的资本家都有一个心照不宣的共识，那就是要用一切的手段避免普通人完成原始资本的积累。因为一旦所有人都拥有了被动收入，那便没有人愿意去努力工作，创造价值了。
> 
> 什么叫原始资本的积累？就是这个资本我们积累好了以后，也就不用再参与任何的社会劳动了，不需要再靠出卖时间和体力来获取报酬，只需要靠资本本身产生的收益就可以完全的养活自己，这就叫完成原始资本的积累。
> 
> 一个年轻人如果有个三年、五年属于自己的时间，学习培养自己的爱好，用心挖掘自己的优势和潜力，专心学习研究自己喜欢的、有价值、有意义、有更大回报的事情，找到一个真正属于自己的、能发挥自己价值的道场，那你未来的可能性是极大的。为什么？因为三年、五年之后，他的劳动效率会得到大幅的提升。一天的时间创造出来的价值相当于之前10天、30天甚至一年的价值，达到这样的专业程度，你才有完成原始资本加累的可能。

读上面这段文字，并非所有的人都会有感触，也会有人嗤之以鼻，但是这些文字却真实的诉说了我过去的经历。

- 在人生的大事上，大的消费上，本人向来都是比较保守的，会去学习时政财经知识，会去分析租售比，质疑高昂的房价，这也使得我手头上有比同龄人更多的现金，能够去投资纳斯达克。
- 工作上一直也比较轻松，让我能够有时间持续学习、提升自己，刚毕业那会儿其实也算编程小白，会的其实并不多，但是这么多年下来也是逐渐有了自己的方向。写程序这个行为，终究成了能够提高效率、弯道超车的利器。

蛮好的，正是因为有了上面的这些真正的好习惯，本人才能够坐在电脑前写下这篇博客，要不然我连博客都不会搭建，说不定早就在日复一日的重复工作中变得麻木了。有句话就说的很好，“仓岭实而知礼节，衣食足而知荣辱。”，所有的堕落归根结底可能都是“不曾拥有过”。

## 本地部署

很巧的是 Habitica 也可以本地部署，因为数据是非结构化的，所以用的数据库是 MongoDB。

不过因为原本就是设计给多人共同使用的，所以这里的 MongoDB 要以集群的模式建立。

### 部署 MongoDB 集群

因为本人 NAS 的 CPU 不支持某个特性，只能使用 5.0 以下版本的 MongoDB，此时 5.0 以下的最新版本是 4.4.29，因而以这个版本为例。

```dockerfile
docker run -itd --name MongoDB --restart=always \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=xxx \
-e MONGO_INITDB_ROOT_PASSWORD=xxx \
-v /xxx/MongoDB/config:/data/configdb \
-v /xxx/MongoDB/data:/data/db \
-v /xxx/MongoDB/log:/data/log \
mongo:4.4.29 \
--replSet rs \
--bind_ip_all \
--keyFile /data/configdb/mongo.key \
--auth
```

要准备一个`mongo.key`文件，方法如下：

```shell
sudo openssl rand -base64 756 > mongo.key
sudo chmod 400 mongo.key
```

建好容器以后，需要初始化集群，方法如下：

```shell
mongo -u xxx -p xxx --authenticationDatabase admin
rs.initiate({
 _id: "rs", 
 members: [{ 
	 _id: 0, 
	 host: "HOST:PORT" 
	 }] 
 })
```

需要注意的是，这里的 `host` 和 `port` 需要是容器外访问的地址，不能是容器内的`localhost`

### 部署 Habitica

Habitica 是没有官方的 Docker 镜像的，使用 Docker 部署时，需要将官方的[项目](https://github.com/HabitRPG/habitica)下载到本地进行部署，不过因为有[第三方](https://github.com/awinterstein/habitica)帮我们打包好了，所以可以直接用[第三方的镜像](https://hub.docker.com/r/awinterstein/habitica-server)。

这个人还有一个名为 Habitica Client 的项目，官方的 Docker Compose 里头也是同时有 Server 和 Client，不过本人试下来只部署一个 Server 就可以正常使用了，因而就不需要部署 Client 了。

```dockerfile
docker run -itd --name Habitica --restart always \
-e NODE_DB_URI="mongodb://USERNAME:PASSWORD@HOST:PORT/Habitica?replicaSet=rs&directConnection=false&authSource=admin" \
-e BASE_URL=http://HOST:PORT \
-e INVITE_ONLY=false \
-e EMAIL_SERVER_URL=mail.example.com \
-e EMAIL_SERVER_PORT=587 \
-e EMAIL_SERVER_AUTH_USER=MAIL_USER \
-e EMAIL_SERVER_AUTH_PASSWORD=MAIL_PASSWORD \
-p PORT:3000 \
awinterstein/habitica-server:latest
```

这里和`EMAIL_SERVER`相关的内容是用来发邮件的，不过本人目前用下来未发现需要发邮件的场景，不清楚有何具体作用。国内邮箱一般都有 SMTP 功能，申请一个填入即可。

## 使用

部署好之后很轻松就能注册一个账号：

![](https://img.papergate.top:5000/i/2025/11/69189a5c6a2b9.webp)

第一个注册用户自动获得管理员权限。

登录以后进入主界面，可以添加的有习惯、日常任务、待办事项和奖励：

- 习惯可以设置为正向或反向，适用于你想要每天多次完成、或者不设时间安排的任务。完成正向的习惯会带来奖励，比如金币和经验值（Exp），而反向的习惯则会扣除你的生命值（HP）。
- 日常任务适用于重复性的、有相对固定的时间安排的任务。比如每天一次、每周三次，或每月四次。未完成的日常任务会扣除生命值，但设置的难度越高，获得的奖励也越丰厚！
- 待办事项是一次性任务，完成后可获得奖励。待办事项可以设置截止日期，但错过截止日期不会损失生命值。

![](https://img.papergate.top:5000/i/2025/11/69189b24283de.webp)

比如，可以添加一个如下的习惯：

![](https://img.papergate.top:5000/i/2025/11/69189c42749c7.webp)

这样，我们在写完一篇博客以后就可以得到金币和经验值了，正如本人此时此刻这般。

除此以外，我们可以去做一些真正有意义的事情：

![](https://img.papergate.top:5000/i/2025/11/69189de77222a.webp)

指引自己做一些家务：

![](https://img.papergate.top:5000/i/2025/11/69189e7fb88f4.webp)

甚至多喝水也是可以的：

![](https://img.papergate.top:5000/i/2025/11/69189f01ac748.webp)

真棒，今天我也喝了足够的水呢。

---

> 作者: Aphros  
> URL: https://blog.papergate.top/posts/%E4%BD%BF%E7%94%A8-habitica-%E5%85%BB%E6%88%90%E5%A5%BD%E4%B9%A0%E6%83%AF/  

