阿拉丁和灯

Thoughts, stories and ideas.



使用Docker和Confluence构建个人知识库


侯捷曾经说他见过的牛人都有一套很好的收藏整理的方法。我也曾经尝试过各种方法来管理自己看到的资料,学到的知识,但是一直没有特别满意的办法。直到几年前,发现了Confluence,就一直用Confluence做知识管理,觉得非常好用。Confluence是一个面向企业用户的软件,但是其良好的设计使得我们完全可以拿它来做个人知识管理平台。具体的运行实例,可以看我的知识库(wiki.wuyijun.cn)

用Confluence搭建个人知识库,有如下好处:

  1. 随时随地访问
    可以通过PC,手机,平板访问,只要有网络,就可以访问
  2. 方便的编辑操作
    图片,表格等等的支持都非常好,可以说比Word还好用
  3. 内置搜索
    快速准确找到你想要的知识
  4. 丰富的管理功能
    权限管理,页面移动,专业的知识管理工具

关于Confluence的介绍,请见百度百科相关条目

以前我是自己使用了一台物理服务器,在上面安装Confluence,需要配置DMZ主机,比较麻烦。但是现在云服务器如此方便好用,加上Docker如日中天,结合这三者,我们可以又快又方便地搭建一个属于自己的Confluence服务器,作为个人的知识管理平台。本文就具体介绍怎么来做这件事情。

部署结构

整个部署分为三部分,如下图所示。两个Docker容器分别运行PostgreSQL和Confluence。Nginx负责请求转发,以便支持不同的域名,或者同时支持其他web服务(如果不需要这两个功能,可以不安装Nginx,直接访问Confluence的端口)。

申请云主机

推荐阿里云。这一步网上的教程很多,就不赘述了。部署图上可以看到,我们需要跑两个Docker容器和一个Nginx,大概需要3G的内存,在使用人数不多的情况下,申请一台1CPU,4G内存的机器可以得到满意的性能。

安装Docker

目前大多数的Linux发行版都带了Docker,安装Docker非常简单。以CentOS为例,运行如下命令就可以安装Docker了

yum update
yum install docker

安装好之后,查看版本信息,并启动Docker

docker --version
docker -d &

关于Docker的更多资料,可以参考我的知识库中的相关页面

安装PostgreSQL

Image:
https://hub.docker.com/_/postgres/

命令:

docker run --name postgresdb -p 5432:5432 -e POSTGRES_PASSWORD=W**** -d postgres
docker exec -it postgresdb bash
psql -U postgres
\l
CREATE DATABASE confluence WITH OWNER postgres;
\q

注1:-p 5432:5432 选项是可选的,因为在后面启动Confluence容器的时候,postgresdb这个容器会以别名db连接到confluence容器,也就是说对confluence这个容器来说,可以通过db:5432的网络地址访问到postgresql服务,不需要在主机上开放5432端口。

注2:国内的云主机,访问docker registry经常出问题,导致下载Image不成功。可以在国外区域(比如阿里云的新加坡)申请一台临时的(按使用量计费的)云主机,然后下载Image,再用docker save和docker load命令将image保存并复制到国内区域的云主机,再启动。参考:How to copy docker images from one host to another without via repository?

安装Confluence

Image:
https://hub.docker.com/r/cptactionhank/atlassian-confluence/
(也可以使用 https://github.com/jgrodziski/docker-confluence/blob/master/Dockerfile, 这个Image把PostgreSQL和 Confluence包含在一个image里面)

参考:
http://blogs.atlassian.com/2013/11/docker-all-the-things-at-atlassian-automation-and-wiring/

命令:

docker run -d --name confluence -p 8090:8090 --link postgresdb:db --user root:root cptactionhank/atlassian-confluence:latest

可以用以下命令检查confluence是否启动

docker ps
docker inspect confluence

访问http://host-to-server:8090/ 就可以看到Confluence的初始化和配置页面。

破解Confluence

Conflunece是收费软件,但是因为它是Java程序,实际上破解起来并不困难。可以参考
http://pangge.blog.51cto.com/6013757/1560249 ,下面是具体做法。(这部分内容只供参考,实际上Confluence并不贵,如果长期使用,建议购买正式许可。)

1.从前面的链接下载破解包,或者从这里下载

2.运行iNViSiBLE\keygen.bat,根据Confluence Server ID生成注册码

3.将atlassian-extras-decoder-v2-3.2.jar从Confluence docker容器里复制到本地,用keygen.bat破解(.patch按钮),然后将破解后的文件复制回去,重启Confluence。

docker cp confluence:/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.2.jar ./
#改名为atlassian-extras-2.4.jar,复制到本地,然后patch这个文件,再改名回来
docker cp ./atlassian-extras-decoder-v2-3.2.jar  confluence:/opt/atlassian/confluence/confluence/WEB-INF/lib/
docker stop confluence
docker start confluence

注:以上利用了docker cp命令从host拷贝到container,老版本的docker不支持。如果你使用的是老版本,可以利用Volume作为文件的中转,详细信息参考我的Wiki:http://wiki.wuyijun.cn/pages/viewpage.action?pageId=2327034

4.访问http://host-to-server:8090,会进入到Confluence的注册和初始化页面,将注册码贴入到注册页面,点击下一步。

配置Confluence

注册之后的下一步是数据库配置。前面说过,Confluence的docker容器通过PostgreSQL容器的别名(db)和端口(5432)访问postgresql db。根据这个信息进行数据库配置,如下图。

点击下一步后Confluence会进行数据库初始化。初始化成功之后,我们就有了一个可以运行的Confluence服务。访问http://host-to-server:8090 就可以使用了。

自动备份

作为一个自己搭建的知识管理平台,我们必须做好备份。Confluence提供内建的自动备份功能。

自动备份

登录Confluence,选择General Configuration -> Backup Administration,设置自动备份的频率,这个备份是整个Site范围的,包含所有的Space。我们所用的Confluence的Docker容器将backups目录定义成了Volume,可以从host机上直接拷贝备份文件,可以通过ls /var/lib/docker/vfs/dir/*/backups/从host机查看备份文件所在目录。

备份清理

通过Cron定义自动删除老的备份文件的任务,定期自动运行。

vi /etc/cron.daily/deleteOldConfluenceBackups.cron

总结

对于技术人来说,知识管理是至关重要的一件事情,花一些时间搭建一个平台,可以极大地方便以后的使用。云主机+Docker+Confluence构成了一个非常棒的组合。按照本文描述的方式,可以快速地搭建一个Confluence服务器,成为个人知识管理的利器,值得每个技术人尝试。

参考资料

Deleting old Confluence backup files
http://mcqueeney.com/blog/deleting-old-confluence-backup-files/

How can get a list of all scheduled cron jobs on my machine?
http://unix.stackexchange.com/questions/7053/how-can-get-a-list-of-all-scheduled-cron-jobs-on-my-machine

Exploring Docker container's file system
http://stackoverflow.com/questions/20813486/exploring-docker-containers-file-system

Copy files from docker host to container
http://stackoverflow.com

Docker command line reference
https://docs.docker.com/reference/commandline/cli/



View or Post Comments