# leanote云笔记部署体验
> 偶然看到一篇介绍安装部署拥有云笔记的推文,于是也部署体验一下。leanote云笔记简单来说,就是将leanote部署到云服务器上,并采用Mongodb数据库存储文件。先说说部署成功后使用的感受,leanote云笔记可以随时编写,修改,不受本地限制;并且可以随时分享,团队协作。编写的笔记可以直接生成博客。可以理解leanote既是云笔记,又是博客。但是呢,作为笔记工具,与Typora使用体验上相差甚远;作为博客网站,也是毫无亮点;使用界面丑,不简洁。
>
> 总结:与其他笔记工具相比,没有明显特别好的优点,普普通通。放弃!
------
> 讲完体验,就是介绍leanote的部署过程、Mongodb数据库的特性总结、以及部署中遇到问题。
>
> Github地址:https://github.com/leanote/leanote
>
> 官网地址:[Leanote 蚂蚁笔记,有极客范的云笔记!](https://leanote.com/index)
## leanote安装部署
> 以安装部署二进制版本为例,直接部署;而部署源文件的版本还需要安装Go环境支持。
>
> 部署在阿里云ECS,使用Xshell,并开放9000端口。
### 1. 下载 `leanote` 二进制版
由此处下载 [leanote 最新二进制版](http://leanote.org/#download)。
假设将文件下载到 `/home/user1` 目录下, 解压文件从而在 `/home/user1` 目录下生成 `leanote`目录:
```
$> cd /home/user1
$> tar -xzvf leanote-darwin-amd64.v2.0.bin.tar.gz
```
------
### 2. 安装 `mongodb`
#### 2.1 安装 `mongodb`
到 [mongodb 官网](http://www.mongodb.org/downloads) 下载相应系统的最新版安装包,或者从以下链接下载旧版本:
- 64位 linux mongodb 3.0.1 下载链接: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz
下载到 `/home/user1`下, 直接解压即可:
```
$> cd /home/user1
$> tar -xzvf mongodb-linux-x86_64-3.0.1.tgz/
```
为了快速使用`mongodb`命令, 可以配置环境变量。编辑 `~/.profile`或`/etc/profile` 文件, 将`mongodb/bin`路径加入即可:
```
$> sudo vim /etc/profile
```
此处实例使用了`vim`文本编辑器,你可以使用自己熟悉的编辑器。
在`/etc/profile`中添加以下行,注意把用户名(`user1`)和相应的文件目录名(`mongodb-linux-x86_64-3.0.1`)替换成自己系统中的名称:
```
export PATH=$PATH:/home/user1/mongodb-linux-x86_64-3.0.1/bin
```
保存修改后,在终端运行以下命令使环境变量生效:
```
$> source /etc/profile
```
#### 2.2 测试`mongodb`安装
先在`/home/user1`下新建一个目录`data`存放`mongodb`数据:
```
mkdir /home/user1/data
```
用以下命令启动`mongod`:
```
mongod --dbpath /home/user1/data
```
这时`mongod`已经启动,重新打开一个终端, 键入`mongo`进入交互程序:
```
$> mongo
> show dbs
...数据库列表
```
`mongodb`安装到此为止, 下面为`mongodb`导入`leanote`初始数据。
------
### 3. 导入初始数据
`leanote`初始数据存放在 `/home/user1/leanote/mongodb_backup/leanote_install_data`中。
打开终端, 输入以下命令导入数据。
```
$> mongorestore -h localhost -d leanote --dir /home/user1/leanote/mongodb_backup/leanote_install_data/
```
现在在`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 (仅供体验使用)
```
------
### 4. 配置`leanote`
`leanote`的配置存储在文件 `conf/app.conf` 中。
请务必修改`app.secret`一项, 在若干个随机位置处,将字符修改成一个其他的值, 否则会有安全隐患!
其它的配置可暂时保持不变, 若需要配置数据库信息, 请参照 [leanote问题汇总](https://github.com/leanote/leanote/wiki/QA)。
------
### 5. 运行`leanote`
**注意:** 在此之前请确保`mongodb`已在运行!
新开一个窗口, 运行:
```
$> cd /home/user1/leanote/bin
$> bash run.sh
```
最后出现以下信息证明运行成功:
```
...
TRACE 2013/06/06 15:01:27 watcher.go:72: Watching: /home/life/leanote/bin/src/github.com/leanote/leanote/conf/routes
Go to /@tests to run the tests.
Listening on :9000...
```
恭喜你, 打开浏览器输入: `http://localhost:9000` 体验`leanote`吧!将localhost替换成你服务器的公网IP地址。
![image-20211208150217668](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/%20blogPic/202112081502933.png)
![image-20211208150327200](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/%20blogPic/202112081503628.png)
## 部署中遇到问题
我明明在服务器的安全组管理中,开放9000端口。但是访问不了。打开本地用ping以及telnet命令测试一下端口是否可以访问。
```
C:\Users\ZhouJiankang>ping 118.31.116.5
正在 Ping 118.31.116.5 具有 32 字节的数据:
来自 118.31.116.5 的回复: 字节=32 时间=63ms TTL=50
来自 118.31.116.5 的回复: 字节=32 时间=69ms TTL=50
来自 118.31.116.5 的回复: 字节=32 时间=68ms TTL=50
来自 118.31.116.5 的回复: 字节=32 时间=66ms TTL=50
118.31.116.5 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 63ms,最长 = 69ms,平均 = 66ms
C:\Users\ZhouJiankang>telnet 118.31.116.5 9000
正在连接118.31.116.5...无法打开到主机的连接。 在端口 9000: 连接失败
```
显示无法连接,那就手动命令修改防火墙的配置。
`systemctl status firewall`查看防火墙的状态,确保防火墙的程序运行。
`firewall-cmd --query-port=9000/tcp`查看防火墙的端口9000是否开启;
如若未开启,手动添加端口。
`firewall-cmd --add-port=9000/tcp --permanent`,并重新加载`firewall-cmd --reload`
再次查看9000端口是否开启,yes显示9000端口开放成功。
```
[root@iZbp14au3oyt7wawokbvrfZ ~]# firewall-cmd --query-port=9000/tcp
no
[root@iZbp14au3oyt7wawokbvrfZ ~]# firewall-cmd -add-port=5732/tcp --permanent
usage: see firewall-cmd man page
firewall-cmd: error: unrecognized arguments: -add-port=5732/tcp
[root@iZbp14au3oyt7wawokbvrfZ ~]# firewall-cmd --add-port=9000/tcp --permanent
success
[root@iZbp14au3oyt7wawokbvrfZ ~]# firewall-cmd --reload
success
[root@iZbp14au3oyt7wawokbvrfZ ~]# firewall-cmd --query-port=9000/tcp
yes
[root@iZbp14au3oyt7wawokbvrfZ ~]#
```
## Mongodb数据库
#### 一、MongoDB的简介:
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它 支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其 语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
#### 二、MongoDB的特点:
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
[![mongodb集群参考](https://bkimg.cdn.bcebos.com/pic/3b292df5e0fe99252f675a9a34a85edf8cb17194?x-bce-process=image/resize,m_lfit,w_220,h_220,limit_1/format,f_auto)](https://baike.baidu.com/pic/mongodb/60411/0/3b292df5e0fe99252f675a9a34a85edf8cb17194?fr=lemma&ct=single)mongodb集群参考
*面向集合存储,易存储对象类型的数据。
*模式自由。
*支持动态[查询](https://baike.baidu.com/item/查询)。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性。
*支持 [Golang](https://baike.baidu.com/item/Golang/2215139),[RUBY](https://baike.baidu.com/item/RUBY),[PYTHON](https://baike.baidu.com/item/PYTHON),[JAVA](https://baike.baidu.com/item/JAVA),[C++](https://baike.baidu.com/item/C%2B%2B),[PHP](https://baike.baidu.com/item/PHP),[C#](https://baike.baidu.com/item/C%23)等多种语言。
*文件存储格式为BSON(一种JSON的扩展)。
*可通过[网络](https://baike.baidu.com/item/网络)访问。
#### 三、MongoDB 的原理
所谓“面向集合”*(Collection-Oriented)*,意思是数据被分组存储在数据集中,被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似[关系型数据库](https://baike.baidu.com/item/关系型数据库)(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。Nytro MegaRAID技术中的闪存高速缓存算法,能够快速识别数据库内大数据集中的热数据,提供一致的性能改进。
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复[杂的文](https://baike.baidu.com/item/杂的文)件类型。我们称这种存储形式为[BSON](https://baike.baidu.com/item/BSON)*(Binary Serialized Document Format)*。
MongoDB已经在多个站点部署,其主要场景如下:
1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。
3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。
不适用的场景如下:
1)要求高度事务性的系统。
2)传统的商业智能应用。
3)复杂的跨文档(表)级联查询。
#### 四、MongoDB安装
1.下载安装包
```
wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz
```
下载完成后解压缩压缩包
```
tar zxf mongodb-linux-i686-1.8.2.tgz
```
2. 安装准备
将mongodb移动到/usr/local/server/mongdb文件夹
```
mv mongodb-linux-i686-1.8.2 /usr/local/mongodb
```
创建数据库文件夹与日志文件
```
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs
```
3. 设置开机自启动
将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动
```
echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data –logpath=/usr/local/mongodb/logs –logappend --auth -–port=27017" >> /etc/rc.local
```
4. 启动mongodb
cd到mongodb目录下的bin文件夹启动mongodb
下面这个是需要权限的登录方式, 用户连接需要用户名和密码
```
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --auth --port=27017 --fork
```
这个是不需要密码的
```
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
```
5. 参数解释: --dbpath 数据库路径(数据文件)
```
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
-h [ --help ] show this usage information
--version show version information
-f [ --config ] arg configuration file specifying additional options
--port arg specify port number
--bind_ip arg local ip address to bind listener - all local ips
bound by default
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
--dbpath arg (=/data/db/) directory for datafiles 指定数据存放目录
--quiet quieter output 静默模式
--logpath arg file to send all output to instead of stdout 指定日志存放目录
--logappend appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件
--fork fork server process 以创建子进程的方式运行
--cpu periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况
--noauth run without security 无认证模式运行
--auth run with security 认证模式运行
--objcheck inspect client data for validity on receipt 检查客户端输入数据的有效性检查
--quota enable db quota management 开始数据库配额的管理
--quotaFiles arg number of files allower per db, requires --quota 规定每个数据库允许的文件数
--appsrvpath arg root directory for the babble app server
--nocursors diagnostic/debugging option 调试诊断选项
--nohints ignore query hints 忽略查询命中率
--nohttpinterface disable http interface 关闭http接口,默认是28017
--noscripting disable scripting engine 关闭脚本引擎
--noprealloc disable data file preallocation 关闭数据库文件大小预分配
--smallfiles use a smaller default file size 使用较小的默认文件大小
--nssize arg (=16) .ns file size (in MB) for new databases 新数据库ns文件的默认大小
--diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式
--sysinfo print some diagnostic system information 打印系统诊断信息
--upgrade upgrade db if needed 如果需要就更新数据库
--repair run repair on all dbs 修复所有的数据库
--notablescan do not allow table scans 不运行表扫描
--syncdelay arg (=60) seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s
Replication options:
--master master mode 主复制模式
--slave slave mode 从复制模式
--source arg when slave: specify master as <server:port> 当为从时,指定主的地址和端口
--only arg when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库
--pairwith arg address of server to pair with
--arbiter arg address of arbiter server 仲裁服务器,在主主中和pair中用到
--autoresync automatically resync if slave data is stale 自动同步从的数据
--oplogSize arg size limit (in MB) for op log 指定操作日志的大小
--opIdMem arg size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小
Sharding options:
--configsvr declare this is a config db of a cluster 指定shard中的配置服务器
--shardsvr declare this is a shard db of a cluster 指定shard服务器
```
6. 进入数据库的CLI管理界面
cd到mongodb目录下的bin文件夹,执行命令./mongo
运行如下:
```
[root@namenode mongodb]# ./bin/mongo
MongoDB shell version: 1.8.2
connecting to: test
> use test;
switched to db test
```
7. MongoDB配置
```
a 通过上面的MongoDB安装,我们已经将其安装成功并且启动,但是发现启动太过于麻烦,所以需要我们自己给MongoDB配置配置文件,因MongoDB开发者没有配置样例,所以需要我们自己去创建并且写入内容
b 在和bin目录同级的目录下面建一个mongo.conf文件(编码格式为utf8无bom格式,否则会报错),作为mongodb的配置文件。[ps:在启动的时候会用到]
---mongo.conf文件内容如下:
vim mongo.conf
c 打开编辑器之后将如下图所示的内容写入到编辑器中,保证是正确的,如果你的安装地址和我的不一致,则需要自己修改
```
\#数据库数据存放目录
dbpath=/usr/local/mongodb/data
\#数据库日志存放目录
logpath=/usr/local/mongodb/logs/mongodb.log
\#以追加的方式记录日志
logappend = true
\#端口号 默认为27017
port=27017
\#以后台方式运行进程
fork=true
\#开启用户认证
auth=true
\#关闭http接口,默认关闭http端口访问
\#nohttpinterface=true
\#mongodb所绑定的ip地址
\#bind_ip = 127.0.0.1
\#启用日志文件,默认启用
journal=true
\#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
#### 五、连接到MongoDB数据库
由于没有设置密码,直接使用DataGrip连接。
![image-20211208151902229](https://mybolg-typora.oss-cn-beijing.aliyuncs.com/%20blogPic/202112081519998.png)
Leanote云笔记部署体验