WordPressをnginxフロントで別ディレクトリに公開しSFTPで変更できるようにするdocker-compose

タイトルに収めるのがきつい。

やりたいこと

  • wordpressをdocker-composeで動かす
  • nginxをフロントに
  • 別ディレクトリ(/wpなど)にインストール
  • 外部の業者さんなどが変更できるように公開ディレクトリ以下のみをSFTPでアクセスできるようにする

ソース

https://github.com/withpop/docker-nginx-wordpress

使い方

特にSFTPでアクセスする予定が無ければ、docker-compose.ymlの user: 1001:1001 の行を削除して下記手順はすっとばして、いきなり docker-compose up で起動するはずです。

SFTPでのアクセスを行うユーザーのuid, gridを調べます。ここではどちらも1001だったとします。

docker-compose.ymlの

    wordpress:
        image: wordpress:4.9-php7.1-fpm
        user: 1001:1001

のuser: 1001:1001と書いてある所に書きます。

次に public/www public/www/wp ディレクトリをそれぞれ作り、 sudo chown -R 1001:1001 public として public 以下のファイルやディレクトリのオーナーをSFTPでアクセスするユーザーに変えときます。

あとはchrootの設定をします。

$ sudo vi /etc/ssh/sshd_config

Match User <ユーザー名>
    ChrootDirectory /var/docker/site/public
    ForceCommand internal-sftp

とします。

補足

docker-compose.ymlを見るとわかりますが、 public/www 以下をnginxの公開ディレクトリとしています。なぜ public/ をnginxの公開ディレクトリとしないかというと、chrootするディレクトリのオーナーはrootでなくてはならないという制約があるからです。そのため、chroot先とnginxの公開ディレクトリを同じにしてしまうとルート以下の操作ができなくなってしまいます。

wordpressはインストールこそ確かに簡単なものの、ファイル関係のこういうクソ面倒くさいごちゃごちゃがついて回るのがしんどいですね…。