<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>码农明明桑</title><image><url>https://isming.me/tags/nas/avatar.png</url><title>码农明明桑</title><link>https://isming.me/tags/nas/</link></image><link>https://isming.me/tags/nas/?utm_source=rss</link><description>码农明明桑，一个程序员的生活和技术内容记录。</description><generator>Hugo -- gohugo.io</generator><language>zh</language><copyright>&lt;a href="https://isming.me">码农明明桑的博客&lt;/a>所有内容遵循&lt;a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans">「CC BY-NC-SA 4.0」&lt;/a>协议，转载请保留署名并注明来源。</copyright><lastBuildDate>Tue, 29 Oct 2024 21:57:17 +0800</lastBuildDate><atom:link href="https://isming.me/tags/nas/index.xml" rel="self" type="application/rss+xml"/><item><title>威联通NAS购入初体验以及设置记录</title><link>https://isming.me/2024-10-29-new-nas-setting/?utm_source=rss</link><pubDate>Tue, 29 Oct 2024 21:57:17 +0800</pubDate><guid>https://isming.me/2024-10-29-new-nas-setting/</guid><description>
&lt;p>之前是用树莓派连个两盘位硬盘盒运行一些服务，由于它的稳定性加上容量不够，一直想弄一个NAS，趁着双十一到来，就入手了威联通的NAS，本文介绍 一下购入的抉择以及NAS的初始化和相关的设置。
&lt;img loading='lazy' decoding="async" src="https://img.isming.me/image/ts464c2.png" alt="" />
&lt;/p>
&lt;h3 id="缘起">缘起&lt;/h3>
&lt;p>NAS这个东西知道了很多年了，一直想要搞一个，迫于家里花费的紧张，之前一直是使用一台树莓派4B，其中刷了Openwrt系统，挂载了两块盘的硬盘盒，其中开启了Webdav， Samba，Jellyfin相关的东西。不过因为Jellyfin挂载阿里云盘速度不太理想，有不少视频还是下载到自己的硬盘里面的。同时内，硬盘也出现了拷贝大文件就出现问题，需要重启硬盘盒和系统的问题，这个后续会继续说。&lt;/p>
&lt;p>DIY NAS硬件或者成品的NAS也关注了有挺长一段时间，迫于以上问题，以及文件越来越多，当时买的这两块2T的硬盘，容量已经不够用了，想要购买一个NAS的想法更加加强，终于决定今年双十一搞个NAS。&lt;/p>
&lt;h3 id="剁手">剁手&lt;/h3>
&lt;p>购买NAS是有两个选择，自己组装硬件，安装飞牛或者黑群晖等NAS系统，又或者购买群晖、威联通等成品NAS。在V2EX发帖求助，以及自己的纠结中，最终在性价比和稳定性等各种因素比较之后，选择入手了威联通TS464C2。&lt;/p>
&lt;p>威联通的系统虽然被大家诟病许久，但是它也算是市场上除了群晖之外NAS系统做的最久的厂家了，考虑到文件的安全可靠在文件系统和系统稳定性上面，这两家还是要比国内的新起之辈更加值得信赖的。而我选择的这一款，支持内存扩展，如果以后服务比较多，可以再增加一根内存。4个3.5寸硬盘位加上两个NVME 硬盘位，对于容量的扩展应该很多年都不存在问题了。双十一这块机器只要2000块钱就拿下，而群晖同配置的4盘位差不多要四千，只能说高攀不起。&lt;/p>
&lt;p>另外下单了一块国产的NVME 2T硬盘，加入Qtier存储池，希望能提高一些速度。为了拥有更大的容量，经过一些研究，淘宝购入了一块2手服务器硬盘，型号为HC550， 16TB，回来看Smart信息，已经运行了786天，不过其他信息看着都不错。
&lt;img loading='lazy' decoding="async" src="https://img.isming.me/image/nas-hdd-smart.png" alt="" />
&lt;/p>
&lt;h3 id="上电">上电&lt;/h3>
&lt;p>收到机器，插上硬盘，参照指南开始初始化。威联通提供了比较友好的初始化方法，可以通过网页或者应用对它进行初始化，不过一定要插上硬盘才能开始这一切。&lt;/p>
&lt;p>根据指南初始化之后，开始了硬盘的初始化和存储池的设置。之前使用的openwrt中对于硬盘的管理是比较简单的，基本就是实现了基础的Linux功能，把磁盘挂载到指定的目录，硬盘初始化之类的。而QNAP中，“存储与快照总管应用”中，对于硬盘和存储卷的设置则全面，可以设置各种raid的存储池，Qtier，快照，卷等等，也有硬盘的运行情况的显示。我想这就是选择大厂成品NAS的原因，毕竟docker之类的东西大家都很容易做，但是这种积累了很多年的东西不是那么快能够做出来的。
&lt;img loading='lazy' decoding="async" src="https://img.isming.me/image/disk-manager-storage.png" alt="" />
&lt;/p>
&lt;h3 id="安装软件">安装软件&lt;/h3>
&lt;p>在威联通NAS中安装软件可以选择从QNAP的应用中心安装应用，也可以安装Container Station之后通过docker来安装。不过官方的应用中心中的应用中主要是一些官方提供的应用，这个时候我们可以选择第三方的应用中心，这里我推荐一个： &lt;a href="https://www.myqnap.org/repo.xml">https://www.myqnap.org/repo.xml&lt;/a>，官方应用商店没有的可以来这里试试。不过这个应用商店中的部分应用是收费的，比如Jellyfin，它提供的版本需要依赖Apache，这个时候你需要去它的网站上面购买，价格还不便宜，当然我是不会去购买的。&lt;/p>
&lt;p>除了应用中心安装之外，我们还可以去网上找QPKG文件，比如Jellyfin，我就是使用的&lt;code>pdulvp&lt;/code>为QNAP定制的版本，下载地址在：&lt;a href="https://github.com/pdulvp/jellyfin-qnap/releases">https://github.com/pdulvp/jellyfin-qnap/releases&lt;/a>。Jellyfin我不使用官方的docker版本有两个原因，一是使用这个定制版本，可以方便的使用英特尔的集成显卡进行视频的硬解，另一方面是使用docker的化，默认只能映射一个媒体目录到Docker中，想要映射多个目录会麻烦一点，因此使用QPKG更方便。&lt;/p>
&lt;p>对于其他的应用，比如FreshRss， VaultWarden则是选择了使用Docker进行部署，Container Station的Docker部署为先写一个compose文件，之后软件会帮助下载相关的容器进行启动，这个有个问题就是创建完compose之后，容器启动起来之后，在web界面上就没法编辑compose文件了，想要编辑的需要用ssh进终端去看，比如我创建的&lt;code>app-freshrss&lt;/code>它的compose文件就在&lt;code>/share/Container/container-station-data/application/app-freshrss&lt;/code>当中。&lt;/p>
&lt;p>&lt;img loading='lazy' decoding="async" src="https://img.isming.me/image/qnap-screenshot.png" alt="" />
&lt;/p>
&lt;p>另外威联通自带的一些应用，文件管理，QuMagie，特别要说一下QuMagie，它已经可以帮我把相片按照人物，地点，物品等等分类好了，配合上手机App使用流畅很多，再也不用之前那样使用SMB手动同步了。&lt;/p>
&lt;h3 id="其他">其他&lt;/h3>
&lt;p>目前用了这个二手服务其硬盘加上新买的固态硬盘组了一个Qtier池作为主要存储区，家里有块旧的sata固态硬盘就把他搞成高速缓存加速了。原来的两块酷狼硬盘都是EXT4格式，但是插到QNAP上却不能识别，只好放在原来的设备上，新NAS通过Samba访问原先的设备，把文件拷贝过来。&lt;/p>
&lt;p>之后把旧的硬盘插上来使用才发现，其中一个硬盘出现了坏道，数量还不少，感觉它应该命不久矣，不敢放什么东西上来了。 而另一块好的硬盘，准备把它作为备份盘，相片，笔记和其他的一些重要文件都定期备份到这个盘上面。因为硬盘数量优先，并没有组RAID还是空间优先，只把重要的文件备份但愿以后不会踩坑。&lt;/p>
&lt;p>以上就是这个新NAS的初体验了，后面还要继续增加新的应用，仍然需要摸索，外网访问仍然沿用家里的DDNS和端口转发。目前才用了不到一个星期，还有很多东西没有用到没有涉及，后面有新的体验来再继续写文章分享，也欢迎玩NAS网友一起交流分享，如果有好玩的应用也欢迎评论推荐给我。&lt;/p>&lt;p>&lt;h4>&lt;a href="https://isming.me/2024-10-29-new-nas-setting/?utm_source=rss#commentsanchor">看完评论一下吧&lt;a>&lt;/h4>&lt;/p></description><comments>https://isming.me/2024-10-29-new-nas-setting/?utm_source=rss#commentsanchor</comments><category domain="https://isming.me/tags/%E6%8A%80%E6%9C%AF/?utm_source=rss">技术</category><category domain="https://isming.me/tags/linux/?utm_source=rss">Linux</category><category domain="https://isming.me/tags/%E6%8A%98%E8%85%BE/?utm_source=rss">折腾</category><category domain="https://isming.me/tags/nas/?utm_source=rss">NAS</category></item><item><title>在家搭建VaultWarden密码管理服务</title><link>https://isming.me/2024-08-22-vaultwarden-deploy/?utm_source=rss</link><pubDate>Thu, 22 Aug 2024 19:33:25 +0800</pubDate><guid>https://isming.me/2024-08-22-vaultwarden-deploy/</guid><description>
&lt;p>每个人都有很多密码，有人用脑记，有人用纸记，也有很多的工具帮我们记。之前我一直使用Keepass，在&lt;a href="https://isming.me/2024-04-08-passwords-manage/">之前的文章&lt;/a>介绍过。平时输入密码的场景最多的是网页中，目前keepass的网页插件只能说是能用的程度。前段时间给openwrt上面装上了docker，也想着在家搭一个密码管理服务，于是说干就干了。
&lt;img loading='lazy' decoding="async" src="https://img.isming.me/image/vault-cover.jpg" alt="" />
&lt;/p>
&lt;p>密码服务能够个人搭建的就是Bitwarden了，因为在自家的树莓派上运行，因此选择了基于Rust的VaultWarden，毕竟资源消耗更少，性能也会更好点吧，它兼容Bitwarden，因此所有的客户端和浏览器插件都通用。
因为是在家里搭建要保证在外的时候，密码服务也能正常工作，因为已经有公网ip了，所以需要弄一个DDNS。因为搭建VaultWarden需要https，在查资料的过程中发现了&lt;a href="https://lucky666.cn/">lucky&lt;/a>这个很好用的国产软件，索性把家里的DDNS和端口转发都换成了Lucky。&lt;/p>
&lt;p>具体的流程就是首先在openwrt上面下载vaultwarden的镜像，因为国内docker默认镜像源用不了，所以我是用了github的镜像源：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker pull ghcr.io/dani-garcia/vaultwarden:latest
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>之后在本地创建一个文件用来保存运行相关的环境变量：&lt;/p>
&lt;pre tabindex="0">&lt;code>ROCKET_PORT=1089
.....
&lt;/code>&lt;/pre>&lt;p>当然了，也可以选择在运行docker的时候通过命令行带着，但是因为要加的变量很多，我就弄了个文件放。另外本地也要选择一个文件夹用来存放vaultwarden的数据。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -d --name vaultwarden -v /data/vw-data:/data --network host --env-file /user/sam/env --restart unless-stopped ghcr.io/dani-garcia/vaultwarden:latest
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>我这里的配置是通过环境变量指定了端口，然后docker里面使用宿主机的网络，而不是像官网文档那样用了桥接，至于原因则是因为在openwrt里面停了重启发现网卡被占用启动不了。按照如上步骤即可完成vaultwarden的启动了。&lt;/p>
&lt;p>但是这样服务还是不能使用，因为没有https服务，vaultwarden还无法完成身份认证。因此需要使用lucky了，我们可以选择把它安装在openwrt上，也可以安装到docker里面，而我发现我华硕路由器的koolshare软件中心里面就有，遂决定把他放到路由器里面。&lt;/p>
&lt;p>安装完lucky后，首先是到自己的域名解析服务商那里把二级域名弄好，因为自动申请证书和DDNS都需要，DNS最好使用Cloudflare，阿里云，DNSPod等几家可以通过api修改解析，lucky里面又内置了的，这样可以减少很多麻烦。搞好之后，就可以去lucky里面先弄证书自动申请了，当然有证书的可以直接添加进去，我这里用了ACME申请&lt;code>Let's Encrypt&lt;/code>证书。入口在“安全管理里面”点击添加证书，更加具体的可以看官方文档，这里搞好之后，后面设置端口转发或者设置web服务的时候都会使用这个证书。&lt;/p>
&lt;p>&lt;img loading='lazy' decoding="async" src="https://img.isming.me/image/lucky-ssl.png" alt="" />
&lt;/p>
&lt;p>搞完SSL证书，我想到我这里其实不需要通过端口转发来实现，完全可以通过Lucky的web服务功能来做，于是就创建一条web服务的规则,如下：&lt;/p>
&lt;p>&lt;img loading='lazy' decoding="async" src="https://img.isming.me/image/lucky-web-proxy.png" alt="" />
&lt;/p>
&lt;p>监听端口为对外暴露的端口，TLS启用就开启网站的HTTPS功能，前提也要先配置好证书才能打开。默认规则中服务类型选择反向代理，目标地址就是我们的服务的地址，例如&lt;code>http://192.168.1.10:1089&lt;/code>,万事大吉打开，这样有些header都能正确的传过去。&lt;/p>
&lt;p>这一切都搞完，就可以去浏览起打开注册用户了。
&lt;img loading='lazy' decoding="async" src="https://img.isming.me/image/vault-register.png" alt="" />
&lt;/p>
&lt;p>为了安全起见，最好注册完之后把注册功能给关掉，做法就是修改环境变量。&lt;/p>
&lt;pre tabindex="0">&lt;code>SIGNUPS_ALLOWED=false
&lt;/code>&lt;/pre>&lt;p>另外，Admin页面也是默认关闭的，我自认为没有必要打开，因此就保留了原样。为了方便起见，把邮箱SMTP功能配置上，这样就可以去验证邮箱使用邮箱验证登录，同时主密码忘记提示词也可以发送到邮箱。配置上DOMAIN，记得要带上前面的https和后面的端口，这样就可以使用webauth了。一切 就绪，就可以去重新启动docker了。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">docker stop vaultwarden
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker rm vaultwarden
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d --name vaultwarden -v /data/vw-data:/data --network host --env-file /env --restart unless-stopped ghcr.io/dani-garcia/vaultwarden:latest
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>虽然把之前的docker容器删掉了，但是因为数据是映射到本地目录的，所以都还在。&lt;/p>
&lt;p>前面这些搞完之后，为了数据的安全，我们还需要定期对数据进行备份，我是把阿里云盘挂载到本地了，因此直接把数据文件拷贝过去就实现了远程备份。为了足够高的安全，我是备份了两份，一份在阿里云盘，一份放到家里的另一块硬盘上。具体通过crontab每天定时执行脚本，把数据目录压缩，放置到对应的目录，备份的时候会把最老的那一个备份删掉。脚本如下：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SRC_DIR&lt;/span>&lt;span class="o">=&lt;/span>/mnt/sda1/vw-data/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">LOG_FILE&lt;/span>&lt;span class="o">=&lt;/span>/mnt/sda1/log/Error_Log_&lt;span class="k">$(&lt;/span>date +%Y%m%d&lt;span class="k">)&lt;/span>.log
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">MAX_NUM&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">NOTIFY_URL&lt;/span>&lt;span class="o">=&lt;/span>https://sctapi.ftqq.com/&lt;span class="o">[&lt;/span>apikey&lt;span class="o">]&lt;/span>.send
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DEST_ALIYUN&lt;/span>&lt;span class="o">=&lt;/span>/mnt/aliyundriver/backup/vaultwarden
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DEST_SDB&lt;/span>&lt;span class="o">=&lt;/span>/mnt/sdb1/backup/vaultwarden
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">function&lt;/span> notify &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> curl --data-urlencode &lt;span class="s2">&amp;#34;title=&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">NOTIFY_URL&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">function&lt;/span> log &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>date +&lt;span class="s1">&amp;#39;%Y-%m-%d %H:%M:%S&amp;#39;&lt;/span>&lt;span class="k">)&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="nv">$1&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &amp;gt;&amp;gt; &lt;span class="si">${&lt;/span>&lt;span class="nv">LOG_FILE&lt;/span>&lt;span class="si">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> notify &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$1&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">function&lt;/span> compress &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> ! -d &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">DEST_SDB&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> log &lt;span class="s2">&amp;#34;错误：第二块硬盘不存在，无法进行备份&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">dest_file&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">DEST_SDB&lt;/span>&lt;span class="si">}&lt;/span>/vw_backup_&lt;span class="k">$(&lt;/span>date +%Y%m%d&lt;span class="k">)&lt;/span>.zip
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 7z a -tzip &lt;span class="si">${&lt;/span>&lt;span class="nv">dest_file&lt;/span>&lt;span class="si">}&lt;/span> &lt;span class="si">${&lt;/span>&lt;span class="nv">SRC_DIR&lt;/span>&lt;span class="si">}&lt;/span> &amp;gt; /dev/null 2&amp;gt;&lt;span class="p">&amp;amp;&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="nv">$?&lt;/span> -eq &lt;span class="m">0&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;压缩完成,文件存在&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">dest_file&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> ! -d &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">DEST_ALIYUN&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> log &lt;span class="s2">&amp;#34;错误：阿里云目录未挂载，请检查&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> cp &lt;span class="si">${&lt;/span>&lt;span class="nv">dest_file&lt;/span>&lt;span class="si">}&lt;/span> &lt;span class="si">${&lt;/span>&lt;span class="nv">DEST_ALIYUN&lt;/span>&lt;span class="si">}&lt;/span>/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> log &lt;span class="s2">&amp;#34;错误：压缩出现错误&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> notify &lt;span class="s2">&amp;#34;今日备份成功&lt;/span>&lt;span class="k">$(&lt;/span>date +%Y%m%d&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">function&lt;/span> delete_old_archives &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">num&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>ls -l &lt;span class="si">${&lt;/span>&lt;span class="nv">1&lt;/span>&lt;span class="si">}&lt;/span> &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;^-&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> wc -l&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="nv">$num&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="si">${&lt;/span>&lt;span class="nv">num&lt;/span>&lt;span class="si">}&lt;/span> -gt &lt;span class="si">${&lt;/span>&lt;span class="nv">MAX_NUM&lt;/span>&lt;span class="si">}&lt;/span> &lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">do&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">file&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>ls -rt &lt;span class="si">${&lt;/span>&lt;span class="nv">1&lt;/span>&lt;span class="si">}&lt;/span>/vw_backup_*.zip &lt;span class="p">|&lt;/span> head -n 1&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -n &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">file&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rm -f &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">file&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;删除旧文件&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">file&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;没有找到旧文件&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">let&lt;/span> num--
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">done&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">function&lt;/span> main &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> compress
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> delete_old_archives &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">DEST_ALIYUN&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> delete_old_archives &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">DEST_SDB&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">main
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>这样一通操作下来，自认为安全方面是有保障了，只是比之前的全部本地稍微差一点点。vaultwarden也提供了比较全的导入导出功能，因此我原来的keepass数据可以很容易到导入，基本做到了无缝切换。使用了两天下来，网页端的自动填充功能确实要强大很多。同时内置了OTP功能，一些需要二次验证的服务，可以自动把OTP Code输入了，这个后面可以把原来用的一些转移过来。唯独的问题是，vaultwarden的OTP code无法放到vaultwarden中去。&lt;/p>
&lt;p>本来打算这个服务搭好之后，让老婆也一起用，提高全家账号的安全性，然而她却说用不上，手机上基本不需要输入密码，没必要多记一个密码了。不过对于大部分人来说也确实是，短信登录加上微信登录已经解决了大部分场景，密码管理服务对他们来说只是伪需求。也可能只对于我们这一小部分爱折腾的人才比较有点用吧。&lt;/p>
&lt;p>搭建这个服务，参考了不少网上的内容。关于docker的使用和shell脚本的编写，也多亏了GPT。最后在列出一些参考了的资料：&lt;/p>
&lt;ol>
&lt;li>&lt;a href="https://rs.ppgg.in/configuration/configuration-overview">Vaultwarden wiki 中文版&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://atpx.com/blog/docker-vaultwarden/">自建 vaultwarden / bitwarden_rs 密码管理器&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://lucky666.cn/docs/intro">Lucky使用指南&lt;/a>&lt;/li>
&lt;/ol>&lt;p>&lt;h4>&lt;a href="https://isming.me/2024-08-22-vaultwarden-deploy/?utm_source=rss#commentsanchor">看完评论一下吧&lt;a>&lt;/h4>&lt;/p></description><comments>https://isming.me/2024-08-22-vaultwarden-deploy/?utm_source=rss#commentsanchor</comments><category domain="https://isming.me/tags/%E6%8A%80%E6%9C%AF/?utm_source=rss">技术</category><category domain="https://isming.me/tags/%E6%8A%80%E6%9C%AF%E6%9D%82%E8%B0%88/?utm_source=rss">技术杂谈</category><category domain="https://isming.me/tags/%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86/?utm_source=rss">密码管理</category><category domain="https://isming.me/tags/%E6%8A%98%E8%85%BE/?utm_source=rss">折腾</category><category domain="https://isming.me/tags/nas/?utm_source=rss">NAS</category></item><follow_challenge><feedId>55157116408461322</feedId><userId>61227089652190208</userId></follow_challenge></channel></rss>