可以使用Markdown编写的Wiki – Crowi
乌鸦
在尋找像簡單編寫Markdown般的Wiki類型時,我找到了一個看起來不錯的選擇。
Crowi – 基于Wiki的简单而强大的沟通工具 (github)
我写这篇文章时使用的Crowi版本是1.4。
看起来与最新版本的安装方法有所不同。
-
- Markdownがリアルタイムプレビューで書ける
-
- 投稿ユーザが設定できる
-
- nodejsとmongodbで動いて軽量
- 動作も軽快
安装
环境
-
- Ubuntu 16.04.1 LTS (VirtualBox)
-
- MongoDB 3.2.10
-
- Node.js 4.6.1
- Crowi 1.4
准备
因为Crowi在GitHub上进行管理,所以需要安装git。
为了编译Node.js模块,需要安装build-essential和python。
另外,由于需要libkrb5-dev来支持kerberos模块,也需要提前安装。
sudo apt-get update
sudo apt-get install build-essential python git libkrb5-dev
蒙古数据库
按照这里写的进行,将MongoDB Community Edition安装在Ubuntu上。
# 1 Import the public key used by the package management system
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
# 2 Create a list file for MongoDB
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
# 3 Reload local package database
sudo apt-get update
# 4 Install the MongoDB packages.
sudo apt-get install mongodb-org
顺便说一句,在这里使用的apt-key如果存在代理,将无法正常工作。需要使用–keyserver-option指定代理。当在Ubuntu下使用认证代理下的apt-key时。
进一步说,在Ubuntu 16.04中,由于采用了systemd,因此如果不做任何更改,mongodb可能无法启动。在这种情况下,只需自己编写mongodb.service文件,就可以确保其正常运行。关于在Ubuntu 16.04上安装MongoDB的方法。
完成安装后,请创建一个适用于Crowi的用户。
请随意输入用户名、密码和数据库名。
稍后将用于Crowi的设置。
$ mongo
> use DBNAME
switched to db DBNAME
> db.createUser({user: "USERNAME", pwd: "PASSWORD", roles: [{role: "readWrite", db: "DBNAME"}]})
Successfully added user: {
"user" : "USERNAME",
"roles" : [
{
"role" : "readWrite",
"db" : "DBNAME"
}
]
}
我会确认一下用户是否正常运作。
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "DBNAME.USERNAME", "user" : "USERNAME", "db" : "DBNAME", ~中略~ "roles" : [ { "role" : "readWrite", "db" : "DBNAME" } ] }
> exit
Node.js
Crowi需要Node.js 4.x版本,但是在trusty的apt-get中只能安装到旧的0.10.x版本。使用apt search命令查询会得到如下结果。
apt search nodejs | grep nodejs
WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.
unobtrusive notification system for nodejs
nodejs/trusty 0.10.25~dfsg2-2ubuntu1 amd64
nodejs-dbg/trusty 0.10.25~dfsg2-2ubuntu1 amd64
nodejs-dev/trusty 0.10.25~dfsg2-2ubuntu1 amd64
nodejs-legacy/trusty 0.10.25~dfsg2-2ubuntu1 all
添加存储库并安装
这里有一种方法可以在Ubuntu上添加软件仓库并安装4.x版本的Node.js。您可以使用curl或wget来实现。
wget -qO- https://deb.nodesource.com/setup_4.x | sudo -E bash -
在这里再次运行“apt search nodejs”,就可以确认4.x版本的Node.js已经存在
apt search nodejs | grep nodejs
WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.
unobtrusive notification system for nodejs
nodejs/unknown 4.4.7-1nodesource1~trusty1 amd64
nodejs-dbg/unknown 4.4.7-1nodesource1~trusty1 amd64
nodejs-dev/trusty 0.10.25~dfsg2-2ubuntu1 amd64
nodejs-legacy/trusty 0.10.25~dfsg2-2ubuntu1 all
只需要安装即可。
sudo apt-get install nodejs
已经成功安装了4.x版本的Node.js。
nodejs -v
v4.6.1
乌鸦
只需使用git clone和npm install,但因为需要相当长的时间,所以请等待。
git clone --depth 1 https://github.com/crowi/crowi.git
cd crowi
npm install
顺便提一下,在代理环境下无法执行npm install。
只要安装了libkrb5-dev,并且进行了以下错误处理,就不会遇到下面的错误了。
在建构 Kerberos 时遇到错误
make: 进入目录 `/usr/lib/node_modules/kerberos/build’
CXX(target) Release/obj.target/kerberos/lib/kerberos.o
从 ../lib/kerberos.cc:1:0 中引用文件:
../lib/kerberos.h:5:27: 致命错误: gssapi/gssapi.h: 没有那个文件或目录
#include <gssapi/gssapi.h>据说只需安装 libkrb5-dev
sudo apt-get install libkrb5-dev
安装 libkrb5-dev 后,可以正常安装 Kerberos
sudo npm install -g kerberos
kerberos@0.0.21 /usr/lib/node_modules/kerberos
└── nan@2.3.5
当我再次对Crowi进行npm install时,它顺利地执行了。
npm install
/
> crowi@1.4.0 postinstall /home/USERNAME/crowi
> gulp
[02:12:57] Using gulpfile ~/crowi/gulpfile.js
[02:12:57] Starting 'css:sass'...
[02:12:57] Starting 'js:del'...
[02:12:57] Finished 'js:del' after 106 ms
[02:12:57] Starting 'js:concat'...
[02:12:57] Finished 'js:concat' after 178 ms
[02:12:57] Starting 'webpack'...
[02:13:03] Finished 'css:sass' after 6.04 s
[02:13:03] Starting 'css:concat'...
[02:15:26] Finished 'css:concat' after 2.38 min
[02:15:26] Starting 'css:min'...
[02:15:39] Finished 'css:min' after 13 s
[02:16:31] Version: webpack 1.13.1
Asset Size Chunks Chunk Names
admin.js 611 bytes 0 [emitted] admin
app.js 687 kB 1 [emitted] app
crowi.js 591 kB 2 [emitted] crowi
form.js 6.34 kB 3 [emitted] form
presentation.js 52.6 kB 4 [emitted] presentation
[02:16:32] Finished 'webpack' after 3.57 min
[02:16:32] Starting 'js:min'...
[02:16:32] Finished 'js:min' after 222 ms
[02:16:32] Starting 'default'...
[02:16:32] Finished 'default' after 33 μs
inline-attachment@2.0.2 node_modules/inline-attachment
执行
通过环境变量进行配置,并最后执行node app.js命令启动Crowi。
PASSWORD_SEED=somesecretstring MONGO_URI=mongodb://USERNAME:PASSWORD@localhost/DBNAME node app.js
只要将MONGO_URI设置为最低限度的设定,其他内容将使用默认值并正常运行。
如果PASSWORD_SEED没有设定值,将自动生成。
详细信息请参阅Crowi的GitHub。
ただ,PASSWORD_SEEDはユーザ登録時のパスワードからハッシュを生成するためのシード値ですので,
これを変えると既存ユーザがログインできなくなってしまうので注意が必要です
crowiディレクトリ直下にこんなスクリプトを書いて置いておけば簡単かも
export PASSWORD_SEED=somesecretstring
export MONGO_URI=mongodb://USERNAME:PASSWORD@localhost/DBNAME
node app.js
只需执行即可。
chmod +x crowi.sh
./crowi.sh
デフォルトポートは3000です
http://localhost:3000/でcrowiにアクセスできます
詳しくはCrowiのgithubに書いてあります
使用systemd实现自动启动
可以使用systemd自动启动crowi
参考以下网站:
在CentOS7上安装Crowi
使用systemd将自定义命令快速转换为服务
使systemd能够读取用户的环境变量
首先,将crowi目录移动到适当的位置。
sudo mv crowi /usr/local/bin/
请在下一步中为systemd创建一个定义文件
请使用绝对路径指定。
[Unit]
Description=Crowi - The Simple & Powerful Communication Tool Based on Wiki
After=network.target mongod.service
[Service]
WorkingDirectory=/usr/local/bin/crowi
EnvironmentFile=/etc/systemd/system/crowi.conf
ExecStart=/usr/bin/node app.js
[Install]
WantedBy=multi-user.target
Descriptionこの.serviceファイルの説明Afterネットワーク起動後、mongodbの起動後に開始WorkingDirectoryコマンドを実行する場所(作業ディレクトリ)EnvironmentFile環境変数を読み込むファイルExecStart実行するコマンド
这是用于设置环境变量的EnvironmentFile。
PORT=3000
MONGO_URI="mongodb://USERNAME:PASSWORD@localhost/DBNAME"
PASSWORD_SEED=somesecretstring
FILE_UPLOAD=local
当文件准备好后,将确认是否被识别。
sudo systemctl list-unit-files --type=service |grep crowi
crowi.service disabled
看起来没问题。
通过启用 enable 来自动启动,并通过 start 开始。
sudo systemctl enable crowi
sudo systemctl start crowi
再起動して自動起動できているか確認します
$ sudo systemctl list-unit-files --type=service |grep crowi
crowi.service enabled
$ systemctl status crowi.service
● crowi.service - Crowi - The Simple & Powerful Communication Tool Based on Wiki
Loaded: loaded (/etc/systemd/system/crowi.service; enabled; vendor preset: enabled)
Active: active (running) since 火 2016-07-19 13:37:27 JST; 13min ago
Main PID: 769 (node)
Tasks: 9
Memory: 87.0M
CPU: 1.477s
CGroup: /system.slice/crowi.service
└─769 /usr/bin/node app.js
7月 19 13:37:27 ubuntuVM systemd[1]: Started Crowi - The Simple & Powerful Communication Tool Based on Wiki.
7月 19 13:37:51 ubuntuVM node[769]: [development] Express server listening on port 3000
看起来启动正确,最后请检查是否能从浏览器访问,并完成。