正文

自建极客范的云笔记–蚂蚁笔记Leanote

自建极客范的云笔记–蚂蚁笔记Leanote

官网:https://leanote.com/

GitHub地址:https://github.com/leanote/leanote

自建极客范的云笔记–蚂蚁笔记Leanote自建极客范的云笔记–蚂蚁笔记Leanote

本文目录

  • 1. 1. 介绍
  • 2. 2. 为什么我们要创建Leanote?
  • 3. 3. 获取Leanote
  • 4. no reachable server
  • 5. 安装Leanote后运行出错
  • 6. Leanote运行成功, 但不能登录
  • 7. 修改Leanote运行端口
  • 8. 如何绑定域名?
  • 9. 为mongodb数据库添加用户
  • 10. 为Leanote指定超级管理员帐户(admin用户)
  • 11. 为Leanote配置https
  • 12. Import of github.com/revel/revel/modules/testrunner failed
  • 13. 开发版如何更新leanote?
  • 14. 二进制版如何更新leanote?
  • 15. 为什么需要 site.url
  • 16. 客户端不能同步图片
  • 17. 导出PDF配置 wkhtmltopdf
  • 18. 不能通过IP访问

1. 介绍

Leanote, 不只是笔记!

特性

  • 高效笔记:Leanote 有易操作的界面, 包含一款富文本编辑器和Markdown编辑器,让您的笔记记录更轻松和高效。对高阶用户,我们还提供VimEmacs 编辑模式,助推你的写作速度更上层楼。
  • 知识管理: Leanote 灵活而强大的“笔记本-笔记-标签”系统,让它成为你个人知识管理的利器。
  • 分享: 你可以通过Leanote同好友分享知识、想法和经历, 邀请好友加入你的笔记簿,通过云端交流信息。
  • 协作: Leanote协助你与同事之间相互协作,激荡新思路,随时随地头脑风暴。
  • 博客: Leanote也可以作为你的个人博客, 把你的知识传播的更远!

其它特性

  • 支持Markdown编辑
  • 写作模式
  • VimEmacs 编辑模式
  • 支持PDF导出
  • 支持批量操作
  • 博客自定义主题, 实现高度定制化

2. 为什么我们要创建Leanote?

我们都曾是Evernote的忠实粉丝, 一直以来Evernote都是我们日常知识管理的有效工具。于是我们决定重新创造一款工具,提供Evernote所能提供的功能,同时弥补Evernote的不足,比如:

  • 功能更强的文本编辑器:Evernote的编辑器不能满足我们的需求, 不能实现文档导航、不能贴代码(格式会乱掉, 作为程序员, 代码是我们的基本需求啊), 图片不能缩放等。
  • Evernote 不支持所有人都喜爱的markdown语法,于是我们为Leanote配备了一款可以实时渲染的markdown编辑器。
  • 如果你是一名开发者,觉得手指怀念VimEmacs 了,那么我们还提供给你VimEmacs 写作模式,配合markdown的格式编辑,写作的时候再也不用去碰鼠标了。
  • 知识积累和知识分享同样重要,因此大家都有自己的笔记账号和社交账号。但为什么这两者不能合二为一呢? Leanote 做到了将二者无缝衔接。
  • 一套完整的、全平台覆盖的软件套装,包括了web、桌面、安卓、IOS设备,而且全部开源!
  • 还有…

3. 获取Leanote

Leanote云笔记产品包括: Leanote Web & Server(即本仓库), 桌面客户端, IOS, android. 4端全部开源!

如果想试用我们的产品,欢迎在 https://leanote.com 上注册, Leanote团队为你提供稳定可靠的服务。 担心服务厂商如何处理你的个人数据吗?你可以下载Leanote安装在自己的服务器上, 通过Leanote客户端连接与自建服务同步数据。

这里详细整理了Leanote二进版和Leanote开发版的安装教程, 请移步至:

 

以下为常见问题处理方式:

no reachable server

请确保数据库是否启动, 如果确定已启动 可以 尝试将 conf/app.conf db.host=localhost 改为db.host=127.0.0.1

修改后请重新启动Leanote.

安装Leanote后运行出错

如果出现以下问题:

Go to /@tests to run the tests.
panic: auth fails

goroutine 1 [running]:
github.com/leanote/leanote/app/db.Init()
	/home/life/gopackage1/src/github.com/leanote/leanote/app/db/Mgo.go:64 +0x356

Leanote运行出错90%的原因是数据库的问题, 请检查:

  1. 数据库是否启动了?
  2. 如果数据库是以auth方式启动的, 请检查conf/app.conf是否配置了正确的数据库用户名和密码

注意, 默认的conf/app.conf 数据库配置如下:

# mongdb
db.host=localhost
db.port=27017
db.dbname=leanote # required
db.username= # if not exists, please leave it blank
db.password= # if not exists, please leave it blank
# or you can set the mongdb url for more complex needs the format is:
# mongodb://myuser:mypass@localhost:40001,otherhost:40001/mydb
# db.url=mongodb://root:root123@localhost:27017/leanote
db.urlEnv=${MONGODB_URL} # set url from env

