この記事は、2021年8月28日(土)に行われたオープンデベロッパーズカンファレンス(ODC)2021 Onlineでのセミナーを記事化したものです。

はじめに

前回の記事では、Collabora Onlineの概要や使うメリットを説明しました。それに続いて今回は、Collabora Onlineの構築方法や、開発コミュニティの体制などを紹介します。

システム要件

Collabora Onlineのシステム要件は条件によって違ってくるようですが、Nextcloudのビルトインを使うケースでは以下のようになっています。(出典)

  • OS:Linux x86-64またはARM64(aarch64)
  • CPU:2コア
  • メモリ:1GB + 100MB/ユーザ
  • ネットワーク帯域:100kbps/ユーザ
  • ディスクスペース:350MB
  • Nextcloud 19のCollabora Online app 3.7.0以降

CODEの構築方法はいくつかある

CODE(Collabora Online Development Edition)の構築方法は結構いろいろあるんですが、基本的にはどれもお試し用途です。本格運用になってくるとまたちょっと変わってくるんですが、お試しの方法としては以下があります。

  • Nextcloudのビルトインであるrichdocumentscode (これが一番簡単)
  • Linuxパッケージ(deb,rpm)
  • Dockerイメージ
  • Nextcloud+CODE入りの仮想イメージ (構築が面倒で手元で試したいだけなら、これを使ってもいいと思います)
  • ソースコードをビルド (一番大変です。手順としてはそんなに大変でもないのですが、LibreOfficeの部分をビルドするのに非常に時間がかかります)

詳しくは公式サイトのドキュメントを見てください。

Nextcloudのビルトインを使う方法

これが一番簡単ですが、その代わりAppimage形式で固められていて、中身をいじったりスケールさせるなどは難しそうな感じです。Nextcloudのインストール時に、デフォルトで入れますか?みたいなのがあって、そのときにチェックが入っていると最初からインストールされます。あとからNextcloud appストアでプラグインを選んで入れることもできます。ただ、ストアが重いことがあるので、プラグインをダウンロードして、下記のコマンドでインストールするのがおすすめです。

sudo -u wwwrun php -d memory_limit=512M ./occ app:install richdocumentscode

上記コマンドのうち、wwwrunは実行するユーザ名なのでお使いの環境に合わせてください。そして、./occというのがNextcloudのコマンドです。PATHが通っていないときはNextcloudのディレクトリに移動して、上記コマンドでインストールします。

なお、Nextcloudをsnapでインストールした場合には、以下のコマンドでインストールします。

sudo nextcloud.occ app:install richdocumentscode

ビルトインについての詳細は下記URLをご覧ください。

上記はNextcloudをインストールしているときの画面ですが、もうこのときに推奨アプリとして一緒に入っちゃってます。Collabora関連のものは2つ表示されていて、「Collabora Online」と書いてある方はCODEへの接続用のプラグイン、「Collabora Online – Built-in CODE Server」がCODE本体です。ちなみにこれをインストールするときは、ファイルが大きいからか時間がかかります。

インストールしたら、Nextcloudの管理画面で設定箇所が1か所あります。管理ユーザでログインして、管理メニューの中の「Collabora Online」の項目で、「ビルトインCODEを使う」を選んでもらうと使えるようになります。で、その上の「Collaboraオンラインサーバーに接続可能です」のところが緑色のチェックマークになっていればうまくつながっています。うまくつながっていないときは×マークになります。本当に設定不要なので非常に楽です。

ただし、私が試した限りでは、NextcloudのSnap版とビルトインサーバーを使ったときにうまくいかないことがありました。特に問題なのはサーバの日本語フォントが認識されずにCODEで豆腐になることです。以前はその構成で問題なかったんで、手元の環境が変わってしまったのか、バージョンの問題なのか、ちょっとまだ切り分けられていません。Nextcloudを手動でインストールして、それからビルトインのプラグインを入れたら、そちらはちゃんと動きました。

それから、NextcloudのSnap版のMySQLがすごくメモリを食っているように見えて、それがなぜなのかちょっとわからなかったんですが、メモリにあまり優しくないかもしれません。Oracle CloudとかでこのSnap版を試したときもうまくいかなかったんですが、それはもしかしたらメモリが1GBしかなかったんで足りなくなっていた可能性があります。手元の環境はもっとメモリが潤沢なので、他の理由だと思います。

Linuxパッケージで構築する

パッケージインストール

次にやってみたのがLinuxパッケージで構築する方法です。対応ディストリビューションは公式ウェブサイトに載っていますが以下の通りです。

Debian 9, Debian 10, Ubuntu 16.04, Ubuntu 18.04, Ubuntu 20.04, CentOS 7 (at least 7.2), CentOS 8, SLE 15.x and openSUSE Leap 15.x.

