1. 記事一覧 >
  2. ブログ記事
category logo

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 へブラウザでアクセス


ブラウザでアクセス


できました!

loading...