即数据库名为leanote, 用户名和密码为空, 请检查是否正确.

Leanote运行成功, 但不能登录

原因: 数据库已停止运行, 请重新启动数据库和Leanote.

如果数据库在运行, 请重新启动Leanote.

修改Leanote运行端口

比如想以8080端口启动.

修改conf/app.conf:

http.port=8080
site.url=http://localhost:8080

请重启Leanote, 使用http://localhost:8080访问.

如何绑定域名?

比如想绑定域名a.com到你运行Leanote服务器, 你需要将leanote以80端口运行, 请修改conf/app.conf的如下配置:

http.port=80
site.url=http://a.com

然后启动Leanote. 当然你还需要将a.com绑定ip到Leanote服务器.

如果服务器上已有其它程序运行了80端口, 怎么办呢? 请google或百度下 “使用nginx分发请求到不同端口".

为mongodb数据库添加用户

像mysql一样有root用户, mongodb初始是没有用户的, 这样很不安全, 所以要为leanote数据库新建一个用户来连接leanote数据库(注意, 并不是为leanote的表users里新建用户, 而是新建一个连接leanote数据库的用户, 类似mysql的root用户).

mognodb v2与v3创建用户命令有所不同

mongodb v2 创建用户如下:

# 首先切换到leanote数据库下
> use leanote;
# 添加一个用户root, 密码是abc123
> db.addUser("root", "abc123");
{
	"_id" : ObjectId("53688d1950cc1813efb9564c"),
	"user" : "root",
	"readOnly" : false,
	"pwd" : "e014bfea4a9c3c27ab34e50bd1ef0955"
}
# 测试下是否正确
> db.auth("root", "abc123");
1 # 返回1表示正确

mongodb v3 创建用户如下:

# 首先切换到leanote数据库下
> use leanote;
# 添加一个用户root, 密码是abc123
> db.createUser({
    user: 'root',
    pwd: 'abc123',
    roles: [{role: 'dbOwner', db: 'leanote'}]
});
# 测试下是否正确
> db.auth("root", "abc123");
1 # 返回1表示正确

用户添加好后重新运行下mongodb, 并开启权限验证. 在mongod的终端按ctrl+c即可退出mongodb.

启动mongodb:

$> mongod --dbpath /home/user1/data --auth

还要修改配置文件 : 修改 leanote/conf/app.conf:

db.host=localhost
db.port=27017
db.dbname=leanote # required
db.username=root # if not exists, please leave blank
db.password=abc123 # if not exists, please leave blank

为Leanote指定超级管理员帐户(admin用户)

Leanote默认超级管理员为admin, 且一旦不小心修改了username则不能改回. 此时可修改配置文件app.conf, 比如指定用户life为超级管理员, 修改或/添加一行:

adminUsername=life

为Leanote配置https

1. 生成SSL证书

可以在网上买一个, 或者自己做一个. 这里有一个shell脚本可以自动生成证书: (cert.sh)

#!/bin/sh

# create self-signed server certificate:

read -p "Enter your domain [www.example.com]: " DOMAIN

echo "Create server key..."

openssl genrsa -des3 -out $DOMAIN.key 1024

echo "Create server certificate signing request..."

SUBJECT="/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=$DOMAIN"

openssl req -new -subj $SUBJECT -key $DOMAIN.key -out $DOMAIN.csr

echo "Remove password..."

mv $DOMAIN.key $DOMAIN.origin.key
openssl rsa -in $DOMAIN.origin.key -out $DOMAIN.key

echo "Sign SSL certificate..."

openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt

假设得到了两个文件: a.com.crt, a.com.key

2. 配置Nginx

假设Leanote运行的端口是9000, 域名为a.com, 那么nginx.conf可以配置如下:

