Nextcloud の docker を使ったインストールと設定

VPS の Ubuntu 18.04 で行った。

Nextcloud のインストール

docker を使ってインストールした。

version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_PASSWORD=MYSQLPASSWORD
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    ports:
      - 127.0.0.1:8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    restart: always
    environment:
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=MYSQLPASSWORD
      - MYSQL_DATABASE=nextcloud
      - MYSQL_HOST=db:3306

のように docker-compose.yml を作り

docker-compose up -d

とした。

nginx の設定

nginx を reverse proxy として使い、Let’s Encrypt の SSL を利用した。 http でのアクセスは https に転送するようにした。

server{
    listen 80 default_server;
    listen [::]:80 default_server;

    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/www/html;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    ssl_certificate     /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

    location = /.well-known/carddav {
        return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location = /.well-known/caldav {
        return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location / {
        proxy_pass    http://localhost:8080/;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Real-IP    $remote_addr;
        proxy_set_header    X-Forwarded-Host       $host;
        proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        client_max_body_size 0;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
        add_header Referrer-Policy "same-origin";
    }
}

というようなファイルを /etc/nginx/sites-available に作り /etc/nginx/sites-enable にシンボリックリンクを張った。

location ^~ /.well-known/acme-challenge/ {
    default_type "text/plain";
    root /var/www/html;
}

の部分は Let’s Encrypt 用に https に転送しないようにしている。また、

location = /.well-known/carddav {
    return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
    return 301 $scheme://$host:$server_port/remote.php/dav;
}

の部分は https に転送していることによって URL がきちんと処理されないことを 修正するために加えてある。

service nginx restart

などとして読み込めば良い。

cron

docker でインストールした Nextcloud で cron を使うために https://help.nextcloud.com/t/cron-when-in-docker/11659/2 にあるように設定した。まず、

docker exec --user www-data nextcloud_app_1 php cron.php

が動くことを確認する。 root で

crontab -e

として次の行を加える。

*/15 * * * * /usr/bin/docker exec --user www-data nextcloud_app_1 php cron.php

Ubuntu のクライアント

apt install nextcloud-desktop

として Ubuntu 19.04 のアプリケーションをインストールしたが segmentation fault でまともに動かなかった。 PPA から次のようにしてインストールすれば問題なく動いた。

add-apt-repository ppa:nextcloud-devs/client
apt install nextcloud-client

ログイン時に毎回、Nextcloud のパスワードを求められていたのだが https://help.nextcloud.com/t/nextcloud-client-asks-for-password-every-time-it-starts/28591 にあるように

rm -v ~/.local/share/keyrings/*.keyring

とすれば解消した。

参考

Tags of current page

,