基本的にdebかrpmのパッケージが出ているので、リポジトリを追加してから、debであれば以下のコマンドでインストールします。

$ sudo apt update && sudo apt install loolwsd code-brand

詳細はこちらのWebサイトに書いてあるので見てください。
https://www.collaboraoffice.com/code/linux-packages/

パッケージインストール後の設定

そして、インストールした後に若干の設定が必要になります。手順を以下に示します。

loolconfigコマンドでloolwsd.xmlを編集

$ sudo loolconfig set ssl.enable false (sslなしで試す場合)
$ sudo loolconfig set ssl.termination false (リバースプロキシでsslなしで試す場合)
$ sudo loolconfig set storage.wopi.host nextcloud.example.com
(Nextcloudからのアクセス許可。nextcloud.example.comのところは自身のNextcloudサーバを指定)
$ sudo loolconfig set-admin-password

loolwsd.xmlは自分で編集してもいいんですが、面倒くさいのでコマンドで編集する方法を紹介しています。上記の例は試用なのでSSLをfalseにしていますが、本来はfalseじゃなくてtrueにして、SSLをオンにしてください。それから、忘れそうになるんですが大事なのがNextcloudとの通信の設定です。Nextcloudからこちらに読みに来るのを許可する設定があって、それをしてないとうまくいかない可能性があります。そして最後にadminのパスワードを設定します。

リバースプロキシ設定

$ sudo apt install apache2
$ sudo vi /etc/apache2/sites-available/collabora.conf (バーチャルホストの設定)
$ sudo a2enmod proxy proxy_wstunnel proxy_http
$ sudo a2ensite collabora.conf
$ sudo systemctl restart apache2

次にリバースプロキシの設定です。これは普通のリバースプロキシです。ApacheでもNginxでも動作すると書いてありました(上記の例はApacheです)。バーチャルホストを設定して、Apacheを再起動します。バーチャルホストの設定については以下のドキュメントを参照してください。
https://www.collaboraoffice.com/code/apache-reverse-proxy/

SSLの設定

これはLet’s Encryptなどを使う場合の説明が先ほどのWebサイトに載っているので、必要な方はそちらを参照してください。

起動

$ sudo systemctl start loolwsd
$ sudo journalctl -u loolwsd (ログチェック)

そして起動します。ログはjournalctlで取ることができます。

Nextcloudの管理画面での設定

この方法でインストールしたときも、やはりNextcloudの管理画面での設定が必要です。Nextcloudの管理画面に行って、Collabora OnlineのサーバのURLを入れてください(下図参照)。下図ではローカル環境で試したのでlocalhostになっていますが、通常はサーバのURLを設定します。ポートはデフォルトの番号であれば入れなくて大丈夫です。逆にポート番号を入れたらおかしくなったというようなことがフォーラムに書いてあったので、デフォルト以外の番号を使うときはちょっと気をつけた方がいいかもしれません。それから、この例ではSSLを使っていないので証明書の検証を外していますが、本番環境では証明書の検証をした方がいいと思います。

で、先ほどもお見せした管理画面です。URLは以下です。管理画面にアクセスするときはポート番号を付けておかないとなぜかおかしな動作になるので(理由は不明)、ポート番号を付けてアクセスした方がいいです。

http://CODEサーバドメイン:9980/loleaflet/dist/admin/admin.html
(SSLを有効にしているときは冒頭がhttps)

Dockerで構築する

3つ目がDockerで構築する方法です。うまくいくとすごく簡単なんですが、私の環境では残念ながらまだうまくいってなくて、なぜだろうと考えているところです。フォーラムを調べてみると、動かないぞという人が何人かいて、私の設定ミスなのか、そもそも今のDockerイメージが壊れているのか、ちょっとわからないです。

そんな状況ではありますが、作業手順を紹介しておきます。

Dockerイメージを起動

$ docker pull collabora/code
$ docker run -t -d -p 127.0.0.1:9980:9980 -e "username=admin" -e "password=S3cRet" --restart always collabora/code

DockerイメージはDockerhubで公開されています。これをdocker pullしてdocker runすればいいだけです。

設定ファイルをコピーして編集

