独立Blog+Mastodon个人笔记

基本思路

基本流程参照现成的教程就可以了,各种服务尽量选用粘性小的。越是要求大量个人信息、越是用大量脚本跟踪行为分析的就越粘。
大量参考 IndieWeb社会 的选型

服务选型

邮箱

域名提供商

  • Namecheap
  • Freenom 在这里可以找到免费使用1年的域名,还没实际试过,可以尝试

Blog

Hexo

生态足够好,静态站点能部署在很多地方

  • 托管
    • Github。 可以用 hexo-deploy-sftp 先从这里开始,积累足够经验之后可以参考其他方案。
    • 自己建站的 VPS。可以用 hexo-deploy-sftp 等插件来发布
    • IPFS。可以用hexo-deploy-ipfs 插件来发布
    • Arweave。用 hexo g 生成 public 目录, 用 arweave-deploy 来发布。需要一定的 AR 。参考 Arweave 储存网站

WordPress

动态 Blog 方案中这个应该是最流行的了,生态也是非常强大,有服务端可以很简单地做资源的动态权限控制。 由于有后端,在探索 Web3 方面会有对客户来说是黑盒的部分,需要信任网络支持。

不过,独立个站 + Web 基建 本来就符合去中心化的宗旨, 信任线上身份和信任 Blog 是相辅相成的。 Web3 部分起到 Web2 中经济的那一部分也能发挥巨大作用, 简单理解就是让创作者得到回报、生态成长的机制。

Bot

Huginn

目前在用的方案。理论上不需要会编程,但是要自定义场景还是需要熟悉各种基本概念。不过编写好之后可以分享,这种情况下直接用别人写好的场景配置替换关键的KEY就可以了。

试用阶段这样就可以了。用久了数据不好管理就是

1
docker run -it -p 3000:3000 huginn/huginn

有个数据卷至少可以备份了

1
docker run -it -p 3000:3000 -v /home/huginn/mysql-data:/var/lib/mysql huginn/huginn

分拆两个容器管理起来会正规不少

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run --rm --name huginn_mysql \
-e MYSQL_DATABASE=huginn \
-e MYSQL_USER=huginn \
-e MYSQL_PASSWORD=somethingsecret \
-e MYSQL_ROOT_PASSWORD=somethingevenmoresecret \
mysql
docker run --rm --name huginn \
--link huginn_mysql:mysql \
-p 3000:3000 \
-e HUGINN_DATABASE_NAME=huginn \
-e HUGINN_DATABASE_USERNAME=huginn \
-e HUGINN_DATABASE_PASSWORD=somethingsecret \
huginn/huginn

