さくらのVPSでDoker-composeを利用してUbuntu 20.04にNextcloud環境を構築

ベースのLinuxはUbuntu 20.04

####1.　DockerとDocker-composeをインストールします

####2．必要に応じて任意の名前（例：nextcloud_on_docker）で新規ディレクトリを作成し、その中に以下のdocker-compose.ymlファイルを準備します

```docker-compose.yml
version: '3'

services:

  proxy:
    image: jwilder/nginx-proxy:alpine
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
    container_name: nextcloud-proxy
    networks:
      - nextcloud
    ports:
      - 8080:80
    volumes:
      - ./proxy/conf.d:/etc/nginx/conf.d:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - ./proxy/certs:/etc/nginx/certs:ro
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./server.conf:/etc/nginx/conf.d/server.conf #大きなファイルをアップロードするための設定
    restart: unless-stopped

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nextcloud-letsencrypt
    depends_on:
      - proxy
    networks:
      - nextcloud
    volumes:
      - ./proxy/certs:/etc/nginx/certs:rw
      - ./proxy/vhost.d:/etc/nginx/vhost.d:rw
      - ./proxy/html:/usr/share/nginx/html:rw
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: unless-stopped

  db:
    image: mariadb
    container_name: nextcloud-mariadb
    networks:
      - nextcloud
    volumes:
      - db:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MYSQL_ROOT_PASSWORD=<自分の好きなパスワードを設定>
      - MYSQL_PASSWORD=<自分の好きなパスワードを設定>
      - MYSQL_DATABASE=<自分の好きなデータベース名を設定>
      - MYSQL_USER=<自分の好きなユーザ名を設定>
    restart: unless-stopped

  app:
    image: nextcloud:latest
    container_name: nextcloud-app
    networks:
      - nextcloud
    depends_on:
      - letsencrypt
      - proxy
      - db
    volumes:
      - nextcloud:/var/www/html
      - ./app/config:/var/www/html/config
      - ./app/custom_apps:/var/www/html/custom_apps
      - ./app/data:/var/www/html/data
      - ./app/themes:/var/www/html/themes
      - /etc/localtime:/etc/localtime:ro
    environment:
      - VIRTUAL_HOST=<さくらのVPSから割り振られたIPアドレスを指定>
      - LETSENCRYPT_HOST=<上記のIPアドレスを利用しているホスト名を指定>
      - LETSENCRYPT_EMAIL=<自分が利用しているemailアドレスを指定>
    restart: unless-stopped

volumes:
  nextcloud:
  db:

networks:
  nextcloud:
```

※ymlファイルの中の以下7項目の設定を忘れないようにしてください。
      - MYSQL_ROOT_PASSWORD=<自分の好きなパスワードを設定>
      - MYSQL_PASSWORD=<自分の好きなパスワードを設定>
      - MYSQL_DATABASE=<自分の好きなデータベース名を設定>
      - MYSQL_USER=<自分の好きなユーザ名を設定>
      - 
      - VIRTUAL_HOST=<さくらのVPSから割り振られたIPアドレスを指定>
      - LETSENCRYPT_HOST=<上記のIPアドレスを利用しているホスト名を指定>
      - LETSENCRYPT_EMAIL=<自分が利用しているemailアドレスを指定>


####3．docker-compose.ymlファイルと同じ階層にserver.confファイルを新規作成して、以下内容を書き込みます

```server.conf
client_max_body_size 0;
```
※この対応を行わないと、大きなサイズのファイルがnginxによって制限を受けてアップロードできません。
大きいファイルをアップロードしようとすると「不明なエラーが発生しました」「An unknown error has occurred」などが出てうまくいきません。

※client_max_body_sizeとして「0」を指定していますが、これは上限無しです。上限を設定したい場合には150Mなどの上限値を設定してください。

####4.　docker-compose.ymlに記載した「nextcloud」という名前のdockerのネットワークを以下コマンドで作成します

```
$ docker network create nextcloud
```
別に「nextcloud」というネットワーク名でなくてもいいですが、その場合にはdocker-compose.ymlの内容もそれに合わせて修正してください

####5. 以下コマンドを実行すればあとはDockerが勝手に環境をつくってくれます

```
$ docker-compose up -d
```

####6. さくらのVPSのホストの最後に:8080のポートを指定してWebブラウザでアクセスすればNextcloudの環境が手に入ったことが確認できます