$ docker cp コンテナイメージ名:/etc/loolwsd/loolwsd.xml loolwsd.xml
$ vim loolwsd.xml (編集)
$ chmod 644 loolwsd.xml (パーミッションを変更((コピーした時にスクリプトが走るが、開けずにハングしていたので))
$ docker cp loolwsd.xml コンテナイメージ名:/etc/loolwsd/loolwsd.xml

設定を変更したいので、Dockerのコンテナからloolwsd.xmlをコピーして、編集して書き戻します。編集内容はLinuxパッケージで構築する場合と同じです。このとき、loolwsd.xmlがデフォルトのパーミッションだとエラーになるので、手動で変更します。

パーミッションの変更は、コンテナのシェルで実行する手もありそうです。

$ docker exec -i -t コンテナイメージ名 bash
$ chmod 644 /etc/loolwsd/loolwsd.xml

リバースプロキシ、SSLの設定、Nextcloud管理画面で設定

このあたりは他の構築方法と同じです。

手元で試したときは、NextCloudの管理画面まではうまくいけたんですが、ファイルをダブルクリックしてCODEが起動しかけたところで止まってしまいました。

スケーリング

本格運用するときにはスケーリングが必要になってきます。1台のサーバを数十人とか数百人で使っていると大変なことになるので、そういうときはHAProxyを使うのがよいと言われています。これについてはオープンソースカンファレンス2020 Osakaでサンタトゥラさんがいろいろ調べて発表しているので、その資料を見てください。


Kubernetesでの構築

Kubernetesで構築しているケースもあるらしく、Collaboraのサイトで紹介されています。私はまだ試していませんが、hlemとkubectlを使っていて、設定ファイルなどはGitHubに置いてあるようなので、そのまま試せるのではないかと思っています。
https://www.collaboraoffice.com/online/how-to-easily-deploy-collabora-online-on-your-kubernetes-setup/

Collabora Onlineの課題は?

Collabora Onlineの課題は何か?っていうのを考えていたんですが、1つはホスティングを自分でするか、もしくはベンダーを探さなきゃいけないっていう問題があります。セキュリティ設定とか自分でやるんだったらちゃんとやっておかないとこわいですし、サイジングとかも注意が必要かと思います。オンプレでなくクラウドでやるならサイジングはそこまでシビアではないでしょう。ファイル管理サーバとCollabora Onlineのサーバは分離できるので、HAProxyを使えばスケールそのものは問題ないかと思っています。

2つ目の課題は、Collabora Onlineは概ねトラブルなく使えるんですが、ときどきバグに遭遇することがあって、新しいバージョンだとバグってることもあるので、安定したバージョンで運用するのがいいのかなと思いました。やっぱり、大規模運用だったらサポート契約しないとちょっとこわいかなっていう印象があります。Collabora Onlineは割とアグレッシブに開発されていて、ときどきバグを出しちゃうって感じです。対応も早いですが、ちょっと、そういう気構えみたいなのはいるかなと思います。

3つ目の課題として、LibreOfficeのフル機能は当然ながらカバーできていません。そもそも、そんなに高機能なものはいらないと思いますが、使える機能は徐々に増えてきてはいます。しかし、バックエンド側が実装されていても、ダイアログが表示できないと操作ができないので、そういったことでまだ使えない機能があります。とはいえ、今の機能でも結構すごくて、例えば縦書きができるクラウドオフィスソフトウェアって、他にないんじゃないかなと思います。ちょっと調べきれてないんで、もしかしたらあるかもしれませんが、私が知る限りではないので、割とすごいかもしれないと思っています。

開発体制とコミュニティの状況

最後に開発体制の話です。開発については、一応Collaboraの会社が中心にはなっていますが、コミュニティで開発しています。コミッターはほとんどがCollaboraの人ですが、それ以外の人もちらほらコードをコミットしてます。ソースコードとバグ報告に関してはGithubでやっています。翻訳はWeblateのホスティングを使ってて、LibreOfficeと同じシステムなので、慣れてる人は簡単かなと思います。公式フォーラムもあって、これもLibreOfficeが最近乗り換えたシステムと同じのを使ってるので、そんなに違和感ないかなと思います。それぞれのURLを示しておきます。

イベント情報

LibreOffice Conference 2021が9月23-25日にあります。これは毎年やってるイベントで、去年に引き続きバーチャルでやります。この中でもCollabora勢がたぶんオンライン発表とかすると思うんで、情報をキャッチアップできると思います。

あとは、Collabora Onlineに特化したカンファレンス「COOL Days」が9月30日-10月1日に開かれるというのを見つけました。9月30日が開発の話で、10月1日がビジネスの話ということなので、興味ある人は参加してみるといいかなと思います。

まとめ

Collabora Onlineはオープンソースのプラウドのオフィススイートです。利点は共同編集や同時編集ができることと、データ主権というものを尊重した使い方ができます。あと、デスクトップ版と互換性があるのはすごく便利です。

構築方法はいっぱいありますが、Nextcloudを手動インストールしてLinuxパッケージを入れるのが一番確実でした。Nextcloudのビルトインは、融通は効きませんがすごくお手軽です。スケールももちろんできます。

Collabora Onlineは活発に開発されているので、状況をぜひウォッチしておいてください。使うときはちょっとバグに注意しましょう。そして、興味ある人はぜひコミュニティに参加してみてください。

以上です。ありがとうございました。