Git Product home page Git Product logo

siyuanbackup's Introduction

🗂️思源笔记数据云备份工具

siyuanBackUp,可实现自动打包数据到阿里云盘或本地。

支持

  • 触发方式
    • API网关触发器
    • 定时触发器

部署

一、创建思源docker

首先创建一个工作空间目录,用于映射思源的workspace

目录位置可以自定义,后面用到的地方自行替换

mkdir -p /myapps/siyuan/workspace

然后运行一个docker容器,用来拷贝我们后面需要用的原文件

docker run --name=siyuan -u 1000:1000 b3log/siyuan:v2.1.6 --workspace=/siyuan/workspace/

Ctrl + C,把运行思源进程停掉

拷贝容器中前端的js目录

docker cp siyuan:/opt/siyuan/stage/build/desktop /myapps/siyuan/

img

把这个容器删了,我们运行一个新的容器,并映射本地workspace和desktop这两个目录

运行容器之前给这两个目录设上权限,不然容器起不来

docker rm siyuan
chown -R 1000:1000 /myapps/siyuan/workspace
chown -R 1000:1000 /myapps/siyuan/desktop

我指定的端口是6807,也可以自定义,后面iptables规则和mitmproxy程序中的端口需要改成一样的

docker run --name=siyuan-2.1.6 -v /myapps/siyuan/workspace:/siyuan/workspace -v /myapps/siyuan/desktop:/opt/siyuan/stage/build/desktop -p 6807:6806 -u 1000:1000 b3log/siyuan:v2.1.6 --workspace=/siyuan/workspace/

通过测试,在网页上正常访问

二、部署aliyunpan

想要在Linux上操作阿里云盘,有一个很好用的开源工具aliyunpan,用于我们备份工作的上传

apt安装

适用于apt包管理器的系统,例如Ubuntu国产deepin深度操作系统等。目前只支持amd64和arm64架构的机器。

sudo curl -fsSL http://file.tickstep.com/apt/pgp | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg > /dev/null && echo "deb [signed-by=/etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg] http://file.tickstep.com/apt aliyunpan main" | sudo tee /etc/apt/sources.list.d/tickstep-aliyunpan.list > /dev/null && sudo apt-get update && sudo apt-get install -y aliyunpan

rpm安装

适用于rpm包管理器的系统,例如CentOSRockyLinux等。目前只支持amd64和arm64架构的机器。

sudo curl -fsSL http://file.tickstep.com/rpm/aliyunpan/aliyunpan.repo | sudo tee /etc/yum.repos.d/tickstep-aliyunpan.repo > /dev/null && sudo yum install aliyunpan -y

安装完成后用命令行登录阿里云盘

aliyunpan login

然后需要输入RefreshToken,获取这个RefreshToken需要进到阿里云盘官网并登录,按照下方图片操作

获取到后,复制下来,粘贴到终端回车,登录成功

把RefreshToken记下来,等会自动化脚本还要用到这个

三、部署mitmproxy流量监控

运行siyuanBackUp需要机器中有Python3支持,没有环境可以yum install python36快速安装

克隆siyuanBackUp,克隆的位置可以任意,我选择和之前的目录放在了一起cd /myapps/siyuan

git clone https://gitclone.com/github.com/aqz236/siyuanBackUp.git

如果使用访问国外github克隆速度较慢,也可以克隆下面gitee的仓库

git clone https://gitee.com/FSHOU/siyuanBackUp.git

进入siyuanBackUp,创建虚拟环境,并在虚拟环境中安装项目依赖

cd siyuanBackUp/
python3 -m venv siyuanEnv
source siyuanEnv/bin/activate
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装完成后需要简单填写一下配置

编辑backup.sh,如果你之前没有对映射位置做过自定义的修改,那么这里只需要填写RefreshToken

编辑siyuan_mitm.py,如果你设置的端口也是6807,则此处不需要做任何修改

添加两条自定义iptables规则,此处的6807要与创建容器时设置的端口相同,8712是设置的mitmproxy透明代理端口。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6807 -j REDIRECT --to-port 8712
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 6807 -j REDIRECT --to-port 8712

然后把当前的iptables配置保存到配置文件中

iptables-save > /etc/sysconfig/iptables

为了让添加的两条规则永久生效,需要执行

service iptables save

如果报错Failed to restart iptables.service: Unit not found.,则需要安装iptables-services

yum install iptables-services -y

查看全部的nat规则

iptables -t nat -L -n --line-numbers

在DOCKER链下看见了6807与6806之间的转发,是正在生效的

