乐于分享
好东西不私藏

安卓部署Node.js版Tiddlywiki并同步GitHub

安卓部署Node.js版Tiddlywiki并同步GitHub

之前已经在Mac端部署了本地的Node.js版的TiddlyWiki,导入了本地的wiki文件,并且关联了GitHub仓库。为了实现多设备访问,可以使用家庭服务器进行内网穿透或公网IP+端口转发的方式,但是也可以在手机上进行部署,通过局域网的方式起到了“移动服务器”的效果。

安卓端准备工作

Termux是安卓端的一个Linux模拟环境,可以在里面运行Node.js版本的TiddlyWiki。可以在F-Droid和play商店进行下载安装。

  1. # 安装完成后,尽量给予权限(尤其是后台和通知),打开Termux,执行基础安装:
  2. # 更新软件源并安装 OpenSSH
  3. pkg update
  4. pkg upgrade
  5. pkg install openssh
  6. # 设置一个临时密码(用于第一次 Mac 连接)
  7. passwd
  8. # 启动 SSH 监听服务
  9. sshd
  10. # 获取连接所需的信息
  11. whoami    # 记下弹出的用户名,如 u0_a240
  12. ifconfig  # 在 wlan0 部分找 inet 后的内网 IP,如 192.168.1.3

Mac 端通过ssh连接Termux

  1. # 你一定不想在手机上打命令行,Mac和手机连接同一无线网,在Mac的终端(Terminal)中输入:
  2. # 使用刚才查到的用户名和 IP,注意端口是 8022
  3. ssh u0_a240@192.168.1.5-p 8022
  4. # 输入命令后手机会跳出通知栏,点击'ACQUIRE WAKELOCK'就能保持Termux后台运行
  5. termux-wake-lock

输入你设置的临时密码,连接成功后,你的 Mac 终端前缀会变成手机的用户名。然后就可以在Mac端输入命令行了。

安装基础依赖

  1. # 在 Mac 控制的手机终端里执行:
  2. # 安装Node.js
  3. pkg install nodejs
  4. # 安装git
  5. pkg install git
  6. # 安装TiddlyWiki
  7. npm install -g tiddlywiki

手机端生成 GitHub 鉴权密钥

手机作为一个独立的新设备,需要向 GitHub 注册身份:

  1. # 生成手机专属密钥,一路回车
  2. ssh-keygen -t ed25519 -C '你的GitHub邮箱@example.com'
  3. # 查看并复制公钥
  4. cat ~/.ssh/id_ed25519.pub

登录 GitHub 网页版 -> Settings -> SSH and GPG keys -> New SSH Key,将密钥粘贴保存。

  1. 测试连接
  2. ssh -T git@github.com

报错1 Connection closed by 198.18.1.231 port 22 是因为手机后台运行了代理/翻墙软件,其接管了流量但拒绝转发 SSH 的 22 端口数据。

  1. 解决方案:强制让GitHub的 SSH 流量走443(HTTPS)端口。
  2. # 打开配置文件
  3. nano ~/.ssh/config
  4. # 填入以下配置信息
  5. Host github.com
  6. Hostname ssh.github.com
  7. Port443
  8. User git
  9. # Ctrl+O保存 -> Enter -> Ctrl+X退出
  10. # 重新测试,看到 ‘Hi [你的用户名]!’就成功了。
  11. ssh -T git@github.com

建立wiki文件夹

  1. # 文件夹名可自取
  2. # 回到根目录
  3. cd ~
  4. # 创建文件夹名为'example'的服务文件夹
  5. tiddlywiki example --init server

建立git和GitHub仓库的远程连接

在GitHub网站上建立一个新的空白仓库。

不要有描述,不要有readme文档,一定是空白仓库。

  1. # 进入example文件夹
  2. cd example
  3. # 初始化git,并设置初始分支为main
  4. git init
  5. git branch -M main
  6. # 创建一个忽略文件,防止乱七八糟的临时文件被上传
  7. echo 'node_modules/'>>.gitignore
  8. echo '*.tmp'>>.gitignore
  9. echo '.DS_Store'>>.gitignore
  10. echo '$__StoryList.tid'>>.gitignore
  11. #关联GitHub仓库(github.com:用户名/仓库名就是仓库首页的网址)
  12. git remote add origin git@github.com:用户名/仓库名.git
  13. # 验证关联是否成功
  14. git remote -v
  15. # 出现
  16. # origin git@github.com:用户名/仓库名.git (fetch)
  17. # origin git@github.com:用户名/仓库名.git (push)
  18. #即是说明关联成功

拉取仓库的文件至本地

  1. git pull origin main
  2. # 如果看到 'Already up to date' 说明已成功

启动TiddlyWiki

  1. cd ~
  2. tiddlywiki example --listen host=0.0.0.0 port=8080

在Mac的浏览器中输入即可访问安卓手机中已同步好的TiddlyWiki文件,也可以在手机浏览器中输入访问,可以随意编辑,并且会自动保存,不小心关闭也没有大碍。

提交更改至GitHub仓库

  1. # 添加暂存
  2. git add .
  3. # 添加快照
  4. git commit -m 'Mobile update: $(date)'

报错2 Author identity unknown git 拒绝匿名提交(Commit)。由于提交失败,本地没有产生新数据,后续的推送(Push)自然找不到目标。

  1. # 解决方案:补全身份信息
  2. # 补全身份登记
  3. git config --global user.email ’your_email@example.com‘
  4. git config --global user.name ‘YourName’
  5. # 推送到云端
  6. git push origin main

自动化

为了避免每次都在小屏幕上输入长串命令,我们需要配置 Shell 脚本和别名。

编写“启动脚本”

  1. nano ~/start_wiki.sh

~ 填入内容

  1. #!/data/data/com.termux/files/usr/bin/bash
  2. cd ~/example
  3. echo '正在从 GitHub 同步最新数据...'
  4. git pull origin main
  5. echo '启动 TiddlyWiki 服务中...'
  6. tiddlywiki .--listen host=0.0.0.0 port=8080

编写“同步脚本”

  1. nano ~/sync_wiki.sh

~ 填入内容

  1. #!/data/data/com.termux/files/usr/bin/bash
  2. cd ~/你的仓库名
  3. echo  '正在打包修改记录...'
  4. git add .
  5. git commit -m 'Mobile auto-update: $(date)'
  6. echo '正在推送到 GitHub...'
  7. git push origin main
  8. echo '同步圆满完成'

配置快捷口令与权限

  1. # 赋予脚本执行权限
  2. chmod +x ~/start_wiki.sh ~/sync_wiki.sh
  3. # 注册极短别名
  4. echo ‘alias tw='~/start_wiki.sh'’>>~/.bashrc
  5. echo ’alias ts='~/sync_wiki.sh'‘>>~/.bashrc
  6. # 立刻生效
  7. source ~/.bashrc

报错3 No command tw found... 可尝试把那两行也复制到文件里:

  1. nano ~/.zshrc
  2. # 填入内容
  3. echo ‘alias tw='~/start_wiki.sh'’>>~/.bashrc
  4. echo ’alias ts='~/sync_wiki.sh'‘>>~/.bashrc
  5. # 保存退出后
  6. source ~/.zshrc

开启维基:在 Termux 输入回车,浏览器访问 http://localhost:8080。

备份收工:回 Termux 按停止服务,输入回车。

Reference

  1. TiddlyWiki

相关学习资料