订阅博客发送嘟文并发送 webmention 的配置如下

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
{
"schema_version": 1,
"name": "blog2toot+webmention",
"description": "No description provided",
"source_url": false,
"guid": "daf1ad9a561dfff6d09e15d610e081b2",
"tag_fg_color": "#ffffff",
"tag_bg_color": "#5bc0de",
"icon": "gear",
"exported_at": "2021-03-09T06:53:33Z",
"agents": [
{
"type": "Agents::JsonParseAgent",
"name": "parse-mastodon-status-response",
"disabled": false,
"guid": "51b17c5aa5cf78e22edbe8d2d40776be",
"options": {
"data": "{{ body }}",
"data_key": "mastodonResponse",
"mode": "merge"
},
"keep_events_for": 0,
"propagate_immediately": false
},
{
"type": "Agents::DataOutputAgent",
"name": "generate-blog-mastodon-link-rss",
"disabled": false,
"guid": "6dce7c9785814969d3a727c753a4ae18",
"options": {
"secrets": [
"link-mapping"
],
"expected_receive_period_in_days": 2,
"template": {
"title": "blog-mastodon-links",
"description": "links",
"item": {
"title": "{{mastodonResponse.id}}",
"description": "{{mastodonResponse.content}}",
"link": "{{url}}"
}
},
"ns_media": "true"
},
"propagate_immediately": false
},
{
"type": "Agents::PostAgent",
"name": "send-mastodon-webmention-to-blog",
"disabled": false,
"guid": "81a44c52bc5ead38491a061acd35295d",
"options": {
"post_url": "https://telegraph.p3k.io/webmention",
"expected_receive_period_in_days": "1",
"content_type": "form",
"method": "post",
"payload": {
"source": "https://YOUR_MASTODON_DOMAIN/interact/{{mastodonResponse.id}}?type=reply",
"target": "{{url}}",
"token": "YOUR_TELEGRAPH_TOKEN"
},
"headers": {
},
"emit_events": "true",
"no_merge": "false",
"output_mode": "merge"
},
"schedule": "never",
"keep_events_for": 0,
"propagate_immediately": true
},
{
"type": "Agents::PostAgent",
"name": "post-blog-link-to-mastodon",
"disabled": false,
"guid": "8600d78626699e2e893aae0e5d92f3f5",
"options": {
"post_url": "https://YOUR_MASTODON_DOMAIN/api/v1/statuses",
"expected_receive_period_in_days": "1",
"content_type": "json",
"method": "post",
"payload": {
"status": "我发表了博客文章: {{title}} {{url}}",
"visibility": "public"
},
"headers": {
"Authorization": "Bearer YOUR_MASTODON_TOKEN"
},
"emit_events": "true",
"no_merge": "false",
"output_mode": "merge"
},
"schedule": "never",
"keep_events_for": 0,
"propagate_immediately": false
},
{
"type": "Agents::RssAgent",
"name": "fetch-blog-rss-feed",
"disabled": false,
"guid": "d6a2c7990ff91071302cb204a0df2b98",
"options": {
"expected_update_period_in_days": "5",
"clean": "false",
"url": "YOUR_BLOG_FEED_URL"
},
"schedule": "every_10m",
"keep_events_for": 0
}
],
"links": [
{
"source": 0,
"receiver": 1
},
{
"source": 0,
"receiver": 2
},
{
"source": 3,
"receiver": 0
},
{
"source": 4,
"receiver": 3
}
],
"control_links": [

]
}

需要替换几个配置参数

  • YOUR_BLOG_FEED_URL 替换成 Blog RSS Feed 链接
  • YOUR_MASTODON_DOMAIN 替换成 Mastodon 账号所在 Instance 的域名 比如 mstdn.jp
  • YOUR_MASTODON_TOKEN 替换成 Mastodon 首选项>开发>你的应用 下创建的应用的 token 。 请千万保密,不要分享出去了
  • YOUR_TELEGRAPH_TOKEN 这里用了发送 Webmention 的服务 https://telegraph.p3k.io/ 搭建好Blog之后用 Blog 的 url 就可以注册。注册成功之后就能得到一个 token
本地环境

不需要对外提供服务,所以在本地跑也是可以的,上 docker

Heroku

提供了一键部署,但是有很多影响使用的限制,见Huginn官方文档的 Deploy to Heroku
主要问题点在:

  • 1天的总运行时间不能超过18小时,所以要定时休眠
  • 需要定期 ping 一下,否则就偷懒了
  • 数据库上限10000,所以不能保留太多日志
  • 512MB 还是太勉强,超额使用可能会停止工作

虽然勉强可用,但是吧…… 比起处理这些细节学会用 docker 灵活多了啊,个人用的也没有对负载均衡之类有要求,稳定提供服务的意义见仁见智

VPS

一月5美元左右的 VPS 能干不少,用 docker 跑能省心很多。装上 portainer ,做成模板之后还能分享

路由器/盒子/ NAS

比如 N1,刷 OpenWrt 或者小钢炮固件, 同样可以用 portainer 降低使用门槛
群晖之类的本身体验就足够好,干这类事绰绰有余

TG Bot

//TODO

参考资料

作者

WhyYouAre

发布于

2021-02-03

更新于

2021-03-09

许可协议

评论