把这条规则删除,删除的行号要与查到的对应,想要让删除的规则永久生效,可以看补充1。

这种删除方法不是彻底删除,重启iptables或者容器,都会失效,我正好利用这个机制来决定siyuanBackUp的启动与关闭,详细使用操作看后面的补充2

iptables -t nat -D DOCKER 行号

删除规则后,页面刷新一下,已经是打不开了,此时用户访问的流量已经从原来的6807被转发到了8712,如果仍然可访问,解决方法看后面的补充3

然后以透明代理模式启动mitmproxy

mitmdump -p 8712 --set block_global=false --mode transparent -s siyuan_mitm.py

页面正常加载,且mitmproxy成功捕获到了流量

补充:

  1. 如果需要让6807->6806的docker规则永久删除,可以在配置文件中将这条规则注释掉,这样再重启iptables都不会使其生效了

img

重启iptables,查看规则,发现只有我们自定义规则了

img

不过,如果是重启了容器,规则还是会被覆盖生效,这是无可避免的,除非再写一条规则,把docker映射的6807端口映射到其他端口

img

  1. 如果想要停止透明代理,可以直接重启iptables,或者重启容器,想需要再次让6807端口走透明代理就把DOCKER链下的6807->6806的转发规则删除,删除规则是立即生效的,不需要重启,下次再像代理,需要再手动把docker的规则删除。

  2. 如果添加了规则,并且删了6807->6806的规则,网页仍然可以访问,检查是不是网卡名称的原因,使用ifconfig看自己的网卡名称,像我这台虚拟机,网卡名就不是默认的eth0,而是ens33

img

这就要修改两个地方,重新添加规则,并且修改siyuan_mitm.py

vi /etc/sysconfig/iptables找到添加的两条自定义规则,将两处的eth0改成自己的网卡名

修改siyuan_mitm.py中nic的值

修改完后重启iptables

四、制作触发器

最后需要做一个触发器,用于触发备份请求,这里的方案是改前端代码,通过制作按钮可以发起备份请求。

也可以再额外去写一个crontab,做一个时间触发器,比如每周六晚上十一点做一次备份

0 23 * * 6 /myapps/siyuan/siyuanShell/backup.sh

时间触发器比较简单,下面说这个手动的怎么弄,进入最开始导出来的desktop目录,有一个叫main.fcaf89eaf1cee5881c1f.js的js文件,要修改的就是这个。

直接修改有点困难,这个js是被极限压缩了,得去做代码格式化,这里直接提供修改的快捷方法

vi 编辑文件,然后斜杠向下搜关键字

<div id="barSync" class="toolbar

搜到的第一个结果就是要改的目标,把id的值改为其他的,我改成了barBackupSelf,也可以自定义其他的

img

再继续搜关键词

${window.siyuan.config.sync.stat||window.siyuan.languages.syncNow+

搜到的第一个结果,把双引号之间的内容改成立即备份

img

然后继续vi搜关键词

if("barSync"===t.id){if((0,f.needSubscri

if的前面插入一段代码,这个/api/self/backup/alipan就是我们用于触发上传的api,这里的barBackupSelf要与第一步定义的id相同

if("barBackupSelf"===t.id){(0,c.fetchPost)("/api/self/backup/alipan",{}),e.stopPropagation();const i = n(1890);if(true) void(0, i.showMessage)(window.siyuan.languages._kernel[41]);break}

img

最后,让mitmproxy跑起来,看一下效果

记得把语言改成中文> Settings-->Appearance-->Language

img

上传成功

img

img

思源笔记 - 本地优先的个人知识管理系统,支持 Markdown 排版、块级引用和双向链接 (b3log.org)思源笔记

问题

有问题请提交issue

许可

siyuanBackUp是在GPL3.0 许可下许可的开源软件。

免责声明

  • 本程序为免费开源项目,旨在增强对用户文件的可靠性,方便使用者对自己的数据进行备份和恢复以及学习Shell,使用时请遵守相关法律法规,请勿滥用;
  • 本程序通过对文件进行压缩,无破坏官方程序、接口行为;
  • 本程序仅做程序的压缩、备份到本地或上传到用户自己的云盘,不转发、恶意获取、篡改任何用户数据;
  • 在使用本程序之前,你应了解并承担响应的风险,包括但不限于修改修改脚本导致数据丢失、账号被ban、下载限速等,与本程序无关;
  • 如有侵权,请通过邮件与我联系,会及时处理

siyuanbackup's People

Contributors

aqz236 avatar fshow236 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.