Ubuntu 16.04がインストールされたAlibaba Cloud上で、Dockerを使用してNextcloudを設定する方法

このチュートリアルでは、Ubuntu 16.04をインストールした**Alibaba Cloud** Elastic Compute Service (ECS)に**Nextcloud**をインストールして設定します。

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

#前提条件
- Alibaba Cloud [Elastic Compute Service (ECS)](https://www.alibabacloud.com/ja/product/ecs)を有効にし、有効な支払い方法を確認する必要があります。新規ユーザーの場合は、新規アカウントで[300ドル～1200ドル相当の](https://www.alibabacloud.com/ja/referral?referralCode=ffxt3q)Alibaba Cloudクレジットを獲得できます。ECSインスタンスのセットアップ方法がわからない場合は、[このチュートリアル](https://www.alibabacloud.com/blog/3-ways-to-set-up-a-linux-server-on-alibaba-cloud_572384?spm=a2c65.11461447.0.0.151056accOvlgJ)または[クイックスタートガイド](https://www.alibabacloud.com/help/ja/doc-detail/25422.htm)を参照してください。ECSインスタンスには、少なくとも1GBのRAMと1つのCoreプロセッサが必要です。
- Alibaba Cloudから登録されたドメイン名。すでにAlibaba Cloudまたは他のホストからドメインを登録している場合は、そのドメインネームサーバーレコードを更新することができます。
- [ドメイン名](https://www.alibabacloud.com/ja/domain)は、あなたのAlibaba Cloud ECSのIPアドレスを指している必要があります。
- Alibaba CloudのVNCコンソールまたはPCにインストールされているSSHクライアントにアクセスします。
- サーバーのホスト名を設定し、root権限を持つユーザーを作成します。


#サーバーの設定
パッケージのインストールを進める前に、以下のコマンドを使用してUbuntuシステムをアップデートしてください。このコマンドを実行するには、root 以外のユーザから sudo 権限でログインすることを忘れないでください。

```
# sudo apt update && sudo apt upgrade
```

Docker CEのインストールに対応したファイルを取得するためには、software-properties-commonパッケージが必要です。software-properties-commonをインストールするには、コマンドを実行します。

```
# sudo apt-get install software-properties-common -y 
```

Docker CEのインストールには、apt-transport-httpsが必要です。apt-transport-httpsをインストールするには、コマンドを実行します。

```
# sudo apt-get install apt-transport-https -y 
```

Docker CEのインストールにはca-certificatesが必要です。ca-certificatesをインストールするには、コマンドを実行します。

```
# sudo apt-get install ca-certificates -y 
```

Docker CEのインストールにはcurlが必要です。curlをインストールするには、コマンドを実行します。

```
# sudo apt-get install curl -y 
```

#Docker CEのインストール
Dockerコミュニティ版をインストールするには、以下の手順に従います。

**ステップ1:**

以下のコマンドを実行して、Docker用のGPGキーを追加します。

```
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
```

**ステップ2:**

以下のコマンドを実行して、GPGキーのフィンガープリントを確認します。

```
# sudo apt-key fingerprint 0EBFCD88
```

**ステップ3:**

以下のコマンドを実行してDockerリポジトリを追加します。

```
# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
```

**ステップ4:**

以下のコマンドを実行してシステムをアップデートし、追加されたリポジトリをロードします。

```
# sudo apt update
```

**ステップ5:**

以下のコマンドを実行してDockerをインストールします。

```
# sudo apt install docker-ce
```

**ステップ6:**

以下のコマンドを実行して、ユーザ名をdockerグループに追加します。

```
# sudo adduser aareez docker 
```


**ステップ7:**

現在のシェルセッションを閉じて、新しいセッションを開始します。そうしないと、dockerを実行することができず、パーミッションエラーが表示される可能性があります。

**ステップ8:**

以下のコマンドを実行して、dockerが正しく実行されているかどうかを確認します。

```
# docker run hello-world
```

#NextCloudのインストール
NextCloudとTalkをインストールするには、以下の手順に従ってください。

**ステップ1:**

次のコマンドを実行して、NextCloudをDockerにダウンロードしてインストールします。

```
# docker run -d -p 8080:80 nextcloud
```

###Docker composeをインストール
アップグレードによるデータの一貫性を保ち、再起動時にすべてのコンテナを自動的に処理するために、Docker composeを使用することができます。データベースコンテナとパーシステントボリュームを分けて設定を起動するのが簡単です。Docker composeをダウンロードしてインストールするには、以下の手順に従ってください。

**ステップ1:**

以下のコマンドを実行して、最新版のdocker composeをダウンロードしてインストールします。

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

**ステップ2:**

以下のコマンドでファイルのパーミッションを設定します。

```
# sudo chmod +x /usr/local/bin/docker-compose
```

**ステップ3:**

以下のコマンドで起動したコンテナの一覧を取得します。

```
# docker container ls —all
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d0309be6-b9cb-a8bd-37d5-8110cecbf16e.png)


8080番ポートを使用しているコンテナを停止させます。そのためには、コンテナIDを取得し、以下の8baab990c424に置き換えてコマンドを実行します。

```
# docker stop 8baab990c424
```

**ステップ4:**

###オプション1 - SSLなし
SSL証明書をインストールしたい場合は、以下の手順をスキップして、オプション2 - SSLを使用して、本項の手順5から進めます。

docker-compose.yamlファイルを作成し、設定用の以下のテキストを貼り付けて保存します。テキストを貼り付ける前に、データベース名、パスワード、ユーザーを忘れずに設定してください。

```
# sudo nano docker-compose.yaml
```

```
version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=654321Ab
      - MYSQL_PASSWORD=654321Ab
      - MYSQL_DATABASE=ncdb
      - MYSQL_USER=aareez

  app:
    image: nextcloud
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    restart: always
```

以下のコマンドを実行して、Docker Composeの設定を起動します。

```
# docker-compose up -d
```

###オプション2 - SSLを使用した場合
**ファイアウォールとポートの設定**

ファイアウォールを有効にしている場合は、クラウドサーバーの Alibaba Cloud セキュリティグループで、ポート 80/tcp と 443/tcp の例外を追加するルールを定義する必要があります。ECSインスタンスを作成する際にこれらのポートを有効にすることができますが、これらのポートのブロックを解除し忘れた場合は、このガイドの手順に従うことができます: [https://www.alibabacloud.com/help/doc-detail/25471.htm]()

**リバースプロキシの設定**

以下のコマンドで起動したコンテナの一覧を取得します。

```
# docker container ls --all
```

8080番ポートを使用しているコンテナを停止させます。そのためには、コンテナIDを取得し、以下の8baab990c424に置き換えてコマンドを実行してください。

```
# docker stop 8baab990c424
```

このステップでは、NextCloud Talkにアクセスするためのリバースプロキシを設定して、アドレスの末尾にポートを使わずにドメイン名でアクセスできるようにします。そのためには、docker-compose.ymlファイルを以下のテキストで更新する必要があります。

```
# sudo nano docker-compose.yml
```

次に、開いたファイルに以下のテキストを追加して保存します。

```
version: '3'

services:
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=654321Ab
      - MYSQL_PASSWORD=654321Ab
      - MYSQL_DATABASE=ncdb
      - MYSQL_USER=aareez

  app:
    image: nextcloud:apache
    restart: always
    volumes:
      - nextcloud:/var/www/html
    environment:
      - VIRTUAL_HOST=softpedia.xyz
      - LETSENCRYPT_HOST=softpedia.xyz
      - LETSENCRYPT_EMAIL=arslan@gmail.com
      - MYSQL_HOST=db
      - MYSQL_PASSWORD=654321Ab
      - MYSQL_DATABASE=ncdb
      - MYSQL_USER=aareez
    depends_on:
      - db
    networks:
      - proxy-tier
      - default

  proxy:
    build: ./proxy
    restart: always
    ports:
      - 80:80
      - 443:443
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
    volumes:
      - certs:/etc/nginx/certs:ro
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - proxy-tier

  letsencrypt-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    restart: always
    volumes:
      - certs:/etc/nginx/certs
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - proxy-tier
    depends_on:
      - proxy

volumes:
  db:
  nextcloud:
  certs:
  vhost.d:
  html:

networks:
  proxy-tier:
```

ここで、proxy という名前のディレクトリを作成します。

```
# sudo mkdir proxy
```

作成されたプロキシディレクトリに移動します。

```
# cd proxy
```

ここでDockerfileというファイルを作成し、開いたファイルに以下のテキストを貼り付けて保存します。

```
# sudo nano Dockerfile
```

```
FROM jwilder/nginx-proxy:alpine

COPY uploadsize.conf /etc/nginx/conf.d/uploadsize.conf
```

今すぐuploadsize.confを作成し、開いたファイルに以下のテキストを貼り付けて保存します。

```
# sudo nano uploadsize.conf
```

```
client_max_body_size 10G;
```

ホームディレクトリに移動します。

```
# cd ~
```

これでDocker composeの設定を起動します。

```
# sudo docker-compose up -d
```

**ステップ5:**

ブラウザを開き、http://your_domain.tld:8080 または http://ecs_ip_address:8080 に移動します。ページの読み込み中にエラーが表示された場合は、ファイアウォールの設定セクションに移動し、ポート8080を有効にします。リンクにアクセスすると、以下のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/1ff3600a-4720-2917-abd8-63839d9f3f2e.png)


**ステップ6:**

以下のフォームに必要事項を入力して、管理者アカウントを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/365d8242-727c-788f-7d63-fef7acf42c65.png)


**ステップ7:**

ストレージとデータベースのドロップダウンをクリックして、データベース情報を入力します。ホスト値を使用してください：db

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/0ad85c7c-8465-add9-bfb1-06cc74768246.png)


データを入力したら、「セットアップを完了する」をクリックします。これでNextCloudのダッシュボードにリダイレクトされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/74935716-a6e0-3ce8-db60-c4f7c0a51b38.png)


#Talkをインストール
Talkは、テキストとビデオチャットを行うために提供しています。それはあなたが通話をするのに役立ちます。そのためには、以下の手順に従ってください。

**ステップ 1:**

右上のプロフィール写真のアイコンに移動すると、ドロップダウンメニューが開きます。下図のように+Appsをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e3259d0a-07b9-a5c0-7ddb-6a679e677d8b.png)


**ステップ2:**

ソーシャル＆コミュニケーションセクションに移動します。アプリのリストが表示されます。下図のように開いたリストからトークを選択します。ダウンロードして有効にするオプションをクリックして、インストールを待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/40769734-8f1f-39ca-e57a-80cc522afbd3.png)


正常にインストールされた後、上部のメニューバーに新しいアイコンが表示されますので、それをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/fb77c1a3-1d80-e163-f02d-7967faf0526f.png)


以下のような画面が表示されます。左側に追加されたユーザーの一覧が表示されます。電話をかけたり、チャットをしたりすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/0fe32161-f52c-ffd8-456b-63e46957cfff.png)


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