继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

带你使用Docker搭建私有云笔记

布宝
关注TA
已关注
手记 22
粉丝 9581
获赞 319

之前买了主机搭Nas服务器后,寻思着把一些服务也挂在服务器上。因为我并没有使用黑群辉,而是使用ArchLinux做服务器系统,所以什么都得自己来。

既然能自己部署一个私有云,数据还是存在自己硬盘比较好,第一个开刀的云笔记。不过开源的云笔记貌似只找到蚂蚁笔记(leanote),不过这开源都不走心,将就用吧。

图片描述

找了些资料,感觉使用docker安装比较省力,于是就现学现用,并和镜像作者协商,做了一个leanote和数据库分离的的镜像。这样能多个容器共用相同的数据库,管理、持久化和迁移起来都方便。


前言

创建时间:2018年8月2日10:57:14

修改时间: 2020年9月18日08:34:05

本文创建(编写于2018年8月2日10:57:14)距离现在(2020年9月18日08:34:05)已两年,docker-leanote 作者已经更新了项目,旧的方法已不适应,更新之。

本教程使用的项目:docker-leanote

当然,项目作者axboy也有自己的部署文档,我只是把数据库也docker化了。


图片描述

需要的工具如下

  1. git
  2. docker

需要的镜像

  1. mongo
  2. axboy/leanote

安装mongo并配置

获取镜像

$ docker pull mongo

运行

我自己习惯把docker的容器数据挂载到对应的/home/bubao/disk/data1/opt/容器名目录下。

$ mkdir /home/bubao/disk/data1/opt/mongo
$ cd /home/bubao/disk/data1/opt/mongo
$ docker run -p 27017:27017 --restart=always  --name mongo -v `pwd`:/data/db -d mongo

-p 27017:27017数据库使用默认的端口映射出来,意思是把后面的docker服务的27017暴露到前面的宿主机的27017上。容器命名为mongo。以后的所有数据库都用docker部署,并使用默认端口,宿主机上就不需要起数据库服务了。

--restart=always 总是重启,这样子重启宿主机后,自动启动这个容器。

--name mongo 起个名字,因为以后是多个服务器公共一个docker 容器数据库,就不分是什么有用的数据库容器了。

-vpwd:/data/db 这个是挂载容器内部的数据到宿主机的当前目录,这个很重要,因为但你重装系统后,只要不删除掉这个文件夹,数据还是能找到。

-d 后台运行。

mongo 是启动容器所使用的docker镜像

初始化leanote数据库

因为leanote需要一个初始化的mongo数据才能运行,当我们要分离出独立的数据库时,就需要将初始化数据先导入到独立的数据库容器中。

获取Leanote包

leanote官网获取leanote包,解压

leanote官网提供的下载链接是https://sourceforge.net/projects/leanote-bin/files/2.6.1/leanote-linux-amd64-v2.6.1.bin.tar.gz/download,这个无法用wget下载压缩包,而我发现只要把域名的https://sourceforge.net改成https://udomain.dl.sourceforge.net就能获取到文件。具体下载哪个,看自己系统了。

Linux:

这里我使用的是64位的:

$ cd /home/bubao/download # 这是我下载源文件的位置
$ wget https://udomain.dl.sourceforge.net/project/leanote-bin/2.6.1/leanote-linux-amd64-v2.6.1.bin.tar.gz -O leanote.tar.gz
$tar -xzf leanote.tar.gz -C .

导入数据到Mongo

初始数据存放在 /home/bubao/download/leanote/mongodb_backup/leanote_install_data中。

将解压出来的数据拷贝到mongo数据库的容器的根目录,容器名为mongo,这个容器就是我们刚刚启动的mongo数据库。

$docker cp leanote/mongodb_backup/leanote_install_data mongo:/

进入mongo数据库容器,把数据导入到数据库中

$docker exec -it mongo bash

#mongorestore -h localhost -d leanote --drop --dir /leanote_install_data/
# rm -rf /leanote_install_data # 可选操作:最后为了容器的干净,可以把数据包从容器中删去。
#exit

值得注意的是,这里加了个--drop参数,为的是防止旧数据和新数据冲突。

现在在mongodb中已经新建了leanote数据库, 可用命令查看下leanote有多少张"表":

$> mongo
> show dbs # 查看数据库
leanote	0.203125GB
local	0.078125GB
> use leanote # 切换到leanote
switched to db leanote
> show collections # 查看表
files
has_share_notes
note_content_histories
note_contents

初始数据的users表中已有2个用户:

user1 username: admin, password: abc123 (管理员, 只有该用户才有权管理后台, 请及时修改密码)
user2 username: demo@leanote.com, password: demo@leanote.com (仅供体验使用)

修改Leanote配置

因为这个包有些配置和我们实际应用场景是不一致的。我们先改完配置再度压缩,等待dockerfile导入。

我们修改的文件在/home/bubao/download/leanote/config/app.conf中,

$pwd
/home/bubao/download/
$ nano leanote/config/app.conf

