本帖最后由 laobenlang 于 2022-5-19 20:42 编辑
本人已经在论坛排重,近期无人分享本文中涉及的软件Joplin和webdav。
写在前面:
1.本文为什么发在精品软件区?
--主要以分享软件为主,所有软件皆为开源免费,不是本人编写。遇到问题可以直接在github上提单。
2.本文初衷?
-- 本人不爱学习,到现在为止,python,java,JavaScript,C++的各种语法已经记混了,为了不用记忆,常年依赖笔记软件。在单位和家中笔记不同步,这个很让我恼火,先后用过印象,坚果,有道云,百度云等软件,但是收费不开心!限流不开心!密码会被上传不开心!
为什么不能自己搞个服务器,自己同步笔记呢。
然后对比各种各样的私有云、支持同步笔记等软件。
终于我的笔记软件一路升级,从【eDiary】->【EssentialPIMPro(收费,可终身买断)】->【Joplin】。
3.自己搭建云笔记优势?
-- 安全、不限速、不限空间。啥都自己说了算。
4.主要用到的软件?
-- 笔记主体 Joplin
服务器自家电脑(打电话给电信宽带要的公网IP)
网盘软件 webdav
下面正题:
a.自己搭建云笔记,你得有个服务器。
真正想要数据自由,你得有个自己的服务器,这个服务器最好是有公网IP的局域网主机。
路由器中直接吧dmz指向自己电脑即可。
PS:家中有宽带,可以尝试打客服,直接选宽带业务,说我家装了个监控,需要个外网IP,不需要固定地址,动态公网IP就行了。
另外这个动态IP,每次拨号,地址会变。你如果不想动不动同步不了,最好自己申请个域名,然后写个脚本自动更新解析,我用的阿里云域名,python写个程序,开机自启动,每隔一小时检测下外网IP和域名解析IP是否一致。
自动解析IP
[Python] 纯文本查看 复制代码 import requests
class myIP:
@staticmethod
def getMyIp():
data = requests.get('https://ip.tool.lu/')
text = data.text
return text.split('\n')[0].strip().split(':')[1].strip()
[Python] 纯文本查看 复制代码 import time, datetime, os
import logging
from lib.aliyunDNSTools import Sample
from lib.DNSRecord import *
from lib.myip import *
loglevelflag = logging.INFO
logformatflag = "%(asctime)s %(name)s:%(levelname)s:%(message)s"
logging.basicConfig(filename="run.log", filemode="w", format=logformatflag, level=loglevelflag)
console = logging.StreamHandler()
console.setLevel(loglevelflag)
formatter = logging.Formatter(logformatflag)
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
class mainRunner :
oldip = ''
myip = ''
needCheckDNS = False
def __init__(self):
try:
self.oldip = myIP.getMyIp()
self.needCheckDNS = True
except:
print(">>>" +datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') + "初始化获取IP失败!")
logging.info("初始化获取IP失败!")
pass
def checkIPChange(self):
try:
self.myip = myIP.getMyIp()
print(">>>" +datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') +' oldip:' + self.oldip + ',newip:' + self.myip)
logging.info(' oldip:' + self.oldip + ',newip:' + self.myip)
if len(self.myip) < 1:
return False
return self.myip != self.oldip
except :
print(">>>" + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') +"检测IP变化时,获取IP失败!")
logging.info("检测IP变化时,获取IP失败!")
return False
def checkDNS(self):
try:
retdata = Sample.getDNSRecord()
dns = DNSRecord()
dns.loadFromJson(retdata['body']['DomainRecords']['Record'][0])
# print(dns)
if dns.Value != self.myip:
dns.Value = self.myip
Sample.updateDNSRecord(dns)
self.needCheckDNS = False
except :
print(">>>" +datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') +'检测更新DNS时报错!')
logging.info("检测更新DNS时报错!")
def run(self):
while True:
tempFlage = self.checkIPChange()
self.needCheckDNS = tempFlage or self.needCheckDNS
if self.needCheckDNS:
self.checkDNS()
print(">>>" + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') +"检测完成,开始休眠^_^")
logging.info("检测完成,开始休眠^_^")
time.sleep(60*60*1)
# time.sleep(1)
b.有了服务器,你得启动webdav服务。
提供webdav服务的软件有很多,不少私有云盘都带着,我通过docker装过可道云,装过seafile,装过nextcloud。功能比较傻瓜,性能是真的差,同步慢的要死,慢慢慢慢慢慢慢慢慢慢慢死了。
我找了个Github开源的一个,单纯提供webdav服务的程序,地址在这里(https://github.com/hacdias/webdav)
下载完就一个exe文件,然后自己写个yaml就可以启动了,看看readme,半分钟搞定。
yaml配置:
[XML] 纯文本查看 复制代码
# 监听任意网卡,多网卡可指定对应ip
address: 0.0.0.0
port: 8888
# 如果无需验证填 false
auth: true
# 如果不需要 https 则填 false
tls: false
# https证书和密钥,如果 tls 为 false,cert 和 key 不需要
cert: D:/XXXX.pem
key: D:/XXXX..key
# 访问前缀,建议默认
prefix: /
# 如果 auth 为 false 生效,文件共享的路径
scope: E:/workspace/webdav
# 是否允许修改
modify: true
rules: []
# 跨域设置
cors:
enabled: true
credentials: true
allowed_headers:
- Depth
allowed_hosts:
- http://localhost:888
allowed_methods:
- GET
exposed_headers:
- Content-Length
- Content-Range
# 用户信息,如果 auth 为 true 生效
users:
- username: user
password: 123
scope: E:/XXXX/Joplin
c.安装使用Joplin,笔记软件。
打开 工具---选项---同步,选择webdav,URL填写你的服务器地址或者域名地址。
[HTML] 纯文本查看 复制代码 http://www.xxxx.com:8888/
webdav用户名密码在yaml里面配置的。
保存,走你~~~
下载地址:
打不开的可以打开下steam++加速器。
joplin:
https://github.com/laurent22/joplin
webdav软件:
https://github.com/hacdias/webdav |