当我真的开始搜索了,才发现似乎没人写过在威联通上部署bitwarden......于是我才写了这篇文章前言 Bitwarden真的是个不错的软件,虽然这小东西没有1password那么精致,而且市面上lastpass这样的软件也是免费服务,但密码这种东西不管软件里面说的怎么本地加密,夸得天花乱坠的,总归是捏在自己手里更舒心一点,而且搭建一个实用并且简单的服务器也是一次很不错的练手机会。本着这样的想法来搭建服务器的我,才会去aliyun搞个云服务器弄这个密码管理。但是把这玩意儿迁移到本地却出现了很麻烦的情况…… 广义上来说,nas这东西也是个服务器,我家有两台,一个是跑windows的服务器,另一个是威联通的nas。本着省电和降低散热压力的原则,这俩运算能力都不高,于是跑虚拟机就基本不可能了(卡的要死还怎么玩……),所幸不论是windows还是威联通,配置docker都不算麻烦。但是Windows环境下配置docker在此并不推荐,最大的原因是windows下的docker配置,在网上的教程太少,对于新手学习难度确实高了点,如果是现成的nas诸如群晖或者威联通,配置docker就相对容易很多,教程也一抓一大把。因此我才会选择在威联通上部署这个服务,毕竟人家玩这个也没多久嘛。 但是威联通的用户相对群晖还是太少了,网上大多数docker配置bitwarden的教程基本都是基于群晖写的,威联通的系统不论是docker环境还是linux底层都和群晖有多多少少的区别,直接照搬显然不行。 所幸,威联通的docker也并没有魔改到什么可怕的地步,在威联通系统里面,docker和其他几个容器服务被合并成了ConrainerStation这一个软件
这就是这次要折腾的主体 我明白很多朋友看见两个完全不认识的单词拼凑出来的东西就会发自内心的不想用,不过别怕,这软件也就名字可怕了点…… 这东西本质上还是个docker,至少是以docker为主的一个“综合性容器管理界面”(我是这么叫他的)。相对于群晖的docker而言,个人感觉这个平台虽然使用不算简便,但是功能上却一点不输群晖的docker。跑一些简单的业务,我想是完全没问题的。 具体流程:本次安装参考了以下几位大神的文章,出处先标识在这里,前人挖井后人饮水,这些引用还是得写明白: 《使用 bitwarden_rs 搭建自托管的密码服务器》, https://wiki.wjw.me/posts/1550028650/
《NAS的搞机之旅 篇五:威联通NAS使用百度云Docker教程,超简单!》,https://post.smzdm.com/p/apzee959/
《修改威联通qnap的docker加速镜像地址》,http://lok.me/a/2434.html
……
威联通的docker安装容器可以从软件内置的镜像源浏览器直接获取,但是因为未知的原因,我始终无法正常获取bitwarden的镜像。 而且如果通过一般安装的方法创建镜像的话,配置上麻烦了点,威联通的UI设计仍然不算直观,很多地方还不如敲代码来的方便。 按照在群晖创建bitwarden的经验,通常直接获取docker镜像后,配置好目录就可以直接运行了,如果网络通畅,解决不能安装的特殊问题,我想应当是可以获得和群晖一致的体验的,但是现在只能走其他方法。 这时候我注意到创建页面右上方有“创建应用程序”的按钮,点击后出现了一个很熟悉的编辑器页面……
居然能直接用docker-compose 这时候需要简单解释下docker的安装方法了,docker安装通常有两种方式,一个是直接从镜像源获取配置好的镜像部署到本地,手动部署好环境后就可以运行,另一种方式是通过一个叫“docker-compose”的软件配置,这款软件会根据本地已经写好的yml文件,直接处理相关的docker环境问题,包括镜像的获取,镜像的环境配置,镜像的网络端口映射等等等等,这样在一些需要批量快速处理的场景中,一个docker-compose.yml文件就可以很方便的进行docker的部署。 而弹出来的这个界面,就是docker-compose文件的编辑页面,在这个页面可以直接编辑应用程序名称和yml文件中的相关内容,也就是说,如果有一份合适的部署bitwarden的docker-compose文件,只需要将文件内容粘贴到这个编辑器当中,就有可能直接部署好bitwarden。 当然,docker-compose这个东西本质上是对docker部署的批量化处理,还是需要经过docker镜像下载等一系列操作才行,但是由于docker-compose的文件编辑标准比威联通自己的应用程序更加简单明确,很多ui上难以体现和配置的东西在这个文件里面就是一句话的事,反而会比在网页程序中手动配置来的方便。 那么接下来就是让docker能够快速下载有关镜像,方便程序自动部署,这就需要对镜像源进行一些处理。 威联通docker镜像源配置Docker的镜像服务器在国外,下载镜像速度必然很慢,更别说一些大一点的镜像下载到一半断掉这种欲哭无泪的事情是经常发生的。所以配置一个docker的国内镜像源很重要。 配置源需要采取以下操作 1,在威联通控制台当中,打开ssh
2,使用putty等工具连接到威联通的ssh,密码一般是管理员账号密码(这里我用的xshell,个人用户免费,但是很多大佬用的还是putty,实际上市面上的ssh软件很多的,不必局限在某一个上面) 3,打开目录docker源配置目录,命令:“cd /share/CACHEDEV1_DATA/.qpkg/container-station/etc”
4,使用系统自带的vi编辑器编辑目录中的docker.json文件,命令:“vi docker.json”
这里截图有点问题,是英文句号不是逗号 5,如果不出其他情况的话,打开后应当是两个大括号在文件中,点击键盘“i”将vi编辑器切换到编辑模式,移动光标结合回车将括号分开到上下两行,中间一行填入docker镜像的相关内容 6,Docker镜像地址可以通过多种渠道获取,我个人使用的是aliyun的docker加速服务,免费,但是需要在aliyun官网注册后免费开启,因为每个账号的加速地址不同,因此无法分享,但是也有可以公开的地址,在这里举例使用中国科技大学的加速镜像。 在中间行输入:“ "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]”。记得该行需要首行空两格。(其实还是推荐去申请一个aliyun的加速服务,反正不要钱,阿里云的速度和质量也比大学要好很多,大学那点小水管带宽还是留给莘莘学子吧)
7,随后重启docker,也就是container-station服务,命令:“/etc/init.d/container-station.sh restart”(不过最简单的还是这时候直接重启nas……)
当然也可以用网页管理直接重启 这之后威联通的docker加速就应该配置成功了,下载镜像应该也没什么问题了。
安装bitwarden镜像前期准备处理的差不多,之后就开始bitwarden服务的部署。 刚才也说了,使用docker-compose要的其实是一个靠谱的docker-compose文件,在这儿我使用了这篇文章作为基础,感谢文章作者提供的教程和灵感,如有冒犯请联系(https://wiki.wjw.me/posts/1550028650/) 我们一共需要准备两个文件,一个是config.env文件,一个是docker-compose文件。 首先需要准备的配置文件为config.env,这个文件内容是控制bitwarden安装后的一些基础配置,包括用户开放注册等项目,需要写好之后将文件放在一个docker能够读取到的位置。 我在nas当中开了一个单独的共享目录,专用于存放bitwarden运行中可能形成的相关文件,因此config.env文件最好也存放在这里。 目录名是“/share/Container/bitwarden”,如果没有这个目录可以使用ssh或者网页管理中的filestation自行创建,当然也可以选择到其他目录,只要方便自己管理同时docker能够访问的都可以。
(注意,如果要在配置文件中引用创建的共享文件,一般所有的共享目录都是在/share这个目录下的) Config.env文件可以在本地计算机上进行编辑创建后再拷入nas的设定文件夹,config.env文件内容如下:
SIGNUPS_ALLOWED=true DOMAIN=https://(你的网址) DATABASE_URL=/data/bitwarden.db ROCKET_WORKERS=10 WEB_VAULT_ENABLED=true
我一行一行解释 1,signups_allowed这条是控制开放用户注册,因为服务器刚刚部署,肯定需要一个最初的账户,这条肯定得是true,不过在注册完毕后,如果需要关闭,也不需要在这里修改,这个文件权重比较低,如果其他配置文件有配置这个就无效了。 2,domain,这条是配置bitwarden服务器的对外域名,如果只是内网使用的话直接填写ip或者不写问题都不大,但是如果需要配置https,ssl加密的话最好还是写上。 3,database_url,这条是密码保存的数据库的路径,注意这个目录是相对于这个容器而言的,而并非相对nas而言,如果不理解用途最好不要随意修改。(容器的目录和nas的目录其实并不匹配,针对容器里面的程序来说,容器会提供给他们一个虚拟的目录以供读写,这个目录叫什么,是什么配置取决于用户在创建容器的时候如何配置,而并非直接按照nas的路径写入,可以理解为对于容器的软件而言,他们有一套独立的文件系统,而这套系统用映射的方式和真实目录对应) 4,rocket_workers,这条是服务器使用的线程数量,这里配置的10条,其实对于nas可以再小一点,具体多少看个人nas的性能来定,不做修改也不存在太大的问题。 5,web_vault_enabled,是否开启web客户端,这条不开的话会没办法进入bitwarden配置页面,肯定得开,但是未来可以根据需要自行关闭。
将config.env文件拷入相关目录之后,就开始着手准备docker-compose.yml文件,这个是我们需要填入网页那一片空白的内容 就是这个大空白 之后在ContainerStation当中就可以用编辑器创建一个bitwarden的docker容器了,但是不能完全照搬教程中的内容,需要根据自身环境进行一些简单的修改: 编辑器中应当有以下内容:
version: '3'
services: bitwarden: image: mprasil/bitwarden:latest container_name: bitwarden restart: always volumes: - ./data:/data env_file: - /share/Container/bitwarden/config.env ports: - "6666:80"
这里最后一排并没有显示出来,但是示意已经足够了
这个文件的内容相对不需要太多解释,在本次参考的文章当中也有比较清晰的表述,在这里只有几点需要提一下: 前几行的version,services,image,container_name,restart都不要做修改,命令排版也最好不要变动(可以去被引用的原文寻找排版内容https://wiki.wjw.me/posts/1550028650/),但是有几个地方需要处理: 1,volumes,这行下方的“- ./data:/data”,含义是将系统目录中的/data目录挂载到docker镜像环境的/data当中,这也是为什么我前文说到的不要修改config.env文件中data内容的原因,这两个文件的这两条是相互关联的,修改需要一同修改 如果只是修改docker镜像在nas中的文件存储位置,只需要修改./data:/data中前一个data的值,例如我修改成了“- /share/Container/bitwarden:/data”,将/share/container/bitwarden挂载到docker中的/data目录。 2,env_file,本条需要注意,这条需要根据你本身的config.env文件位置进行修改,最好填写完整路径,例如我的config.env文件存储位置在/share/Container/bitwarden/config.env,则我需要将完整路径填写到本条,否则安装过程可能会报错无法找到文件。 3,ports,本条与docker服务对外网络有关,是配置一个端口映射,将外部端口6666映射到docker镜像的80端口,也可以根据自身需要自行选择映射端口。(注意,诸如443,80等外部端口可能会与nas本身系统冲突,最好找个没人用的端口使用)
在将文件写入完成后,点击“验证YAML”可以检查文件配置是否存在问题,如有问题可以根据报错内容自行修改。 如果配置无误,就点击创建,应该就可以访问了。
部署完成会在总览界面呈现这样的形态
bitwaiden的界面也可以直接访问,记得加上端口号,我这里不是例子的6666而是12580 随后就可以通过反向代理或者端口映射之类的操作将网页布置到外网了,最好是申请一个免费的ssl证书挂成https,由于我有另一台windows机器,因此挂https的任务就交给那台机器的iis进行反向代理了,在这里就不多做介绍,如果需要进行https配置的,也可以试试nginx的反向代理教程,网上很多......
结语有时候对于需求的渴望就会变成学习新技术的巨大动力……穷也是…… 自从获得了公网IP之后,我就开始考虑如何把以前因为IP问题而被逼使用特殊手段的服务迁移到本地来,不论是之前的内网穿透还是aliyun上面跑的云服务器,都尽可能的迁移到本地的nas和服务器运行,安全性是一方面,更重要的是省了一年好几百的费用…… 之前外网访问本地其实是靠在主路由上跑的frp服务来达成的,frp具体是什么在此不表,总之这是一个通过很简单的操作能够很简单就达成“外网访问本地资源”这一普通人听上去就会觉得没啥卵用但是各路玩家却“趋之若鹜”的特殊需求的特殊服务……但再怎么好的frp也只是折中方案,要根本上解决问题还是得靠公网IP和DDNS。在和运营商“缠绵”许久后,终于可以抛弃frp的我开始考虑如何将云服务器的相关业务迁移到本地,而我的云服务器最主要的功能其实就是作为一个bitwarden密码管理软件的后台服务器,这就回到了文章开头的那一幕。 可能我这篇文章有点冗长,过程写的有些地方也过于细了点,毕竟我职业不在此,全凭兴趣玩玩这个而已,有些地方是我自己摔过跟头的,自然会多做些笔墨,还请各位包涵。而且技术肯定也不算到位,如果有什么问题或者纰漏,还请各路大神多多指教~~~~
|