# 本配置只有http部分, 不全
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    
    upstream  a.com  {
        server   localhost:9000;
    }

    # http
    server
    {
        listen  80;
        server_name  a.com;
        
        # 强制https
        # 如果不需要, 请注释这一行rewrite
        rewrite ^/(.*) https://jp_linode2.com/$1 permanent;
        
        location / {
            proxy_pass        http://a.com;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }
    
    # https
    server
    {
        listen  443 ssl;
        server_name  a.com;
        ssl_certificate     /root/a.com.crt; # 修改路径, 到a.com.crt, 下同
        ssl_certificate_key /root/a.com.key;
        location / {
            proxy_pass        http://a.com;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }
}

Import of github.com/revel/revel/modules/testrunner failed

1.0版之前(beta版)会遇到这个问题, 1.0采用revel-0.12, 所以不会遇到这个问题.

Failed to load module.  Import of github.com/revel/revel/modules/testrunner failed: cannot find package "github.com/revel/revel/modules/testrunner" in any of:
	/Users/life/app/go1.4/src/github.com/revel/revel/modules/testrunner (from $GOROOT)
	/Users/life/Documents/Go/package_base/src/github.com/revel/revel/modules/testrunner (from $GOPATH)

revel 0.12 版配置不一样, 请修改app.conf

module.static=github.com/revel/modules/static		 	
module.testrunner=github.com/revel/modules/testrunner	 

开发版如何更新leanote?

可以使用git pull得到leanote上最新版本, 如果你已修改了leanote, 可以先fetch(推荐使用fetch的方式)最新到本地, 再与本地的合并. 如:

git fetch origin master:tmp # 得到远程最新版本, 别名为tmp
git diff tmp # 查看tmp与本地的不同
git merge tmp # 合并到本地

如果不能用git方式同步源码, 请下载 https://github.com/leanote/leanote

  1. 请先备份leanote之前的目录, 以防万一
  2. 将下载好的替换之前的leanote
  3. 将之前版本下的
    • /public/upload/ 目录
    • /files/ 目录
    • /conf/app.conf 移到新版下相应位置.

重启Leanote.

如果运行有问题, 如 “cannot find package “github.com/PuerkitoBio/goquery" in any of:…" 类似的信息, 原因是Leanote增加了新的依赖, 此时可以使用go get命令下载新包, 如下载"github.com/PuerkitoBio/goquery"

go get github.com/PuerkitoBio/goquery

或下载依赖包与源码全集: https://github.com/leanote/leanote-all

二进制版如何更新leanote?

请下载最新的leanote二进制版, 将之前版本下的

  • /public/upload/ 目录
  • /files/ 目录
  • /conf/app.conf

移到新版下相应位置.

在新版下运行leanote.

为什么需要 site.url

site.url是外网可访问的域名, 比如你可以配置为http://a.com, 但在运行leanote可以设端口为9000, 再通过Nginx转发到9000. 如果外网地址是80端口, 请不要填写http://a.com:80, 而只要为http://a.com即可!

site.url用于生成笔记内的图片/附件路径.

若使用nginx转发到https方式部署leanote,site.url需要配置成https://a.com ;否则在博客页面输出的css和js是以http链接形式展现在html中,高版本浏览器比如firefox会直接block掉这部分内容,从而页面显示不正常。更多信息请查看https://github.com/leanote/leanote/issues/228

客户端不能同步图片

请确保conf/app.conf的site.url和在客户端登录时填写的自建服务地址相同!

导出PDF配置 wkhtmltopdf

Leanote的PDF导出使用了wkhtmltopdf, 所以需要先安装wkhtmltopdf, 然后以管理员身份登录Leanote管理后台配置wkhtmltopdf路径.

下文讲解如何安装wkhtmltopdf.

源码编译安装

源码编译安装不会出现依赖的问题,wkhtmltopdf提供的编译脚本已经包含了相关依赖库的下载和安装过程,具体编译请查看wkhtmltopdf的源码包中的install.md文件。

二进制版本wkhtmltopdf安装 [推荐]

下载wkhtmltopdf,选择对应的版本,下载下来后通过rpm -ivh命令进行安装。

然后就会看到缺少一些依赖,所以要安装一些依赖库。

安装wkhtmltopdf的依赖包:

yum install -y fontconfig libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi libpng

安装完后再通过rpm -ivh命令安装wkhtmltopdf。

测试wkhtmltopdf

使用命令wkhtmltopdf http://google.com google.pdf,若没有问题则安装ok。若提示缺少库无法运行,则可以通过ldd wkhtmltopdf,查看缺少什么依赖库,然后再安装缺少的依赖库。

可能部分机器会遇到libpng提示缺少的问题,原因是直接安装的版本过高,某些版本wkhtmltopdf预编译版本依赖的libpng版本要低一点,通过yum provides *libpng12.so.0*,找到对应的版本,然后在进行安装yum install libpng12-1.2.50-6.el7.x86_64

中文问题

在测试了将google页面导出成pdf,并检查pdf内容正常后,可以试一下使用命令wkhtmltopdfhttp://baidu.com baidu.pdf看一下中文页面是否能正常导出。若导出后中文内容为空白则是linux系统缺少中文字体。可以从windwows机器的windwows/fonts目录拷贝几个中文字体文件(微软雅黑之类的)到linux系统的/usr/share/fonts目录,然后再去测试下导出百度页面。

不能导出PDF?

如果导出PDF没有出现下载文件的提示, 证明导出出错, 请按照以下步骤检查:

  1. wkhtmltopdf安装是否成功? 请通过 wkhtmltopdf http://baidu.com baidu.pdf 检查
  2. wkhtmltopdf的路径在Leanote是否正确设置? 请复制你设置的路径到控制台导出试试, 比如/usr/bin/wkhtmltopdf http://baidu.com baidu.pdf
  3. 导出还有问题? 请检查你的conf/app.conf中设置的site.url是否可以访问, Leanote导出PDF时会访问笔记链接, 这个链接的前缀就是 site.url

不能通过IP访问

2.6版默认绑定localhost, 不能通过ip访问Leanote,

请修改 app.conf

http.addr=0.0.0.0 # listen on all ip addresses

重启Leanote