图片描述

圈起来的地方分别是

  • db.host: mongodb的host,改成你自己的mongodb的host,我的这里填的是我运行mongodb容器的服务器的内网host10.0.0.3
  • db.port: mongodb的port,改为你自己的mongodb的port,我这里填上面我部署的mongo容器的端口27017
  • db.dbname: 这是刚刚导入的数据的数据库名,上面我们使用了leanote作为包名

圈下面的两个也很重要,分别是mongodb的用户名和密码,强烈推荐给mongodb设置用户名和密码。

注意!!!

按照本教程启动Mongodb是没有权限控制的, 如果你的Leanote服务器暴露在外网, 任何人都可以访问你的Mongodb并修改, 所以这是极其危险的!!! 请务必为Mongodb添加用户名和密码并以auth启动, 方法请见: 为mongodb数据库添加用户

修改完成,我们再度把文件夹打包,并重命名位leanote-new.tar.gz

$pwd
/home/bubao/download/
$tar -xzvf leanote-new.tar.gz ./leanote

安装leanote并配置

下载镜像的Dockerfile文件安装,作者已经做出了无数据库版的镜像

安装leanote

下载Dockerfile,修改配置并创建一个新的镜像

$ pwd
/home/bubao/download
$git clone https://github.com/axboy/leanote.git leanote-docker
$cd leanote-docker/nodb
$nano Dockerfile
  1. 从仓库拉取Dockerfile
  2. 进入leanote/no-db 目录下
  3. 我们需要修改写配置

FROM madnight/alpine-wkhtmltopdf-builder:0.12.5-alpine3.10-705860667 as builder
FROM axboy/leanote:latest as fontBuilder

FROM alpine:3.12
MAINTAINER zcw
ENV TZ=Asia/Shanghai

ADD leanote-new.tar.gz /root/

COPY --from=builder /bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf
COPY --from=fontBuilder /usr/share/fonts/truetype /usr/share/fonts/truetype

RUN apk update && apk add --no-cache tzdata mongodb-tools \
    libgcc libstdc++ libx11 glib libxrender libxext libintl \
    ttf-dejavu ttf-droid ttf-freefont ttf-liberation ttf-ubuntu-font-family && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    mkdir /data/ && \
    #wget http://static.axboy.cn/leanote/leanote-linux-amd64-v2.6.1.bin.tar.gz -O /root/leanote.tar.gz && \
    #tar -xzf /root/leanote.tar.gz -C /data/ && \
    mv /root/leanote-new /data/leanote && \
    chmod +x /data/leanote/bin/run.sh && \
    chmod +x /usr/local/bin/wkhtmltopdf

EXPOSE 9000
CMD sh /data/leanote/bin/run.sh

你没有看错,我在改作者的Dockerfile,做了以下几件事

  1. 把之前我们下载的leanote-new.tar.gz挪到root目录下,我们使用ADD命令添加并解压到容器中。所以我们就不需要wget了。
  2. 因为我们要把导入进来的leanote-new文件夹移动到/data目录下的leanote,但是不需要解压,因为ADD已经帮我们解压了,所以我们使用cp而不是tar

修改完毕后,按Ctrl+x保存,按y确定保存,按回车确定保存的文件名。

创建一个新的镜像,名字为axboy/leanote,tag为no-db2.6.1

$docker build . -t="axboy/leanote:no-db2.6.1"

运行leanote镜像

$ mkdir /home/bubao/disk/data1/opt/leanote
$ cd /home/bubao/disk/data1/opt/leanote
docker run -d --name leanote \
    --restart=always \
    -v `pwd`/db:/data/db \
    -v `pwd`:/data/leanote \
    -p 10001:9000 \
    axboy/leanote:no-db2.6.1

上面这段命令我们做了这些几件事

  1. docker 运行一个新的容器,以后台运行容器(-d),命名为leanote
  2. 把容器中的/data/leanote配置挂在再宿主机的pwd目录下,方便持久化配置
  3. 端口转发,把容器的9000端口转发到宿主机的10001端口
  4. 运行容器的镜像

最后我们访问docker宿主机的host10.0.0.3+10001,即10.0.0.3:1000110.0.0.3是我的docker宿主机的host,你们自己看看自己的host。

成功

打开App,阅读手记
4人推荐
发表评论
随时随地看视频慕课网APP

热门评论

所有坑都踩完了,服务也启动了,日志也正常了,端口白名单和安全组也开了,但是ip:端口还是404

1、因为映射数据卷问题,会出现permission denied: http://img4.mukewang.com/601cebe70001e3c409570117.jpg

删掉-v映射之后可以运行,网上 "--privileged=true"以及"-u root"方法均无效

2、运行几秒后会出现"panic: no reachable servers",从而不断地重启,无法正常登陆端口访问

仓库的主要更新内容:

1、tar文件强制删除了,改成了wget下载。

2、nodb版本增加pdf导出和数据库工具

3、增加lite版

查看全部评论