Growiをインストールしたときのメモ。
もくじ:
はじめに
別記事でCrowiやらcrowi-plus/Growiのインストール方法をメモしていますが、最近のバージョンで記載が取っ散らかってきた気がするので一旦更新しておきます。
今回も最低限の構成で実行基盤のNode.js(サーバサイドJavaScript)と、バックエンドのMongo DB (ドキュメントDB)とし、動いたやり方をメモしておきます。
面倒だったので、全文検索用のElasticSearchなどオプションの構成は省略しています。
検証した環境は次の通り。
- Ubuntu Server 18.04 (Bionic)
- Growi v3.2.0
- Node.js v8 (npm 6)
- MongoDB 4.0
今回は下記のように、(bash)スクリプトの他に設定用のファイルをサーバにコピーしておきます。
1 2 3 4 5 6 | (working directory) ├─setup_growi.sh ├─mongo ├─growid ├─startgrowi.sh └─growid.conf |
スクリプト(setup_growi.sh)
今回のスクリプトです。echo
で表示させているだけの行は省略可能です。
プロキシ付きの場合はproxy_url
のところにアカウントやアドレス等を書いておきます。
後に説明するように、プロキシ設定が不要な場合は関係するブロックをコメントアウトするなどして削除して下さい。
また、Mongo shellに渡すDB名やアカウントも実際の設定に応じて書き換えて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #!/bin/bash -eu # set proxy ##### proxy_url="http://{PROXY_USER}:{PROXY_PASSWORD}@{PROXY_ADDRESS}:{PROXY_PORT}/" export http_proxy=$proxy_url export https_proxy=$proxy_url shopt -s expand_aliases alias sudo='sudo -E ' ################# echo install prerequisites sudo apt update -y sudo apt install -y build-essential libkrb5-dev ### Mongo DB configuration echo adding apt key curl -L https://www.mongodb.org/static/pgp/server-4.0.asc > keycache.pgp sudo apt-key add keycache.pgp echo update repository echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list echo remove key file rm -f keycache.pgp echo update repository and install mongodb sudo apt update -y sudo apt install mongodb-org -y echo up and enabling mongodb service sudo cp mongod /lib/systemd/system/mongod.service sudo systemctl start mongod sudo systemctl enable mongod sudo systemctl reload mongod ### Node.js configuration echo install default node.js via apt curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt install -y nodejs echo [debug] verify specified version is installed node -v npm -v sudo apt autoremove -y ### Deploy Growi echo configure mongodb user and dedicated database mongo --eval 'db = db.getSiblingDB("{DB_NAME}")' mongo {DB_NAME} --eval 'db.createUser({user: "{DB_USER}", pwd: "{DB_PASSWORD}", roles: [{role: "readWrite", db: "{DB_NAME}"}]})' mongo admin --eval "db.system.users.find()" echo get growi sources and start installation git clone https://github.com/weseek/growi.git sudo mv growi /usr/local/bin/ sudo cp startgrowi.sh /usr/local/bin/growi/startgrowi.sh sudo cp growid /etc/systemd/system/growi.service sudo cp growid.conf /etc/systemd/system/growi.conf echo setting proxy onto yarn and npm... cd /usr/local/bin/growi sudo chmod +x startgrowi.sh # set proxy ##### sudo yarn config set proxy $proxy_url sudo yarn config set https-proxy $proxy_url sudo npm config set proxy $proxy_url sudo npm config set https-proxy $proxy_url ################# sudo yarn sudo npm run build:prod # unset proxy ##### echo delete temporary configurations sudo yarn config delete proxy sudo yarn config delete https-proxy sudo npm config rm proxy sudo npm config rm https-proxy ################# sudo systemctl enable growi echo use 'sudo systemctl [start/enable] growi' to configure service |
使い方は実行権限をつけて実行するだけです。
1 2 3 | $ (スクリプトと同じディレクトリ) $ chmod +x setup_growi.sh $ ./setup_growi.sh |
設定ファイル
Daemonを設定するために各設定ファイルを作成する必要がありますが、面倒なので今回はスクリプト中でシステムのパスへコピーします。
手動で実施する際はvim
やnano
を使って直接記述してしまって構いません。
mongod
Mongo DBをDaemon化するための設定ファイルです。
スクリプト中で/lib/systemd/system/mongod.service
へコピーします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [Unit] Description=MongoDB Database Service Wants=network.target After=network.target [Service] ExecStart=/usr/bin/mongod --config /etc/mongod.conf ExecReload=/bin/kill -HUP $MAINPID Restart=always User=mongodb Group=mongodb StandardOutput=syslog StandardError=syslog [Install] WantedBy=multi-user.target |
growid
GrowiをDaemon化するための設定ファイルです。
スクリプト中で/lib/systemd/system/growi.service
へコピーします。
ハードコーディングしていますが、インストールパスWorkingDirectory
などは環境に合わせて書き換えて下さい。
1 2 3 4 5 6 7 8 9 10 11 | [Unit] Description=GROWI - Enhanced Crowi. After=network.target mongod.service [Service] WorkingDirectory=/usr/local/bin/growi EnvironmentFile=/etc/systemd/system/growi.conf ExecStart=/bin/bash /usr/local/bin/growi/startgrowi.sh [Install] WantedBy=multi-user.target |
startgrowi.sh
サービス起動用のスクリプトです。
インストールスクリプト中でGrowiのインストール先ディレクトリへコピーします。
1 2 3 4 | #!/bin/bash cd /usr/local/bin/growi npm run server:prod |
growid.config
GrowiのDaemon設定を書いたファイルです。
スクリプト中で/etc/systemd/system/growi.conf
へコピーします。
実際の環境に合わせてCrowiの起動パラメータや、Mongo DBの設定を書いておきます。
1 2 3 4 | PORT=3000 MONGO_URI="mongodb://{DB_USER}:{DB_PASSWORD}@{MONGODB_ADDRESS}/{DB_NAME}" PASSWORD_SEED={YOUR_PASSWORD_SEED} FILE_UPLOAD=local |
インストール手順の説明
今回は各手順をスクリプトで書いていますが、ご参考までに内容を説明しておきます。
必要に応じて組み合わせたり、手動で実行することもできると思います。
認証付きプロキシ
(認証付き)プロキシを通すために環境変数http_proxy
を設定しておきます。
また、エイリアスを使うことでsudo
に環境変数を引き継ぎます。
1 2 3 4 5 6 7 | # set proxy ##### proxy_url="http://{PROXY_USER}:{PROXY_PASSWORD}@{PROXY_ADDRESS}:{PROXY_PORT}/" export http_proxy=$proxy_url export https_proxy=$proxy_url shopt -s expand_aliases alias sudo='sudo -E ' ################# |
shopt
の行はスクリプト中でエイリアスを展開するためのものなので、手動で実施する際は不要です。
またGrowiの場合はyarn/npmでビルドしているので、念のため環境によってはこちらにもプロキシを通します。いずれもプロキシのない環境では不要です。
Mongo DBのインストール
MongoDB 4.0を試したところ、公式の方法ではプロキシありの環境でうまく通らず。色々試してもapt-key
でコケる。--keyserver-option
を指定しても通らず。
仕方ないのでキーをcurlでダウンロードして読ませることにしました。
公開鍵をインポートしたのち、apt
でインストールします。
また、設定ファイルをローカルからsystemdのパスへコピーし、systemctl
を使って自動起動に設定しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | echo adding apt key curl -L https://www.mongodb.org/static/pgp/server-4.0.asc > keycache.pgp sudo apt-key add keycache.pgp echo update repository echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list echo remove key file rm -f keycache.pgp echo update repository and install mongodb sudo apt update -y sudo apt install mongodb-org -y echo up and enabling mongodb service sudo cp mongod /lib/systemd/system/mongod.service sudo systemctl start mongod sudo systemctl enable mongod sudo systemctl reload mongod |
Node.jsのインストール
新しめのLTSバージョンを入れるため、8.xを指定してインストールします。明示的にapt
に指定しなくてもnpmは互換のバージョンが入ります。
1 2 3 | echo install default node.js via apt curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt install -y nodejs |
DBの設定
Mongo shellを使ってGrowi用のDBを設定しておきます。
DB名、ユーザー名、パスワードは環境に応じて設定して下さい。
1 2 3 4 | echo configure mongodb user and dedicated database mongo --eval 'db = db.getSiblingDB("{DB_NAME}")' mongo {DB_NAME} --eval 'db.createUser({user: "{DB_USER}", pwd: "{DB_PASSWORD}", roles: [{role: "readWrite", db: "{DB_NAME}"}]})' mongo admin --eval "db.system.users.find()" |
最後のadminデータベースへのアクセスは、ユーザが作成されていることを確認しているコマンドなので必須ではありません。
Growiのインストール
Githubからチェックアウトしてyarn/npmでインストールします。
下記のインストールパス(/usr/local/bin/growi
)は例ですが、変更する場合はDaemon化の設定も修正して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # ソースをダウンロード echo get growi sources and start installation git clone https://github.com/weseek/growi.git sudo mv growi /usr/local/bin/ # 設定ファイルをコピー sudo cp startgrowi.sh /usr/local/bin/growi/startgrowi.sh sudo cp growid /etc/systemd/system/growi.service sudo cp growid.conf /etc/systemd/system/growi.conf # インストール cd /usr/local/bin/growi sudo chmod +x startgrowi.sh sudo yarn sudo npm run build:prod |
Daemonのスタート用スクリプトは上記のように事前に作成したファイルをコピーするか、対象のファイルを編集(新規作成)して定義して下さい。
起動テスト
問題なく構築できている場合はサービスとして設定できます。
1 2 3 | $ sudo systemctl enable growi $ sudo systemctl start growi $ sudo systemctl status growi |
今回は使っていませんが、ファイヤウォールを設定している場合は必要なポートを許可しておいて下さい。
ブラウザでhttp://(host address):3000/
にアクセスするとインストールページが表示され、管理者アカウントの設定画面になるはずです。
おわり。