NextcloudのOnlyOfficeとECSのコンテナを統合する方法

今回は、**Nextcloud**の**OnlyOffice**を**Alibaba Cloud** Elastic Compute Service (ECS)インスタンスのコンテナと連携させる方法を見ていきます。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/nextcloud-onlyoffice-and-spreed-webrtc-with-docker-in-your-ecs_594917)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

By Colince Azeye, Alibaba Cloud Tech Share Author. Tech Shareは、クラウドコミュニティ内で技術的な知識やベストプラクティスを共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

今回の記事では、Alibaba Cloud Elastic Compute Service (ECS)インスタンスでNextcloudのOnlyOfficeとコンテナを統合する方法を見ていきたいと思います。

しかし、始める前に、このチュートリアルの各コンポーネントを簡単に紹介します。Nextcloudの詳細については、代わりにECSにNextcloudをインストールする方法についてのこちらの記事を参考にしていただければと思いますので、今のところは割愛させていただきます。

Wikipediaによると、Nextcloudはファイルホスティングサービスを作成・利用するためのクライアント・サーバ・ソフトウェアのスイートです。機能的にはDropboxに似ていますが、Nextcloudは無料でオープンソースなので、誰でもプライベートサーバーにインストールして運用することができます。

OnlyOfficeは、豊富な機能を備えた包括的なオープンオフィス、クラウドベースのオフィスおよび生産性スイートです。以前はTeamLab Officeと呼ばれていたこのソフトウェアは、オンラインドキュメントエディタ、CRM、ドキュメントおよびプロジェクト管理ツールのコア要素を持つ統合プラットフォームをユーザーに提供しています。

Spreedは、フリーのオープンソース(AGPL)のWebRTCオーディオ/ビデオ通話・会議サーバで、ブラウザ同士がピアツーピアで会話できるようにします。Spreedを使用すると、Nextcloudをインストールしたブラウザから、リッチな音声、ビデオ、テキストチャットを使って安全に通信することができます。

Dockerコンテナは、その場で作成して特定のアプリケーションや環境をデプロイすることができる標準化されたユニットです。概念的には仮想化技術に似ていますが、オペレーティングシステムがコンテナから抽象化されている点が大きな違いです。

ECS（Elastic Compute Service）は、物理サーバよりもシンプルで効率的な管理モードを備えた、弾力的な処理能力を特徴とするコンピューティングサービスの一種である。




#全てをまとめる
NextcloudとOnlyofficeをECSで利用する目的を見てみましょう。オンライン資産を最新の状態に保ちながら、オフィスでのコラボレーションやプライベート共有のためのツールを必要としている組織を想像してみてください。Nextcloudは人との接続、チャット、データ共有、コラボレーションを可能にし、OnlyofficeはオンラインドキュメントエディタでNextcloudの連絡先との作業、CRMでの顧客管理を可能にします。Spreedは、あなたのNextcloud上で簡単に電話会議を持つことができるようになります。さらに、コンテナを使用してすべてを実行することで、アプリ開発の柔軟性が高まり、システムの軽量化にもつながります。

#前提条件
- 有効なAlibaba Cloudアカウントが必要です。まだお持ちでない場合は、[無料トライアル](https://www.alibabacloud.com/ja/campaign/free-trial)にサインアップすることができます。
- Ubuntu 16.04を実行しているAlibaba Cloud ECSインスタンス。
- ルートアクセスまたはルートアクセスを持つユーザー（sudoグループ内）。
- 有効なドメイン名（これはオプションですが、トラフィックを暗号化したい場合は必要です）。



**ステップ1**：システムをアップデートしてアップグレードします。この2つのコマンドを実行することで作業が完了します。

```
apt-get update
apt-get updgrade
```

**ステップ2**: nginxサーバーのインストール

```
apt-get install nginx
```

nginx の状態を確認して、動作していることを確認します。確認方法は主に2つあります。

- service nginx status" コマンドを使用する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5ee89d2b-2694-7903-71e2-079601762c00.png)


- ブラウザでECSインスタンスのパブリックIPアドレスを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/152a9472-cfa2-6033-123e-621e03d20084.png)


**ステップ3**：Dockerをインストール:

```
apt-get install docker.io
```

dockerのインストール状況はもちろん、dockerのバージョンも確認できます。

```
service docker status
docker -v
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6879d2fb-45f0-126c-5ec1-77ad49c610eb.png)


上の画像のように、私のECSではdockerが実行されており、バージョンは1.6.2になっています。

**ステップ4**: docker-composeをインストール:

```
sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
```

docker-compose をダウンロードして /usr/local/bin に入れます。フォルダの中に入って、docker-composeに実行権を与えます。

```
chmod +x docker-compose.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b7dd5656-e66d-bfe6-5561-8263aafc8b53.png)


