CodiMDをネイティブインストールしてみた
CodiMDとは
Markdownで編集できるオンラインコラボレーションノートです。
- 複数人で同時編集可能
- リアルタイムプレビュー
- ブラウザで開いてすぐに編集可能
https://github.com/hackmdio/codimd
利用目的
社内で議事録の作成と確認が早くできるようにしたい。 クローズドネットワークに構築。
前提条件
トラブル発生時のために、仕組みを理解しておきたいので、ネイティブインストールをしてみる。 個人的な学習も目的にあるので、動作の仕組みを把握することを優先しセキュリティは後回し。 正直、導入するだけならDocker版が楽だと思う。
導入環境
- Windows 10 ProのHyper-V上に仮想マシンを導入して検証
- 仮想マシンの構成(検証用なのでリソース少なめ)
- 仮想CPU:2コア
- メモリ :4GB
- ディスク:20GB
- ネットワークインターネットへは接続可能(構築時のみ)
- ソフトウェア構成
- OS:CentOS 8.0
- Database:PostgreSQL
導入手順
OSインストール
CentOS8のISOメディア(CentOS-8.1.1911-x86_64-dvd1.iso)からインストール ソフトウェアの選択は「最小限のインストール」を選択。
前提パッケージのインストール
# dnf -y install nodejs # dnf -y install git python2 make gcc-c++ bzip2 tar <IPAフォントインストール用> # dnf -y install wget unzip fontconfig
(任意)導入されたNode.js、npmのバージョンチェック
# node --version v10.16.3 # npm -v 6.9.0
npmモジュール導入
# npm install -g node-gyp
yarnの導入
# curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo # dnf -y install yarn # yarn --version 1.21.1 # yarn install
PostgreSQLのセットアップ
PostgreSQLのインストール
# dnf -y install postgresql-server
PostgreSQLの初期セットアップ
# postgresql-setup initdb
postgresql.confを編集(データベースパラメータを設定)
cd /var/lib/pgsql/data ls -l postgresql* cp postgresql.conf postgresql.conf.org ls -l postgresql* echo "listen_addresses = '*'" >> /var/lib/pgsql/data/postgresql.conf diff -u postgresql.conf.org postgresql.conf
pg_hba.confをバックアップ
cd /var/lib/pgsql/data ls -l pg_hba* cp pg_hba.conf pg_hba.conf.org ls -l pg_hba*
pg_hba.confに追記(クライアント認証を設定)
# PostgreSQL Client Authentication Configuration File" # ===================================================" local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust
postgresqlサービス再起動&自動起動設定
# service postgresql restart # systemctl enable postgresql
PostgreSQLにCodiMD用のユーザとDBを作成する
PostgreSQLへスーパーユーザで接続
# psql -U postgres
CodiMD用のユーザーを作成する。(パスワードは変更すること)
postgres=# CREATE ROLE role_codimd WITH LOGIN PASSWORD 'Password'; CREATE ROLE postgres=# \du ロール一覧 ロール名 | 属性 | メンバー -------------+----------------------------------------------------------------------+---------- postgres | スーパーユーザ, ロールを作成できる, DBを作成できる, レプリケーション | {} role_codimd | | {}
CodiMD用のデータベースを作成する。前提条件として、キャラクターセットがutf8と指定があるので注意。
postgres=# create database codimd owner role_codimd encoding 'UTF8'; CREATE DATABASE postgres=# \l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 -----------+-------------+------------------+-------------+-------------------+----------------------- codimd | role_codimd | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 行)
Postgreコンソールを終了する
postgres=# \q
CodiMD導入
CodiMDのソースをクローンする
# cd /opt # git clone https://github.com/hackmdio/codimd.git
必要なnpmパッケージをインストールする
# cd codimd # npm install package.json
セットアップスクリプトを実行する
# cd codimd # bin/setup (中略) Edit the following config file to setup CodiMD server and client. Read more info at https://github.com/hackmdio/codimd#configuration-files * config.json -- CodiMD config * .sequelizerc -- db config
CodiMDの設定ファイルを編集する(config.json) developmentモードで検証するので、developmentセクションを編集。
# cp config.json.example config.json # vi config.json ("db"セクションを編集する。config.json.exampleは書式が間違っているので注意) { "test": { "db": { "dialect": "sqlite", "storage": ":memory:" }, "linkifyHeaderStyle": "gfm" }, "development": { "domain":"mydomain", "protocolUseSSL": false, "useSSL": false, "hsts": { "enable": false }, "sessionSecret": "session cookie", "loglevel": "debug", "host": "hostname", "port": 3000, "urlAddPort": true, "dbURL": "postgres://role_codimd:Password@localhost:5432/codimd", "allowFreeURL": true, "linkifyHeaderStyle": "gfm", "useCDN": false, "imageUploadType": "filesystem" }, "production": { "domain":"mydomain", "loglevel": "info", "protocolUseSSL": false, "useSSL": false, "hsts": { "enable": false }, "sessionSecret": "session cookie", "host": "hostname", "port": 3000, "urlAddPort": true, "dbURL": "postgres://role_codimd:Password@localhost:5432/codimd", "allowFreeURL": true, "useCDN": false, "linkifyHeaderStyle": "gfm", "imageUploadType": "filesystem" } }
DB設定ファイルを編集する(.sequelizerc)
# vi .sequelizerc ('url': の行をDBに合わせて編集する) # cat .sequelizerc const path = require('path') const config = require('./lib/config') module.exports = { config: path.resolve('config.json'), 'migrations-path': path.resolve('lib', 'migrations'), 'models-path': path.resolve('lib', 'models'), url: process.env['postgres://role_codimd:Password@localhost:5432/codimd'] || config.dbURL }
DBのマイグレーションを実行する。
# node_modules/.bin/sequelize db:migrate
アセットファイルのビルドをする。
# npm run build
アプリケーション用ポートの解放
本来はwebサーバを前段に置きたいが、今回は動作検証を優先して直接接続。
# firewall-cmd --zone=public --add-port=3000/tcp --permanent # firewall-cmd --reload
CodiMDを起動
サービス化はせずに、とりあえず起動して確認する。developmentモードで起動コマンドを実行。
# NODE_ENV='development' node app.js
動作確認
ブラウザで、ポート番号3000にアクセスして、画面表示が返ってくれば成功。
http://(IPアドレス):3000/
(オプション)IPAフォントのインストール
PDFを生成した時に日本語が表示されないので、IPAフォントを導入する。 このURL ( http://ipafont.ipa.go.jp/ipaexfont/download.html ) から探す
wget https://ipafont.ipa.go.jp/IPAexfont/IPAexfont00401.zip -O IPAexfont00401.zip unzip IPAexfont00401.zip ls -l IPAexfont00401/*ttf
ttfをフォントディレクトリに移動
mkdir -p /usr/share/fonts/japanese/TrueType mv -i IPAexfont00301/*ttf /usr/share/fonts/japanese/TrueType/ ls -l /usr/share/fonts/japanese/TrueType/
サーバに反映
# fc-cache -fv
確認
# fc-list | grep IPA /usr/share/fonts/japanese/TrueType/ipaexg.ttf: IPAexゴシック,IPAexGothic:style=Regular /usr/share/fonts/japanese/TrueType/ipaexm.ttf: IPAex明朝,IPAexMincho:style=Regular
残課題
- [解決]CND(cdnjs.cloudflare.com)から取得しているファイルがある。(ネットワークから切り離したら動かない気がする)
- 設定ファイル(config.json)に、『"useCDN": false,』を追記するとCDN不使用。(一部外部ファイルがあるけど)
- node.js起動時の環境で、CMD_USECDN='false' を指定しても、CDN不使用となった。
- [解決]画像がデフォルトで、imgurへアップロードされるので、サーバ内に保存する設定に変更
- 設定ファイル(config.json)に。 『"imageUploadType": "filesystem",』を追記。
- アプリ(CodiMD)の自動起動
- node app.js起動のデーモン化(forever start app.jsとしてもいい)
- productionモードで動かす場合は、設定ファイルを(config.json)環境に合わせてもう少し編集する必要がある。
- パフォーマンスチューニング
- 性能情報の取得をしてみる。(Node.jsのパフォーマンスチューニングを個人的にやってみたい)
- webサーバの設置
- 前段にNginxを配置する。
躓いたところ
- セットアップスクリプト(setup/bin)の前提条件が分からず、途中でERRORとなった。
- bzip2とnode-gypの事前導入(CentOSのデスクトップ版だと、導入済パッケージが多く進んだが、Minimalだと不足があった。)
- yarnも事前導入が必要だった(環境によっては入っているかも)
参考にしたサイト
- GitHub - hackmdio/codimd: CodiMD (https://github.com/hackmdio/codimd#heroku-deployment )
- HackMD + Nginxで社内ナレッジをイイ感じに整理する (https://atotok.co.jp/labo/eeea24f937be3be52882bf535a4e3cf7 )
- IPAフォントのインストールの参考サイト(https://qiita.com/metheglin/items/bb88aa25eae250bfa2a2 )