暑い
というわけで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/でアクセスできるはずなのですが、できなかったり、同じフォルダが数個表示されたり不安定です。
あとでコミュニティで聞いてみます。