自建雲筆記–螞蟻筆記Leanote
GitHub地址:https://github.com/leanote/leanote
1. 介紹
Leanote, 不只是筆記!
特性
- 高效筆記:Leanote有易操作的界面,包含一款富文本編輯器和Markdown編輯器,讓您的筆記記錄更輕鬆和高效。對高階用戶,我們還提供
Vim
和Emacs
編輯模式,助推你的寫作速度更上層樓。 - 知識管理: Leanote 靈活而強大的“筆記本-筆記-標籤”系統,讓它成為你個人知識管理的利器。
- 分享: 你可以通過Leanote同好友分享知識、想法和經歷, 邀請好友加入你的筆記簿,通過雲端交流信息。
- 協作: Leanote協助你與同事之間相互協作,激盪新思路,隨時隨地頭腦風暴。
- 博客: Leanote也可以作為你的個人博客, 把你的知識傳播的更遠!
其它特性
- 支持Markdown編輯
- 寫作模式
Vim
及Emacs
編輯模式- 支持PDF導出
- 支持批量操作
- 博客自定義主題, 實現高度定制化
2. 為什麼我們要創建Leanote?
我們都曾是Evernote
的忠實粉絲,一直以來Evernote
都是我們日常知識管理的有效工具。於是我們決定重新創造一款工具,提供Evernote
所能提供的功能,同時彌補Evernote
的不足,比如:
- 功能更強的文本編輯器:
Evernote
的編輯器不能滿足我們的需求,不能實現文檔導航、不能貼代碼(格式會亂掉,作為程序員,代碼是我們的基本需求啊),圖片不能縮放等。 Evernote
不支持所有人都喜愛的markdown語法,於是我們為Leanote配備了一款可以實時渲染的markdown編輯器。- 如果你是一名開發者,覺得手指懷念
Vim
或Emacs
了,那麼我們還提供給你Vim
和Emacs
寫作模式,配合markdown的格式編輯,寫作的時候再也不用去碰鼠標了。 - 知識積累和知識分享同樣重要,因此大家都有自己的筆記賬號和社交賬號。但為什麼這兩者不能合二為一呢? Leanote 做到了將二者無縫銜接。
- 一套完整的、全平台覆蓋的軟件套裝,包括了web、桌面、安卓、IOS設備,而且全部開源!
- 還有…
3. 獲取Leanote
Leanote雲筆記產品包括: Leanote Web & Server(即本倉庫), 桌面客戶端, IOS, android. 4端全部開源!
如果想試用我們的產品,歡迎在https://leanote.com上註冊, Leanote團隊為你提供穩定可靠的服務。擔心服務廠商如何處理你的個人數據嗎?你可以下載Leanote安裝在自己的服務器上,通過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%的原因是數據庫的問題, 請檢查:
- 數據庫是否啟動了?
- 如果數據庫是以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
- 請先備份leanote之前的目錄, 以防萬一
- 將下載好的替換之前的leanote
- 將之前版本下的
- /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內容正常後,可以試一下使用命令wkhtmltopdf http://baidu.com baidu.pdf看一下中文頁面是否能正常導出。若導出後中文內容為空白則是linux系統缺少中文字體。可以從windwows機器的windwows/fonts目錄拷貝幾個中文字體文件(微軟雅黑之類的)到linux系統的/usr/share/fonts目錄,然後再去測試下導出百度頁面。
不能導出PDF?
如果導出PDF沒有出現下載文件的提示, 證明導出出錯, 請按照以下步驟檢查:
- wkhtmltopdf安裝是否成功?請通過
wkhtmltopdf http://baidu.com baidu.pdf
檢查 - wkhtmltopdf的路徑在Leanote是否正確設置? 請複制你設置的路徑到控制台導出試試, 比如
/usr/bin/wkhtmltopdf http://baidu.com baidu.pdf
- 導出還有問題?請檢查你的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