Pydio Cellsのインストール

暑い

というわけでPydio Cellsを入れます。
Nextcloudの使い勝手にどうもなれず、Pydio使いたいなぁって思ってたんですがPHP版のPydioのエラーがわけがわからないし、他に良いサービスないかなぁと思ってたところでした。
Pydio CellsはGolangで書かれてる今時のイケイケサービスらしいのですが、PHP-FPMみたいにポンとおいて動いてくれないのでちょいと面倒です。
サーバを汚すのも嫌なのでDocker上で立てました。

しかぁし…ドキュメントが貧弱なので適当にちょいちょいといじったら動かないしエラーは不親切だし、わけわかめと言いながら一週間立てるのに苦労しました。

ということでまとめておきます。

追記: PHPが要らなくなったので対応

前提条件

Docker 17.09+
Docker Compose 1.17.0+
Nginx 1.14.0+

Docker

まずdocker-compose.yml書きます。


version:            '3.5'

networks:
  external_network:
  internal_network:
    internal:       true

services:
  db:
    image:          mariadb:latest
    restart:        always
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - MYSQL_DATABASE=cells
      - MYSQL_USER=pydio
      - MYSQL_PASSWORD=${PYDIO_PASSWORD}
    command:        [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci]
    expose:
      - "3306"
    volumes:
      - ./db:/var/lib/mysql
    networks:
      - internal_network

  cells:
    image:          pydio/cells:latest
    restart:        always
    ports:
      - "1334:8080"
    environment:
      - CELLS_BIND=${HOST_NAME}:8080
      - CELLS_EXTERNAL=${HOST_NAME}
    volumes:
      - ./static:/root/.config/pydio/cells/static/pydio #staticはマウントしなくてもいいかも
      - ./data:/root/.config/pydio/cells/data
    networks:
      - external_network
      - internal_network
    depends_on:
      - db

volumesの設定い加減ですが、いい感じに書き直してください。
ミソとなるのはCELLS_BINDのホストとCELLS_EXTERNALのホストが同じ、ポートは別ということです。

次に.envを


DB_ROOT_PASSWORD=hogehogepasswd
PYDIO_PASSWORD=foobarpasswd
HOST_NAME=example.com

なんて感じで書いときます。まあ直接docker-compose.ymlに書いてもいいですが、git管理のしやすいから、こうするらしいです。

あとサブフォルダ形式(example.com/cloud/)は今の所できないみたいです。cloud.example.comみたいにサブドメインにしましょう。あとTLSも必須のような気がします。

これでdocker-compose upすれば、Port 1334をリッスンしてくれます。(なんでや!阪神関係ないやろ!)

Nginx

次にnginxの設定です。


server {
#...
#(listenやserver_name、sslの設定を書く)
#...
        location / {
                proxy_pass https://127.0.0.1:1334;
                proxy_set_header Host $host;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
        client_max_body_size    4G;#お好みで
}

ここでキモなのは、
proxy_passにおいて、docker-compose.ymlのportsに指定したIP(または127.0.0.1)を書くことです。
localhostなどと書いてるとIPv6でアクセスしてしまい、インストールは成功するのですが、その後Bad Gatewayで死にます。
あとWebscocket用に


proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

を忘れないことです。

これでnginxを再起動すると、インストール画面が出ます。
データベースの設定ではlocalhostをdbに書き換え、パスワードなどを入力します。

うまく行けばインストール終了後ログイン画面が出るはずです。

あとWebdavにはhttps://example.com/dav/でアクセスできるはずなのですが、できなかったり、同じフォルダが数個表示されたり不安定です。
あとでコミュニティで聞いてみます。