HackMD + Nginxで社内ナレッジをイイ感じに整理する
導入背景
弊社ではBacklogを使ってプロジェクト管理をしています。
そのBacklogではWikiや課題に対するコメントにTipsとか問題解決策とか様々な社内ナレッジが蓄積されています。
蓄積されてはいます…が…それが散在していて中々探しづらい、または似たような記事があったりするため、整理しようと思いたちました。
どのツールを使用するか?
整理しようとは思いましたが、どんな方法で、どんなツールを使用するか色々と悩みました。
が、以下のようなメリットから HackMD を使用することにしました。
- リアルタイムプレビュー
- URLから共同編集ができる
- スライドモード(社内会議で使える)
- Tag管理
- パッと開いてすぐ書ける(←これ大事)
凄くシンプルなTOP画面です。
新しく作る・削除する・検索する、とやりたいことがコンパクトにまとまっています。
インストール方法
基本的に公式の README に沿ってインストールします。
- Node.js と npm をインストールする
sudo yum install -y nodejs npm
- MySQLでHackMD用のユーザとDBを作成する
- ソースをクローンする
git clone https://github.com/hackmdio/hackmd.git
- セットアップ用のスクリプトを実行する
bin/setup
- 設定ファイルを編集する(config.json)
(後述)
- DB設定ファイルを編集する(.sequelizerc)
'url': 'mysql://USERNAME:PASSWORD@localhost:3306/DBNAME'
- DBのマイグレーションを実行する
node_modules/.bin/sequelize db:migrate
- アセットファイルをビルドする
npm run build
config.json
urlPath には公開したいサブディレクトリを指定します。
imageUploadType は imgur などを指定できるようですが今回はローカルなので、 filesystem を指定します。
ユーザの認証方法なんかも指定できます。今回はメール認証で。
他にもfacebook, twitter, github, gitlab, dropbox, google... などなどが指定できます。お好みで。
defaultPermission では記事を書いたときの初期権限を設定できます。
今回は社内ナレッジのため、LIMITEDにしています。
freely ... 誰でも閲覧編集できる
editable ... サインインしているユーザのみ編集できる、していないユーザは閲覧のみ
limited ... サインインしているユーザのみ編集できる、していないユーザは閲覧もできない
locked ... 記事のオーナーのみ編集できる、していないユーザは閲覧のみ
protected ... 記事のオーナーのみ編集できる、していないユーザは閲覧もできない
private ... 記事のオーナーのみ閲覧編集できる
{
"production": {
"domain": "xxx.example.jp",
"debug": false,
"port": 8989,
"urlPath": "md",
"imageUploadType": "filesystem",
"email": true,
"defaultPermission": "limited",
"db": {
"username": "username",
"password": "password",
"database": "db_name",
"host": "localhost",
"port": "3306",
"dialect": "mysql"
}
}
}
Nginx の設定
Basic認証をかけるので、 auth_basic で指定します。
upstream hackmd {
server 127.0.0.1:8989;
}
server {
listen 80;
server_name xxx.example.jp;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
location /md {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
rewrite /md/(.*) /$1 break;
proxy_pass http://hackmd;
proxy_redirect default;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
HackMDの起動
foreverコマンドを使ってnode.jsスクリプトをデーモン化します。
NODE_ENV='production' forever start app.js
動作確認
ここまで設定すると xxx.example.jp/md でHackMDにアクセスできると思います。
(エラーが出なければ…ですが)
意外とサーバスペックを要求するのである程度リソースに余裕のあるサーバが好ましそうです。
それではこのへんで。