- 記事一覧 >
- ブログ記事
CentOS8にwekanをインストール(ソースからビルド編)
はじめに
【2023年11月更新】
ブログ投稿当時の手順のままの場合、途中でエラーになることが分かりました。そのため、ところどころ書き換えました。
当時の手順を残しつつ修正したため、一旦エラーになり、対応する手順になります。
Wekan Open-Source kanban
をソースコードを使ってインストールしてみました。
Wekanは、OSSのかんばん管理ツールです。社内タスクの管理、見える化に役立ちます。
ソースコードは、Node.js、Meteorフレームワークで構成されています。MITライセンスです。
同じ目的の場合、Trelloが有名ですが、閉じた環境で自力運用したくて、Wekanを選びました。
インストール環境:CentOS Linux release 8.3.2011 (VMware上、インターネット接続あり)
別記事「CentOS8にwekanをインストール(snap編)」では、snapを使い、インストールしましたが、今回は、snapを使わず、dockerでもなく、ソースからインストールしていきます。
github.com/wekan から rebuild-wekan.sh というのを見つけて、この内容を行えばできそうと思い、やってみました。
基本的に rebuild-wekan.sh の内容通りでしたが、今回の環境の場合、CentOSのため、rebuild-wekan.sh の序盤 apt-get でいきなりコケますので、dnf, yumで代替して進めています。
インストール準備
root権限で作業していますので、全てsudoは省略しています。
パッケージを更新します。
# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# dnf -y upgrade
git cloneでソースコードをコピーしたいので、gitをインストールします。
# dnf install git
Is this ok [y/N]: y
※以降基本的にyのため、-yを付けます。
-y は、? [y/N]: のようなときに自動的に y とするオプションです。
dnf = Dandified Yum(ダンディファイド ヤム、略してDNF)
は、RPMベースのパッケージ管理システムを採用しているLinuxディストリビューション用のパッケージマネージャであるYum 3.4のフォークであり、Yumの事実上の後継バージョンです。(Wikipediaより)
Dandified = いきにめかしこんだ、しゃれこんだ
という意味になります。
wekanのソースコードを取得します。
# cd /opt
# git clone https://github.com/wekan/wekan.git
# cd wekan
Wekan依存関係インストール
rebuild-wekan.sh では、sudo apt-get install -y build-essential gcc g++ make git curl wget npm p7zip-full
となっていますので、それに相当することをやっていきます。
開発ツールをまとめてインストールします。
# yum -y groupinstall "Development Tools"
UbuntuやDebianのbuild-essential に相当するようです。
autoconf, automake, gcc-c++ ... 等々、開発用のツールが大量にインストールされます。
※今回は最初にdnfでインストールしましたが、ここでgitも入るようです。
p7zip-fullに関して、rebuild-wekan.shでは、
#curl https://releases.wekan.team/fibers-multi.7z -o fibers-multi.7z #7z x fibers-multi.7z #rm fibers-multi.7z
とコメントアウトされていますので、インストールしませんでした。
npmをインストールします。
# dnf -y install npm
# npm -v
6.14.11
npmは、Node.jsのパッケージ管理システムです。
nodeをインストールします。
# npm -g install n
# n 12.22.1
nは、Node.js(node)のバージョンを管理するツールです。
今回、12.22.1 を指定しています。(rebuild-wekan.shがそうなっているため。)
【2023年11月更新】
ブログ投稿当時の手順のままの場合、12.22.1 です。この後、14.21.4(wekan/node-v14-esm) に更新します。
node-gypをインストールします。
# npm -g install node-gyp
node-gyp(gyp=Generate Your Projects)は、Node.jsのネイティブアドオンモジュールをコンパイルするために、Node.jsで書かれたクロスプラットフォームのコマンドラインツールです。
ネイティブアドオンモジュールとは、Node.js本体を拡張するプログラム(C/C++)となります。
fibersをインストールします。
# mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp
# npm -g install fibers
fibersというのは、Node.jsの非同期処理用のライブラリです。今回は、これがNode.jsのネイティブアドオンモジュールにあたるようです。
Meteorをインストールします。
# curl https://install.meteor.com | bash
https://install.meteor.comの内容は、シェルスクリプトで、ダイレクトに実行しているのですが、ファイル(meteor-bootstrap-${PLATFORM}.tar.gz)をダウンロードするところが有り、タイミングによるかもしれませんが、ここで、かなり時間がかかりました。(1時間くらい)
Wekanのビルド
meteor buildコマンドでWekanをビルドします。
# rm -rf node_modules .meteor/local .build
# chmod u+w *.json
# npm install
# meteor build .build --directory --allow-superuser
rootユーザーの場合、
--allow-superuser
を付けないとエラーになりますので、付けて実行します。
meteor buildは、かなりメモリを消費するようです。メモリ1GBで行ったときは、処理が遅延し、2時間以上かかりました。メモリ4GB程度にすることをお勧めします。
ゴミ掃除します。
# rm -rf .build/bundle/programs/web.browser.legacy
# cd .build/bundle/programs/server
# rm -rf node_modules
# chmod u+w *.json
# npm install
ERROR: npm v10.2.3 is known not to run on Node.js v12.22.1. This version of npm supports the following node versions: `^18.17.0 || >=20.5.0`. You can find the latest version at https://nodejs.org/.
ERROR:
/usr/local/lib/node_modules/npm/lib/utils/exit-handler.js:19
const hasLoadedNpm = npm?.config.loaded
^
SyntaxError: Unexpected token '.'
at wrapSafe (internal/modules/cjs/loader.js:915:16)
at Module._compile (internal/modules/cjs/loader.js:963:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at module.exports (/usr/local/lib/node_modules/npm/lib/cli-entry.js:15:23)
at module.exports (/usr/local/lib/node_modules/npm/lib/es6/validate-engines.js:39:10)
at module.exports (/usr/local/lib/node_modules/npm/lib/cli.js:4:31)
エラーになりました。
【2023年11月更新】
ブログ投稿当時の手順のままの場合、ここでエラーになりました。14.21.4(wekan/node-v14-esm) に更新します。
14.21.4(wekan/node-v14-esm) に更新する理由は、rebuild-wekan.sh の中で同じことを行っているからです。
エラー内容は、
^18.17.0 || >=20.5.0
ですが、v14 でエラーになりませんでした。
node v14 に切り替えます。
# export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download
# n 14.21.4
# node -v
v14.21.4
# cd /opt/wekan/.build/bundle/programs/server
# npm install
ゴミ掃除します。(続き)
# cd ../../../..
# cd .build/bundle
# find . -type d -name '*-garbage*' | xargs rm -rf
# find . -name '*phantom*' | xargs rm -rf
# find . -name '.*.swp' | xargs rm -f
# find . -name '*.swp' | xargs rm -f
ここまでで、rebuild-wekan.sh の内容は終了です。
起動してみます。
# cd /opt/wekan
# ./start-wekan.sh
/opt/wekan/.build/bundle/programs/server/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:218
throw error;
^
エラーになりました。それもそのはず、mongodbをインストールしていませんでした。
mongodbインストール
mongodbのyumリポジトリ情報を追加します。
# vi /etc/yum.repos.d/mongodb-org.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
mongodb(クライアント、サーバー)4.4をインストールします。
# yum install -y mongodb-org
# mongo -version
MongoDB shell version v4.4.5
mongodbを起動します。
# systemctl enable mongod
# systemctl start mongod
もう一度、start-wekan.shでWekanを起動してみます。
# ./start-wekan.sh
{"line":"87","file":"percolate_synced-cron.js","message":"SyncedCron: Scheduled \"notification_cleanup\" next run @Sat Nov 11 2023 00:57:02 GMT-0800 (Pacific Standard Time)","time":{"$date":1699693022952},"level":"info"}
起動しました!
CTRL + C で停止して、systemdに登録します。
wekan起動設定
wekan起動時の環境変数を記述します。
# vi /opt/wekan/.build/bundle/.env
MONGO_URL='mongodb://127.0.0.1:27017/wekan'
ROOT_URL='http://wekan.itccorporation.jp'
MAIL_URL='smtp://user:pass@mailserver.example.com:587'
MAIL_FROM='wekan@itccorporation.jp'
PORT=3001
systemdに登録します。
# vi /etc/systemd/system/wekan.service
MONGO_URL='mongodb://127.0.0.1:27017/wekan'
[Unit]
Description=Wekan Server
After=syslog.target
After=network.target
[Service]
Type=simple
Restart=on-failure
StartLimitInterval=86400
StartLimitBurst=5
RestartSec=10
ExecStart=/usr/local/bin/node /opt/wekan/.build/bundle/main.js
EnvironmentFile=/opt/wekan/.build/bundle/.env
ExecReload=/bin/kill -USR1 $MAINPID
RestartSec=10
WorkingDirectory=/opt/wekan
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=Wekan
[Install]
WantedBy=multi-user.target
root権限起動のため、
User=wekan Group=wekan
のような記述は省略しています。
インターネットへの疎通が無い社内の閉じたLAN限定で運用するため、root起動ですが、通常は、ユーザー権限でセットアップ、起動した方が良いと思います。
# systemctl daemon-reload
# systemctl enable wekan
# systemctl start wekan
ここで起動しませんでした。
【2023年11月更新】
ブログ投稿当時の手順では、問題なく起動していました。
# journalctl -u wekan.service
Nov 11 00:58:32 localhost.localdomain systemd[1]: Started Wekan Server.
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: /opt/wekan/.build/bundle/programs/server/node_modules/fibers/future.js:280
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: throw(ex);
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: ^
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: TypeError [ERR_INVALID_ARG_TYPE] [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at new NodeError (internal/errors.js:322:7)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at validateString (internal/validators.js:124:11)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at Object.join (path.js:1148:7)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at module (models/attachments.js:41:22)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at fileEvaluate (packages/modules-runtime.js:336:7)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at Module.require (packages/modules-runtime.js:238:14)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at Module.moduleLink [as link] (/opt/wekan/.build/bundle/programs/server/npm/node_modules/meteor/modules/node_modules/@meteorjs/reify/lib>
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at module (server/publications/attachments.js:1:24)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at fileEvaluate (packages/modules-runtime.js:336:7)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at Module.require (packages/modules-runtime.js:238:14)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at require (packages/modules-runtime.js:258:21)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at /opt/wekan/.build/bundle/programs/server/app/app.js:189382:1
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at /opt/wekan/.build/bundle/programs/server/boot.js:385:38
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at Array.forEach (<anonymous>)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at /opt/wekan/.build/bundle/programs/server/boot.js:210:21
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at /opt/wekan/.build/bundle/programs/server/boot.js:439:7
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at Function.run (/opt/wekan/.build/bundle/programs/server/profile.js:256:14)
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: at /opt/wekan/.build/bundle/programs/server/boot.js:438:13 {
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: code: 'ERR_INVALID_ARG_TYPE'
Nov 11 00:58:35 localhost.localdomain Wekan[8000]: }
WRITABLE_PATH=/data
環境変数と /data ディレクトリが必要になったようです。
(参考:https://github.com/wekan/charts/issues/14
)
# mkdir /data
# vi /opt/wekan/.build/bundle/.env
WRITABLE_PATH=/data←追加
# reboot
【2023年11月更新】
wekan.service: Start request repeated too quickly.
wekan.service: Failed with result 'exit-code'.
Failed to start Wekan Server.
とエラーになり、
systemctl start wekan
で起動せず、なぜかリブートが必要でした。
ブラウザアクセス
ファイアウォール有りで、外から見る場合、3001ポートを開ける必要があります。
# firewall-cmd --zone=public --add-port=3001/tcp --permanent
# firewall-cmd --reload
http://wekan.itccorporation.jp:3001
へブラウザでアクセス
できました!
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。