个人运动记录网站搭建历程

最近闲逛github时看到一个有趣的项目,running_page,可以自动搭建个人运动记录的网站。大概看了下,过程还是很容易的,就是支持的app不多。自己运动的记录还是很多的,一直也想有记录的想法,正好趁着过年比较空,就搭建一下。 对比了下runing_page支持的几个app,最终选择了keep。昨天逛复兴岛的时候尝试了下keep的行走模式,用起来还是很舒服的,最终生成了一个5公里的行走记录。 搭建的过程主要就是按照README进行的,官方的建议是使用公共的静态站点服务搭建。咱自己有nas也不想让别人保存自己的隐私数据,所有最终目的就是把这个项目部署到自己的nas上。 开始是打算部署在nas上的docker中的,找了一个alpine镜像,启动后按照README开始安装python,以及yarn,但是最终在安装nodejs相关依赖时失败了。没办法,又找了个nodejs的镜像,哪知道又在安装python的依赖时失败了,也是没谁了。 没法子,现在自己的mac上试试了。mac上倒是没啥问题,顺利的yarn带来,访问到了本地页面。但是仔细一看,这还是人家自己的样例页面。又根据教程,清除了本地的运动记录。然后开始下载keep的运动记录。一下载就发现问题了,我明明昨天有5公里的行走记录,怎么显示没有相关记录呢? 后面又看了看项目介绍,人家记录的是跑步记录,咱这是行走记录,当然是下载不下来了。看看了代码中的接口,也是大方的写着runing。去官方翻了翻,发现人家没有公开的api接口,这个接口估计也是抓包弄出来的。 开启proxyman,抓了下keep的包。倒是很容易,行走记录的关键词是hiking。替换了代码中的runing,重新执行,昨天的记录被完美拉拉下来。重新打包编译,终于页面上显示了我自己的运动记录。 个人运动记录网站 本地的运行是解决了,下面要考虑的就是nas上怎么跑了。docker上不能动,就只能考虑虚拟机了。还好咱有现成的。unbuntu上安装python及其以来倒是很容易的。但是nodejs就有点麻烦。running_page这个工程支持的nodejs版本是12-16之间,通过apt安装的node版本要么太新,要么太老。其他方式又太麻烦。 还好有nvm这个利器,ubuntu上安装一个命令行就可以解决。管理各个版本的node也是非常容易。弄完它之后,running_page算是顺利的在虚拟机上跑起来了。 配上nginx,加上cloudflare上dns解析,我的个人运动记录网站算是完美搭建起来了。欢迎大家来参观 Jiang Bo Hiking Page

2022-02-02 22:52 · 1 min · 江波·林沂

群晖+ipv6+cloudflare实现外部访问

前提🎈🎈🎈🎈🎈🎈:拥有自己的域名。 域名如果没有的话,可以找供应商买一个,一般的小众域名10年也就100来块。国内腾讯云和阿里云都提供的。 家里的nas之前折腾了好久的ipv6,终于实现了ipv6的对外访问。美中不足的是现在好多地方的wifi仍旧是不支持ipv6的。虽然可以通过中国移动的热点解决。但终究还是不够完美。 今天突然想起来,cloudflare是支持免费cdn的。登上自己好久不用的cloudflare账户,看了下果然是可以的。剩下的就是根据提示一步步添加自己的网站。要注意的一点是cloudflare同步原来的域名供应商的解析时可能会漏掉一部分解析。这个需要自己小心检查下,可以手工再补上。其他的就按照cloudflare的提示操作即可。 在cloudflare上添加好自己的网站,并确定把自己的域名解析服务器切换到cloudflare的域名服务器上(这个解析是要在原来域名解析的供应商出修改,比如我的域名是在腾讯云上购买的,那么就需要在腾讯云上进行调整)。如果你调整好了,那么剩下就要等待了。cloudflare发现你的解析已经生效之后,在页面上时可以看到你的域名已经被cloudflare托管了。 后续你的域名解析就都可以在cloudflare上配置了。注意配置的时候要选择被cloudflare代理,这样网络流量就先走cloudflare,然后才是你的服务器。这样配置完之后,你的dns解析地址就可以只配置AAAA记录(也就是ipv6解析)。因为访问你网站的不再是真实客户,而是cloudflare。cloudflare就是v4/v6通吃了。 以下为特殊注意的地方 一个是如果你的网站是http,而你在cloudflare上勾选了强制https的话。那么你的网站可能会有一定几率报错。因为网站上的某些连接并不支持强制https。我这里的wordpress就遇到了这种情况。解决方案就是上插件。worepress插件really-simple-ssl非常好用,安装完之后,网站就再也没有遇到这个错误了。 第二个就是cloudflare上的DNS解析的DDNS问题了。一般家庭宽带是没有固定的ip的。即使ipv6运营商也没有给固定的。这个时候就需要DDNS解决这个问题了。这个大家可以参考 cloudflare-ddns, 非常好用,配置也简单。docker和linux-cron用起来都是很简单的。

2022-01-27 17:52 · 1 min · 江波·林沂

自定义推送消息至自己的apple设备

