Firefly开源社区

[玩转Firefly-RK3399]搭建云笔记Leanote服务端

279

积分

10

威望

9

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
279
QQ
发表于 2017-7-24 15:22:35     
本帖最后由 ZZP 于 2017-7-24 15:32 编辑

目录简介

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语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。  

revel

一个高生产力的 Go 语言 Web 框架 。(http://www.gorevel.cn/


MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。(https://www.mongodb.com/


Leanote

蚂蚁笔记,本文所搭建的开源云笔记。(https://www.leanote.com/



说明: 为统一配置,开始之前,先在Firefly 3399 Ubuntu系统用户目录下创建文件夹Leanote。




1、安装Golang环境

起初在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


解决方案:


系统内存不足,编译需要关闭其他程序,特别是浏览器

-----------------------------------------------------------------



2、下载 revel Web 框架和 Leanote 源码

获取Revel和 Leanote 的源码



2.1 方法1 (推荐方法)

请下载 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文件


2.2 方法2

(本人尝试发现下载不完整,不推荐)

该方法使用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下。




3、安装 MongoDB 数据3.1 MongoDB下载路径

https://www.mongodb.com/download-center#community


针对我们Firefly,注意需要安装 Linux arm64位

mongoDB.png



mongodb压缩包直接下载地址(17年7月20号前后版本):

https://fastdl.mongodb.org/linux/mongodb-linux-arm64-ubuntu1604-3.4.6.tgz



3.2 MongoDB解压和配置

完成下载后,将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



4、初始化数据库
4.1 初始化Leanote数据库

创建一个用于存放数据库的文件夹:

$ 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



4.2 创建Leanote数据库用户

如果将云笔记搭建在外网,此步骤特别重要,官方说明:

启动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




5、配置 Leanote 服务端

配置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

-----




6、运行 Leanote 服务端

运行 Leanote 服务端
终端输入命令运行 Leanote 服务端(切入后台运行):
$ nohup revel run github.com/leanote/leanote 2>&1 &


此时打开浏览器输入:http://localhost:9000 ,成功显示Leanote首页。

leanote.png




7、配置开机启动
7.1 添加run.sh脚本启动mongod和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


7.2 配置开机启动(Firefly失效)

$ sudo vim /etc/init.d/rc.local

添加

-----

> .  /home/firefly/Leanote/run.sh

-----


重启设备自启动失效,后边尝试多种方式均宣告失败,哪位网友解决在Firefly上默认启动sh脚本问题,请指正交流,谢谢。





8、下载客户端

Firefly上边搭建好Leanote服务后,不同终端设备可以到官网下载安装客户端工具(https://www.leanote.com/)。

目前Leanote支持的客户端有:

a、桌面客户端支持 Window、Linux和Mac系统
b、移动端支持 Android、iOS

c、浏览器


客户端登录界面选取 [登录自建服务器]
服务器地址: http://[服务端ip地址]:9000


在此建议将Firefly设置固定ip ,自行百度解决。


有兴趣朋友还可以将Firefly上搭建的Leanote服务接入公网,配置https提供给外网访问; 或者通过花生壳等动态域名解析软件绑定提供外网访问。


本文完。



附录

Leanote 官方教程




回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表