さくらのクラウドでnextcloud + LibreOffice Onlineを構築する

OSC 2020で個人的に気になっていた、LibreOffice Onlineを構築した時の記録です。

NextcloudとLibreOffice Onlineを連携させることで、GoogleドキュメントやGoogleスプレッドシートのような感じでオフィルツールを使うことができます。

https://speakerdeck.com/naruoga/202004-osconline-libreoffice-goodbye-desktop
こちらのおがさわらさんの資料を元に構築方法を探ってみました。


個人的にさくらのクラウドをよく使うので、こちらを参考にスクリプトを作ってみました。
https://github.com/smehrbrodt/nextcloud-libreoffice-online

さくらのクラウドにはアプリケーションの構築などを簡単にするスタートアップスクリプトという機能があり、Nextcloudのスタートアップスクリプトがすでに存在しているのでそれに付け足す形で作りました。
### Nextcloudのスタートアップスクリプト
https://github.com/sakura-internet/cloud-startupscripts/blob/master/publicscript/nextcloud/nextcloud.sh

### ↑をベースにしたNextcloud + LibreOffice Onlineスタートアップスクリプト
https://gist.github.com/tar-xzvff/7bfc707e0d7d8ee12e9651f8e4591d94

## 構築手順
1. こちらからスタートアップスクリプトをコピーする。
https://gist.github.com/tar-xzvff/7bfc707e0d7d8ee12e9651f8e4591d94

2. こちらを参考していただき、スタートアップスクリプトを登録する。
https://manual.sakura.ad.jp/cloud/startup-script/about.html#id7

3. 追加したスタートアップスクリプトを指定してサーバを作成する。
https://manual.sakura.ad.jp/cloud/server/create-delete.html#create-normal-mode

### サーバ作成時のポイント

1. サーバプランは `2コア / 4GB` を選択します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/04726cf0-5172-fb17-be1e-12299bed0ac6.png)

2. アーカイブは `CentOS 7.7 (1908) 64bit` を選択します。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/6dd259be-c2f8-8322-94cd-13acec000a2a.png)
3. スタートアップスクリプトを選択後 `管理者ユーザ名`  `管理者パスワード` を入力し `LibreOffice Onlineを有効にする` にチェックを入れます。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/4fdb9210-efb2-fd59-9499-9160cae12d36.png)
4. サーバの作成とNextcloudとLibreOffice Onlineの構築が始まります。10分ほど待ちます。
5. 構築完了後 `http://サーバのIPアドレス/nextcloud/` にアクセスし先ほど設定した認証情報でログインします。
ログイン後このような形でNextcloudからLibreOfficeを使うことができます。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/06a69936-269a-9fb1-8ba9-c46960f82ac6.png)


## 元のスクリプトに追加した主な部分
docker-composeで動かすので、動作に必要な環境構築と初期設定などをしています。

```bash
# LibreOffice Onlineを有効にする
if [[ -n "$LIBREOFFICE_ONLINE_ENABLED" ]]; then
# dockerとdocker-composeのインストール
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager -y --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io

systemctl start docker
systemctl enable docker

curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

# LibreOffice Onlineを展開
cd ~/
git clone https://github.com/smehrbrodt/nextcloud-libreoffice-online.git
cd nextcloud-libreoffice-online/libreoffice-online/
cat << EOF > /root/nextcloud-libreoffice-online/libreoffice-online/.env
NEXTCLOUD_DOMAIN=${GLOBAL_IP}
LO_ONLINE_USERNAME=@@@nc_username@@@
LO_ONLINE_PASSWORD=@@@nc_password@@@
LO_ONLINE_EXTRA_PARAMS=--o:ssl.enable=false
EOF

docker-compose up -d

# Collabora Onlineのインストール設定
sudo -u apache php72 /var/www/html/nextcloud/occ app:install richdocuments
# LibreOffice Onlineのアドレスを指定
sudo -u apache php72 /var/www/html/nextcloud/occ config:app:set richdocuments wopi_url --value=http:\/\/${GLOBAL_IP}:9980
# SSLを使わないため証明書の検証を無効にする
sudo -u apache php72 /var/www/html/nextcloud/occ config:app:set richdocuments disable_certificate_verification --value=yes
sudo -u apache php72 /var/www/html/nextcloud/occ app:enable richdocuments

# Firewall の設定
firewall-cmd --permanent --add-port=9980/tcp
fi
```

## このスクリプトの注意点
- 元々のNextcloudのスタートアップスクリプトがhttpのみの対応でしたので、LibreOffice Online側もSSLを使わない形になっています。
- 2コア / 4GBで今回はサーバを作成していますが、１人で使う分には問題ありませんでした。複数人で使う場合などは、よりスペックの良いプランを選択されることをお勧めします。
- LibreOffice Onlineの本番環境で動作させる際のチェックポイントなどを調べてみたがよく分からず設定が不十分かもしれません。もしこのスクリプトを使われる際には自己責任でお願いいたします。

## 感想
LibreOffice Online側がコンテナで動作するので非常に構築が楽でした。パッケージなどでインストールする方法が特に見つからず、本番で動かす時もこれで大丈夫なのかなと気になりました。
あと個人的にLibreOfficeのキーバインドが分からず、HHKBでの英/かな切り替え時に `Command + Space` で文字が消えてしまうことが多々ありました。 キーバインドについて調べてみようかと思います。