2019独角兽企业重金招聘Python工程师标准>>>
之前买了主机搭Nas服务器后,寻思着把一些服务也挂在服务器上。因为我并没有使用黑群辉,而是使用ArchLinux做服务器系统,所以什么都得自己来。
既然能自己部署一个私有云,数据还是存在自己硬盘比较好,第一个开刀的云笔记。不过开源的云笔记貌似只找到蚂蚁笔记(leanote),不过这开源都不走心,将就用吧。
找了些资料,感觉使用docker安装比较省力,于是就现学现用,并和镜像作者协商,做了一个leanote和数据库分离的的镜像。这样能多个容器共用相同的数据库,管理、持久化和迁移起来都方便。
修改时间:2018年8月2日10:57:14
如果你不想瞎折腾,可以用作者2018年8月1日更新的独立数据库版,具体怎么用我还没测试。
docker run -d --name test_lea \
-p 10086:9000 \
-v `pwd`/conf/:/data/leanote/conf \
axboy/leanote:2.6.1-nodb
需要的工具如下
- git
- docker
需要的镜像,一个是现成的,另一个是自己构建的
- mongo
- 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
数据库使用默认的端口映射出来。容器命名为mongo。以后的所有数据库都用docker部署,并使用默认端口,宿主机上就不需要起数据库服务了。
--restart=always
总是重启,这样子重启宿主机后,自动启动这个容器。
--name mongo
起个名字,因为以后是多个服务器公共一个docker 容器数据库,就不分是什么有用的数据库容器了。
-v `pwd`:/data/db
这个是挂载容器内部的数据到宿主机的当前目录,这个很重要,因为但你重装系统后,只要不删除掉这个文件夹,数据还是能找到。
初始化leanote数据库
因为leanote需要一个初始化的mongo数据才能运行,当我们要分离出独立的数据库时,就需要将初始化数据先导入到独立的数据库容器中
下载leanote包,解压
$wget https://static.axboy.cn/leanote/leanote-linux-amd64-v2.6.1.bin.tar.gz -O leanote.tar.gz
$tar -xzf leanote.tar.gz -C .
将解压出来的数据拷贝到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/
#exit
值得注意的是,这里加了个--drop
参数,为的是防止旧数据和新数据冲突。
安装leanote并配置
下载镜像的Dockerfile文件安装,作者已经做出了无数据库版的镜像。
安装leanote
下载Dockerfile,修改配置并创建一个新的镜像
$git clone https://github.com/axboy/leanote.git
$cd leanote/no-db
$nano Dockerfile
- 从仓库拉取Dockerfile
- 进入leanote/no-db 目录下
- 我们需要修改写配置
FROM debian:jessie-slim
MAINTAINER zcw
ENV TZ=Asia/Shanghai
ADD run.sh /root/
ADD leanote.tar.gz /root/
RUN set -ex; \
# apt-get update; \
# apt-get install -y --no-install-recommends wget tar; \
rm -rf /var/lib/apt/lists/*; \
# 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 /root/ ;\
chmod a+x /root/run.sh ;\
chmod a+x /root/leanote/bin/run.sh ;\
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime ;\
echo $TZ > /etc/timezone
EXPOSE 9000
CMD /bin/bash /root/run.sh
你没有看错,我在改作者的Dockerfile,做了以下几件事
- 把之前我们下载的
leanote.tar.gz
挪到Dockerfile所在的目录下,方便我们使用ADD
命令添加并解压到镜像中。 - 屏蔽软件安装,因为我们手动把软件下载下来了,不需要
wget
,docker的ADD
命令帮我们导入压缩包的时候自动给我们解压了,不需要tar
。这样子做还有个好处是,节省了镜像构建的时间。 - 屏蔽
wget
和tar
使用的命令,因为我们没有安装,也不需要使用。
修改完毕后,按Ctrl+x
保存,按y
确定保存,按回车确定保存的文件名。
重要:要把之前下载的leanote.tar.gz
挪到Dockerfile所在的目录下,不想挪你重新下载也行,但是压缩包必须和Dockerfile在一起,很重要。
创建一个新的镜像,名字为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
上面这段命令我们做了这些几件事
- docker 运行一个新的容器,以后台运行容器(
-d
),命名为leanote - 把容器中的
/data/leanote
配置挂在再宿主机的pwd
目录下,方便持久化配置 - 端口转发,把容器的9000端口转发到宿主机的10001端口
- 运行容器的镜像
(下午的时候,知道一个网友安装发现权限问题,所以这里给出一个方案,很简单粗暴的方案)
$ sudo chown -R root:root yourpath/leanote
$sudo chmod -R 777 yourpath/leanote
现在我们可以通过独立mongo容器管理我们所有的数据。
配置
安装完还不能马上使用,因为我们还没有把数据库和leanote进行关联。这时候我们需要修改配置。
数据库的IP
$docker exec mongo cat /etc/hosts
从上图可以看到ip是127.17.0.2,我们那么我们需要的容器IPdocker宿主机的ip就是127.17.0.1(也就是最后一位为1即是docker宿主机的ip)。
修改配置
$nano yourpath/leanote/conf/app.conf
修改的地方有
- db.host
- db.dbname
- db.port
改为相应的参数
注意:如果你修改并重启后依然无法访问,需要执行下面的操作
把admin改为root,保持重启
再次访问服务器地址 ip:port ,网页的控制台显示为下面这样
再把配置改回admin,再重启
点击查看更多内容
MongoDBLinuxDocker
作者:布宝
链接:https://www.imooc.com/article/49225?block_id=tuijian_wz
来源:慕课网
本文首次发布于慕课网 ,转载请注明出处,谢谢合作