目录简介
1、安装 golang 环境
2、下载 revel Web 框架和 Leanote 源码
3、安装 MongoDB 数据
4、初始化数据库
5、配置 Leanote 服务端
6、运行 Leanote 服务端
7、配置开机启动
8、下载客户端
云笔记从最先的Evenote(印象笔记)和OneNote,到近两年国内陆续推出了很多类似产品,百家争鸣后都开始各种收费模式。作为重度使用云笔记的IT程序员,当然会想到搭建一款合适自己的开源云笔记服务,进过对比发现蚂(不)蚁(是)笔(广)记(告)基本满足所有要素,在此特别吐槽印象笔记发展这么多年,连代码高亮、markdown等基础功能都不支持,大部分功能都停留在早期版本,难怪被媒体评为十大最差创业公司。
蚂蚁笔记(Leanote)官方也开始了收费模式,但蚂蚁笔记代码开源,可以自己搭建免费版本。个人特别喜欢的五个功能:
1、支持Markdown
2、代码高亮
3、云笔记转博客
4、历史版本
5、思维导图
使用过程中发现存在多端同步时候会出现记录丢失情况不稳定bug,所以重要内容最好还是在本地多保留一下。
网上也有介绍在pc端搭建云笔记例文,本文介绍的是在我们的Firefly-RK3399 ARM架构搭建,并完美运行方案。
本文中涉及到的语言工具百度百科介绍分别如下:
Golang:
Go语言是谷歌2009发布的第二款开源编程语言。一个高生产力的 Go 语言 Web 框架 。(http://www.gorevel.cn/)
MongoDB:
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。(https://www.mongodb.com/)
Leanote:
蚂蚁笔记,本文所搭建的开源云笔记。(https://www.leanote.com/)
说明: 为统一配置,开始之前,先在Firefly 3399 Ubuntu系统用户目录下创建文件夹Leanote。
起初在Firefly上按PC端安装方式(Firefly勿试),见下虚线部分:
--------------------------------------------------------------
a、打开golang主页,需要带梯子
https://golang.org/
b、下载(17年6月9号最新版本):wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
c、将go压缩文件拷贝到Leanote目录,并解压:
tar -xzvf go1.8.3.linux-amd64.tar.gz
d、创建目录 gopackage,然后添加环境变量
export GOROOT=/home/firefly/Leanote/go
export GOPATH=/home/firefly/Leanote/gopackage
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
终端输入命令使环境变量生效:
source /etc/profile
e、终端输入命令检查 golang 是否安装成功:
go version
若安装成功,则会显示 golang 版本号。
---------------------------------------------------------------
不过很可惜,按以上步骤操作在我们的Firefly上会报错:
firefly@firefly:~/Leanote/go/bin$ go version
bash: /home/firefly/Leanote/go/bin/go: cannot execute binary file: Exec format error
特别说明:导致以上问题是因为cpu架构不一样,rk3399是arm架构。
进入正题以下为我们Firefly ARM架构正式安装Golang步骤:
---------------------------------------------------------------
a、如果起初按上边PC平台安装步骤进行操作,先删除go目录
$ rm -rf ~/Leanote/go
b、安装git工具
$ sudo apt-get install git
c、下载go官方最新源代码
$ cd ~/Leanote
$ git clone https://github.com/golang/go.git
go源代码获取下来可以切换到不同版本分支,例如使用1.8.3版本:
$ cd go
$ git checkout -b go1.8.3
d、添加环境变量配置
$ sudo vim /etc/profile
---
export GOROOT=/home/firefly/Leanote/go
export GOPATH=/home/firefly/Leanote/gopackage
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
---
e、go源代码编译
切换回master分支,进行编译:
$ git checkout master
$ cd src
$ ./make.bash
f、编译go源码过程中遇到问题与解决方案:
问题一:
firefly@firefly:~/Leanote/go/src$ ./make.bash
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /home/firefly/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
解决:
$ sudo apt-get install gccgo
#更新环境配置:
$ sudo vim /etc/profile
------
export GOROOT=/home/firefly/Leanote/go
export GOPATH=/home/firefly/Leanote/gopackage
export GOOS=linux
export GOARCH=arm64
export GOARM=6
export GOROOT_BOOTSTRAP=/usr
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$GOROOT_BOOTSTRAP/bin/go
------
#修改完后需要执行[. /etc/profile]是配置立即生效
#重新编译
$ cd /usr/bin
$ sudo cp go-5 go
$ cd /home/firefly/Leanote/go/src
$ ./make.bash
问题二:
gccgo-6: internal compiler error: Killed (program go1)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gccgo-6/README.Bugs> for instructions.
go tool dist: FAILED: /usr/bin/go install -gcflags=-l -tags=math_big_pure_go -v bootstrap/cmd/...: exit status 2
或
go tool dist: FAILED: /home/firefly/Leanote/go/pkg/tool/linux_arm64/compile -pack -o /tmp/go-tool-dist-630199641/runtime/internal/sys/_go_.a -p runtime/internal/sys /home/firefly/Leanote/go/src/runtime/internal/sys/arch.go /home/firefly/Leanote/go/src/runtime/internal/sys/arch_arm64.go /home/firefly/Leanote/go/src/runtime/internal/sys/intrinsics.go /home/firefly/Leanote/go/src/runtime/internal/sys/stubs.go /home/firefly/Leanote/go/src/runtime/internal/sys/sys.go /home/firefly/Leanote/go/src/runtime/internal/sys/zgoarch_arm64.go /home/firefly/Leanote/go/src/runtime/internal/sys/zgoos_linux.go /home/firefly/Leanote/go/src/runtime/internal/sys/zversion.go: fork/exec /home/firefly/Leanote/go/pkg/tool/linux_arm64/compile: cannot allocate memory
解决方案:
系统内存不足,编译需要关闭其他程序,特别是浏览器
-----------------------------------------------------------------
获取Revel和 Leanote 的源码
请下载 leante-all-master.zip (https://github.com/leanote/leanote-all/archive/master.zip)。
解压:unzip leanote-all-master.zip
解压后,将src文件夹复制到 /home/firefly/Leanote/gopackage/
使用如下命令生成revel二进制命令, 稍后运行Leanote需要用到:
$> go install github.com/revel/cmd/revel
运行后gopackage目录下生成bin/revel文件
(本人尝试发现下载不完整,不推荐)
该方法使用Golang的 go get 来下载包, 这个命令会调用git, 所以必须先安装git。
ubuntu下安装git:
$> sudo apt-get install git-core openssh-server openssh-client
centos下安装git: 请参考: http://www.ccvita.com/370.html
获取Revel和Leanote:
打开终端, 以下命令会下载Revel和Leanote及依赖包, 时间可能会有点久, 请耐心等待。
$> go get github.com/revel/cmd/revel
$> go get github.com/leanote/leanote/app
下载完成后,Leanote的源码在/home/firefly/Leanote/gopackage/src/github.com/leanote/leanote下。
https://www.mongodb.com/download-center#community
针对我们Firefly,注意需要安装 Linux arm64位
mongodb压缩包直接下载地址(17年7月20号前后版本):
https://fastdl.mongodb.org/linux/mongodb-linux-arm64-ubuntu1604-3.4.6.tgz
完成下载后,将MongoDB压缩文件拷贝到Leanote目录解压,并配置环境变量:
$> tar -xzvf mongodb-linux-arm64-ubuntu1604-3.4.6.tgz
$> sudo vim /etc/profile
---
export PATH=$PATH:/home/firefly/Leanote/mongodb-linux-aarch64-ubuntu1604-3.4.6/bin
---
# 使环境变量立即生效
$> source /etc/profile
说明:下载MongDB过程同样是得耐心等待
设置MongDB开机启动:
$> sudo apt-get install sysv-rc-conf -y
$> sudo sysv-rc-conf mongodb on
创建一个用于存放数据库的文件夹:
$ mkdir ~/Leanote/data
#运行数据库(切入后台运行):
$ nohup mongod --dbpath /home/firefly/Leanote/data/ 2>&1 &
#配置开机启动【认证firefly失效】
$ echo "mongod --dbpath /home/firefly/Leanote/data/" >>/etc/rc.local
#初始化Leanote数据库
$ mongorestore -h localhost -d leanote --dir /home/firefly/Leanote/gopackage/src/github.com/leanote/leanote/mongodb_backup/leanote_install_data
如果将云笔记搭建在外网,此步骤特别重要,官方说明:
启动Mongodb是没有权限控制的, 如果你的Leanote服务器暴露在外网, 任何人都可以访问你的Mongodb并修改, 所以这是极其危险的!!!!!!!!!!! 请务必为Mongodb添加用户名和密码并以auth启动。
-------
a、添加一个用户
> mongo
> use leanote
switched to db leanote
> db.createUser({user:"firefly",pwd:"firefly",roles:[{role:"dbOwner",db:"leanote"}]})
Successfully added user: {
"user" : "firefly",
"roles" : [
{
"role" : "dbOwner",
"db" : "leanote"
}
]
}
b、数据库认证、安全模式
db.auth("firefly", "firefly");
c、显示当前所有用户
show users;
d、切换leanote表
use leanote
e、查看初始哟用户
db.users.find()
{ "_id" : ObjectId("5368c1aa99c37b029d000001"), "CreatedTime" : ISODate("2014-05-06T11:04:10.658Z"), "Email" : "admin@leanote.com", "LeftIsMin" : false, "NoteListWidth" : 266, "NotebookWidth" : 160, "Pwd" : "e99a18c428cb38d5f260853678922e03", "Theme" : "simple", "ThirdType" : 0, "ThirdUserId" : "", "ThirdUsername" : "", "Username" : "admin", "UsernameRaw" : "admin", "Verified" : false, "mdEditorWidth" : 0, "Usn" : 200044, "Logo" : "" }
{ "_id" : ObjectId("540817e099c37b583c000001"), "CreatedTime" : ISODate("2014-09-04T07:42:24.064Z"), "Email" : "demo@leanote.com", "LeftIsMin" : false, "NoteListWidth" : 0, "NotebookWidth" : 0, "Pwd" : "84e724109bd30a935846e8302be01bd8", "Theme" : "", "ThirdType" : 0, "ThirdUserId" : "", "ThirdUsername" : "", "Username" : "demo", "UsernameRaw" : "demo", "Verified" : false, "Usn" : 200006 }
>
f、退出数据库
exit;
---------
4.3 问题汇总
问题一:
> db.addUser("root","123");{"_id":ObjectId("53688d1950cc1813efb9564c"),"user":"root","readOnly":false,"pwd":"123"}
2017-06-12T02:35:37.460+0000 E QUERY [thread1] SyntaxError: missing ; before statement @(shell):1:31
解决方案:
mongoDB3创建用户addUser已失效,改用createUser,参考:
http://blog.csdn.net/chen88358323/article/details/50206651
问题二:
MongoDB shell version v3.4.4
connecting to: mongodb://127.0.0.1:27017
2017-06-14T03:04:34.808+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2017-06-14T03:04:34.808+0000 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed
原因:必须先启动Mongod才可以去启动Mongo
配置Leanote app.conf文件,注意红色加粗部分
$ vim ~/Leanote/gopackage/src/github.com/leanote/leanote/conf/app.conf
-----
# 访问端口 可以自定义
http.port=9000
# 访问域名
site.url=http://
# 管理员用户名(默认用户名admin,密码abc123)
adminUsername=admin
# MongoDB 数据库配置
db.host=127.0.0.1
db.port=27017
db.dbname=leanote
db.username=firefly #自定义数据库帐户
db.password=firefly #自定义数据库帐户密码
db.url=mongodb://firefly:firefly@localhost:27017/leanote
# app密钥 必须要自己修改 随便改成任意大小写字母加数字组合
app.secret=firefly_xxx
-----
运行 Leanote 服务端
终端输入命令运行 Leanote 服务端(切入后台运行):
$ nohup revel run github.com/leanote/leanote 2>&1 &
此时打开浏览器输入:http://localhost:9000 ,成功显示Leanote首页。
$ vim /home/firefly/Leanote/run.sh
----
#!/bin/bash
mongod --dbpath=/home/firefly/Leanote/data/ &
revel run github.com/leanote/leanote &
sstr=$(echo -e $str)
echo "$sstr"
----
每次重开机需要运行脚本,启动mongod与leanote
$ . ~/Leanote/run.sh
$ sudo vim /etc/init.d/rc.local
添加
-----
> . /home/firefly/Leanote/run.sh
-----
重启设备自启动失效,后边尝试多种方式均宣告失败,哪位网友解决在Firefly上默认启动sh脚本问题,请指正交流,谢谢。
Firefly上边搭建好Leanote服务后,不同终端设备可以到官网下载安装客户端工具(https://www.leanote.com/)。
目前Leanote支持的客户端有:
a、桌面客户端支持 Window、Linux和Mac系统
b、移动端支持 Android、iOS
c、浏览器
客户端登录界面选取 [登录自建服务器]
服务器地址: http://[服务端ip地址]:9000
在此建议将Firefly设置固定ip ,自行百度解决。
有兴趣朋友还可以将Firefly上搭建的Leanote服务接入公网,配置https提供给外网访问; 或者通过花生壳等动态域名解析软件绑定提供外网访问。
本文完。
附录
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) | Powered by Discuz! X3.1 |