今天逛v2ex时,看到了一个之前自己有想法但是一直没动手的应用。bark,可以让用户在没有自己的app的前提下,推送消息到个人的apple设备。 使用起来也很简单,下载bark应用,打开就可以看到各种推送接口。而且还可以测试。点击测试之后,一个简单的http get请求即打开在safari中,立刻手机也收到了通知。使用起来非常便捷。 看了看作者的github,发现作者还兼顾了隐私要求,可以让用户自己定义服务端,无需通过作者自己的服务器。按照作者的说明在自己的nas立刻搭建起来,全程花了不到10分钟。然后在app上设置了下自己的服务器地址,curl测试下,非常完美。推送即刻到达。后续研究下怎么把notion上的通知推送到自己的手机上。个人的bark服务器:bark. 欢迎大家使用,仅支持ipv6🤔.(现已支持ipv4,2022.02.05)

2022-01-26 16:11 · 1 min · 江波·林沂

上传本机SSD硬盘使用量情况至notion

M1的Mac有个让人比较关注的点,就是它的ssd硬盘的写入量相比于以前有个很大的提高。写入量的提高可能会导致磁盘提前报废,之前也在网络上引起了很大的讨论。 我这台Mac买来的时候,因为是官翻机的缘故。当时已经有3个T的写入量了。开始的时候我几乎天天观察,每天坚持写入量。但是一连十几天都没什么大的变化。后面也就没怎么看了。最近再看,发现写入量已经达到16.5T了,这个变化有个大,毕竟也就买回来不到4个月。 为了能够不再被蒙在鼓里,我决定写个脚本,每天上传SSD硬盘的信息到notion中,这样就不会稀里糊涂的看到硬盘写入量飙升,详细代码如下: package main import ( "bytes" "fmt" "io/ioutil" "log" "net/http" "os/exec" "strings" "time" ) func main() { fmt.Println("Hello World") out, err := RunCommand("/opt/homebrew/Cellar/smartmontools/7.2/bin/smartctl", "-a", "/dev/disk0") if err != nil { fmt.Println(err) } fmt.Println(out) out = strings.ReplaceAll(out, "\x00", "") outs := strings.Split(out, "\n") var written string var read string for _, str := range outs { if strings.HasPrefix(str, "Data Units Written") { fmt.Println(str) writtens := strings.Split(str, "[") fmt.Println(writtens[1]) written = strings....

2022-01-25 23:00 · 2 min · 江波·林沂

Ipv6腾讯云DDNS配置

自从家里的设备全部支持ipv6后(如何支持见上文), 怎么说呢,就一发不可收拾了。总想着尽可能的利用起来ipv6。想起来自己还有个域名,就尝试着试试看能不能让自己的域名仅支持ipv6。 试了之后发现还是挺简单的,虽然不能直接在域名解析上添加A记录,但是腾讯云还是很友好的发现的想添加的是一个ipv6的地址,于是就指引我去添加AAAA的记录过去了。添加完之后,就等着解析了。很快家里的网络就可以正常解析我只添加了AAAA记录的新地址blog.jiangbo.space。我的博客流程的打开了。 这里有一点比较坑的是,如果你使用了代理工具,特别是clash,这个是亲测可能会有影响的。我目前使用机场的配置文件中默认是不支持ipv6的,导致我走了很多弯路。如果使用这种不支持ipv6的配置,又使用了clash的代理,那么很不幸,即使你本地网络支持ipv6你也不能正常访问仅提供ipv6支持的网站。clash的配置要支持ipv6倒是也简单,添加ipv6:true即可。还望广大机场能尽快跟进,默认配置中就加上这句话。 域名解析添加以后,开始几天倒是还是正常使用的。我一致以为ipv6那么多,运营商现在肯定是给每个用户一个固定的ipv6地址。后来才发现我多想了,现在依旧是动态的,而且是动态的前缀,这就导致我配置一次AAAA记录是不行的。等到路由器断线重连之后,家里网络的ipv6地址就换了个边。这种情况就需要DDNS登场了。 我用的腾讯云解析的dns,这个可能比较小众,反正是没有找到现成的代码。这个时候就发现程序员的主观能动性了,自己主动撸一个了。写起来倒是比较简单,腾讯云还可以主动生成大部分代码,剩下的就是拼拼凑凑了。放在ubuntun上跑起来也简单,直接定时任务没5分钟刷一次好了。具体代码如下: package main import ( "fmt" "net" "regexp" "strings" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323" ) const dnsPodDomain = "dnspod.tencentcloudapi.com" // 主域名,不包含www const domain = "" // 腾讯云secretId const secretId = "" // 腾讯云secretKey const secretKey = "" func main() { // 目标子域名 subDomains := []string{"ipv6"} // 密钥 credential := common.NewCredential( secretId, secretKey, ) ipv6 := getMyIPV6() fmt.Printf("ipv6地址: %s\n", ipv6) cpf := profile.NewClientProfile() cpf.HttpProfile.Endpoint = dnsPodDomain client, _ := dnspod....

2022-01-25 22:42 · 2 min · 江波·林沂