オンラインなオフィススイートONLYOFFICEをdocker-composeでセットアップする

# TL;DR

* Webサービス型オフィススイート[ONLYOFFICE](https://www.onlyoffice.com)をオンプレミス環境にセットアップする方法を紹介します
    * [ONLYOFFICE用のdocker-compose.yml](https://github.com/myoshimi/onlyoffice-docker-compose)を作ったので，これを使います
    * Google Document, Spreadsheet, Presentationのようなものを，オンプレで実現します
    * 複数ユーザが共同編集できます
    * https接続して通信の安全性を向上させます
        * Let's Encryptで発行してもらった証明書を組み込みます
* 各種ドキュメントファイル（プレゼンテーション，スライド，ドキュメント）の閲覧・編集ができます
    * <img src="https://qiita-image-store.s3.amazonaws.com/0/309617/d8ee43ca-a759-6c8c-ccba-d0da79a3f796.jpeg" width=50%>
* カレンダーの共有やメッセージングなどの機能も付いています
    * <img src="https://qiita-image-store.s3.amazonaws.com/0/309617/a5a471b1-79a1-cff4-92ff-833bfd683053.jpeg" width=50%>

# ONLYOFFICE概要

* [ONLYOFFICE](https://www.onlyoffice.com)は，オンラインで複数ユーザが同時編集可能なオフィススイートです
* doc{x}, ppt{x}, xls{x}ファイルを共有し，編集することができます

# ONLYOFFICE構造

* 2つのサーバと1つのデータベースで運用します
    * Community Server
        * ユーザがアクセスするフロントエンドです
        * ファイル共有，カレンダー，メッセージング，メールなど，いくつかのアプリケーションが付属しています
    * Document Server
        * オフィスファイルの閲覧，編集に関するサービスを提供します
    * Mariadb (MySQL5.5互換版)
* これらのサーバをdocker-compose.ymlでコンテナとして稼働させます

![component2.jpg](https://qiita-image-store.s3.amazonaws.com/0/309617/5236c045-f5c4-e016-3949-b7702aee8675.jpeg)

# 使い方

* [Let's Encrypt](https://letsencrypt.org/)などで発行してもらったfullchain.pem,privkey.pemをコピーして，```docker-compose up```します

```
git clone https://github.com/myoshimi/onlyoffice-docker-compose
cd onlyoffice-docker-compose
cp <Directory Path>/fullchain.pem ./keys/
cp <Directory Path>/privkey.pem ./keys/
docker-compose up -d
```

* ```https://<server-domain>:3443/``` にアクセスする
    * <img src="https://qiita-image-store.s3.amazonaws.com/0/309617/9ca7326c-2e20-50d6-9aaf-5e40a3fef69f.jpeg" width=50%>
    * 管理者パスワードやタイムゾーン，メールアドレスなどを入力して[Continue]をクリックすると，ONLYOFFICEの管理者画面に進めます

* ```https://<CommunityServer-domain>:4443/``` は，ドキュメントサーバでユーザからのアクセスで処理をするわけではないので，稼働状況が表示されるだけです

    * <img src="https://qiita-image-store.s3.amazonaws.com/0/309617/12bf5ad9-cc8d-c80b-ab04-04239a3e4f01.jpeg" width=50%>
    * <img src="https://qiita-image-store.s3.amazonaws.com/0/309617/a5a471b1-79a1-cff4-92ff-833bfd683053.jpeg" width=50%>

# docker-compose.ymlについて

## アクセスポート

* 3443/TCP, 4443/TCPを，それぞれCommunity Server, Document Serverへのアクセスポートにしています
    * 他のポートを使用したい場合は，該当行のポート番号を書き換えてください

## 不揮発化ボリューム

[ONLYOFFICE用のdocker-compose.yml](https://github.com/myoshimi/onlyoffice-docker-compose)では，docker-compose.ymlがあるローカルディレクトリに不揮発領域を作成し，マウントします．必要があれば，記述を修正して使用してください

* Community Server用
    * /var/log/onlyoffice : Comunity Serverのログが格納されるディレクトリ
    * /var/www/onlyoffice/Data : データが格納されるディレクトリ
* Document Server用
    * /var/log/onlyoffice : Document Serverのログが格納されるディレクトリ
* Database用
    * /var/lib/mysql : MariaDBのデータが格納されるディレクトリ

[ONLYOFFICE用のdocker-compose.yml](https://github.com/myoshimi/onlyoffice-docker-compose)では，別途，https用の鍵ファイルを，読み出し専用でマウントしています．

# 今後の課題

* 適切に前段階でリバースプロキシすることで，ホスト名ベースで各サーバに接続する
    * 参考([Using Document Server behind the proxy](https://helpcenter.onlyoffice.com/server/document/document-server-proxy.aspx))にヒントがあります
* イントラネット内での運用であれば，httpsでなくても良い場合があるので，その場合の対応
* NextCloud連携

# 参考

* [ONLYOFFICE](https://www.onlyoffice.com)
* [github.com/myoshimi/onlyoffice-docker-compose](https://github.com/myoshimi/onlyoffice-docker-compose)
* [Using Document Server behind the proxy](https://helpcenter.onlyoffice.com/server/document/document-server-proxy.aspx)
![uploading-0]()