イメージの中には、docker composeをインストールするために使用するすべてのステップがあります。そして最後のコマンドで彼のバージョンを確認すると、私の場合は1.17.1になっています。

**Step 5**: システム起動時に自動起動するようにします。

```
Service docer reload
```

**ステップ 6**: githupレポをクローンした後、フォルダの中に入り、コマンドを入力します。

```
- cd docker-only-office-nextcloud
- git submodule update -remote
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b29e5f7e-38a1-da1f-6c30-b9dd8c8a7eba.png)


画像の中には、すべてのコマンドと結果を見ることができます docker-onlyoffice-nextcloudをクローンするために入力します。

**ステップ 7**: nextcloud-onlyofficeのデプロイ

今すぐコマンドを入力してください: `docker-compose up -d to start container in .yml file`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/cdaa4591-a6a7-e2cc-1a6f-04789f2a8c96.png)


スクリーンショットを見ると、dockerコンテナが正常に起動したことがわかります。ブラウザでIPアドレスを入力すると、nextcloudのインターフェイスが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/c15be9a5-3e41-e08d-7481-95d61f43b343.png)


注意: 上記の手順をすべて完了しても、パブリックIPアドレスを入力しても何も表示されない場合は、トラフィックがブロックされている可能性があります。つまり、特定のポートでのトラフィックを許可する必要があります。そのためには、ECSのセキュリティグループとルールを設定する必要があります。

- Rule direction：Ingressを入力
- Action: 許可を入力
- Custom port Range：80/80を入力
- Authorization Objects：0.0.0.0.0/0を入力します。
- 説明を入力してOKを押します。


カスタムポート範囲 43/43 を指定して、上記の手順を繰り返します。

このチュートリアルを動作させるためには、ポート 80 と 43 からのトラフィックを許可しなければなりません。また、ポート80と43の両方について上記と同じ手順を繰り返す必要がありますが、ルールの方向をEgressに変更します。

完了したら、Nextcloudサーバーに再度アクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b4556d89-7de4-f262-87c5-3e88ec3472d0.png)


これがルールを作成するためのインターフェースです。ここでは、データベースとしてSQLiteを使用することを想定してみましょう。管理者ユーザー名と管理者パスワードを入力します。クリックして設定を終了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d0587b48-a61e-9f53-376b-824107c4177a.png)


ご覧のように、最初の設定には管理者認証を入力する必要があります。数分後、あなたはあなたのウェルカムページにリダイレクトされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8c7e720b-0009-de71-ca0b-99806c9e9c70.png)


さて、ECS上でNextcloudをどのように設定したかというと、追加ボタンをクリックするとOnlyOfficeが表示されません。そこで設定するためには、CLI上でdocker-onlyoffice-nextcloudフォルダの中に立つ必要があります。その中で、bash set-configuration.shというコマンドを入力します。

しかし、OnlyOfficeが動作するためには信頼できるドメインが必要なので、その前に有効なドメイン名にパブリックIPアドレスをアタッチする必要があります。ドメイン名の設定後、以下のように表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/40e81b4f-b85c-1cf9-678b-0babb26778d0.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/138a7f6d-107e-8366-dac4-0baeb2607a76.png)


**ステップ8**. スプレードのインストール

Spreed WebRTCとNextcloudを同じオリジンで動作させる必要があります。つまり、SpreedとNextcloudは同じプロトコルスキーム、同じドメイン、同じポートを使ってアクセスすることができます。

Nextcloudにアクセスして、右上にある「A」のロゴを見つけます。それをクリックして、アプリをクリックします。インストールされているアプリ、アクティブなアプリ、アップデートを含むアプリのすべてのカテゴリが表示されます。今度はApp bundlesをクリックして、"talk "を探して、それをインストールするためにクリックします。

注：あなたはアプリのバンドルで話を見つけることができませんでした場合は、ちょうど上記の検索バーに "話 "を入力し、エンターキーを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/39829183-d3e3-7d2a-848f-17775fe7b137.png)


さて、プラットフォーム上にいない人と話したい場合はどうしますか？URLで外部のチャット参加者を招待することができます。このチャットは、ユーザーが通話から離れても開かれたままで、参加者がメッセージ、リンク、メモを簡単に交換することができます。また、パスワードで公開グループチャットを保護することもできます。

これで完了です。

#結論
これが終わるまでに、私たちはAlibaba Cloud ECS上に完全なコンテナ化されたSaaSサービスを設定しました。このチュートリアルがお役に立てたことを願っています。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*