WordPressでのパーミッション設定の話

ディレクトリ wp-content/uploads/2018/08/を作成出来ませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか?

WordPressでパーミッション設定がうまくいってないとほんとどうにもならないので、インストール時から気をつけておきたいな、できればインストールするところからこっちでやったほうがいいな、というお話です。

失敗談というか苦戦したことをアーカイブすることで、未来に同じトラブルが起こった際 迅速な解決を導けるようにしていこうという作戦です。
それでは見ていきましょう。

パーミッションはセキュリティ的な問題が絡んでくるので自己責任でお願いします。

All In One Migrationでうまく移行できず

今回お客さんから提供された本番環境がBiG-NETというところのもので、今回私初めて触りました。

でもとりあえずWordPressはもう入っていたので、それならAll In One Migrationでさくっと移行できるっしょ!と思ったのですが…。

プラグインインストール時にFTPアカウント情報を聞かれる

とりあえずAll In One Migrationを入れようとプラグインインストールをしようとするとFTPアカウントの入力を求められました。
「おっ、なんかVPSのときこんな感じでいろいろ大変な思いをしたような」
という苦い記憶がうっすらと蘇ります。

とりあえず入力すれば進められたので、進めます。

インストールして有効化。

しかし、あらかじめ開発環境で用意しておいたエクスポートデータをインポートしようとすると、

「〜/strageディレクトリが作れないよ。読み書きできるようにしといてくれ。」
というような警告が出ています。

このあたりで「パーミッション設定が…」と気付きますが、
とりあえずインポートしてしまおう、と思い、空のディレクトリを作って進めました。

[chat face=”hagishirikun_udegumi.png” name=”” align=”left” border=”none” bg=”gray” style=””]今思えば、これがよくなかった[/chat]

とりあえずインポートは完了するが、「テーマが存在しない」と言われる

お、インポート完了したな、と思い再読み込みをします。

しかし画面が白い!
真ん中に「テーマ 〜 が存在しません」と警告が出ています。

ハラハラする心をモンスターアブソリュートリーゼロで落ち着かせながらやっていきます。とりあえずダッシュボードに入ってみましょう。

ログイン情報がちゃんと書き換わっているので、いちおうインポート自体は行われているようです。

とりあえずもっと状況を知りたいのでFTPでテーマだけ上げて有効化してみました。

うん、表示された。されたけど…

リンクが403になっていて直らない

「パーマリンク設定を一回保存し直すやつか」と思ってやってみますが、改善されません。

試しに新しくテストで投稿してみたけれどやっぱり403。

メディアのIDとかはできている模様

メディアを開いてみると、画像は表示されていないがファイル名やタイトルなどはインポートされていました。

カスタム投稿タイプがメニューにない

固定ページはインポートされてましたが、やっぱり403だし、カスタム投稿タイプが見当たりません。

困ったときはクリーンインストール

うっすらと「データベースには書き込めているがディクレトリに書き込めていないようだ」ということがわかります。

こちらに渡された段階で何か手が入っていないとも限らないし、以前そういうこともあったので、すぐに戻せるようにした上で別のディレクトリにWordPressを手動でインストールしました。

wp-config.phpを手動で追加

いつもの感じだと勝手に作られるwp-config.phpが作られませんでした。

とはいえWordPressのインストール画面は親切なので「これコピペしてwp-config.phpという名前で保存しなされや」というソースが表示されます。

言われた通りにします。

.htaccessを手動で追加

やっぱりリンクが403なのでパーマリンク設定のところを眺めていると、こんな案内文が下の方にありました。

さっきこんなのあったっけ?
ここで思い出しました。パーマリンク設定の画面で「保存」を押すを.htaccessが上書きされる、と。

やっぱり書き込めていないんだ、と。

とりあえずコピペして.htaccessを作ってアップしてしまいます。

403じゃなくなったし、案内文が消えた。

でもパーミッションは変えてないのだから、今も保存はできないはず。

uploadsの中身を手動でアップ

画像ファイルに対して振られているIDはコピーされていて一覧はできているので、FTPでuploadsに上げればメディアに反映されるだろう、と思いやってみるとちゃんとメディアに画像が表示されました。

pluginsも手動でアップ

カスタム投稿タイプがないのは、プラグインでカスタム投稿タイプを設定しているからだと予想。これもデータベースはコピーできているので有効化すればメニューにも出てくるはず。

というわけでプラグインをFTPでまとめてアップし、有効化していきます。

カスタム投稿タイプのプラグインを有効化すると、ダッシュボードにカスタム投稿タイプのメニューが表示されました。よし!

カスタム投稿タイプのシングルページがまだ403なので、もう一回.htaccessを手動で上書き保存。403解消。だんだんわかってきましたよ〜。

必要なファイル、ディレクトリのパーミッションを757に変更する

さて、とりあえず表示はできました。

問題はまだまともに更新できないことです。

とはいえ、あんまり気軽にどこのファイルでも変更できるようにしてしまうと先方がこのレンタルサーバーを選んだ想いに反してしまうかもしれません。

最低限必要なのはところだけパーミッションを変更しようと思います。

.htaccessは一度生成すれば操作できる

.htaccessファイル自体を生成させるためにはWordPressをインストールしたディレクトリ自体を757にすれば可能でした。

そのあとは.htaccessはパーミッションが644ですが変更できるようになっていました。
ひょっとして# BEGIN WordPressがキモなのだろうか。まぁこれはまた調べてみます。

とりあえずルートが757はどうなの?と思いましたので元に戻しておきます。

All In One Migrationは/strageを757に

All In One Migrationでデータを保存できるように/plugins/all-in-one-migration/strageを757にしておきます。
試しにエクスポートしてみたところちゃんとファイルができていたのでOKです。

メディアアップローダーを使えるように/uploads/を757に

FTPでアップしたために、その下の月ごとに作られているディレクトリが755になっていたので保存できなくてしばらく悩んでしまいました。気付いて直したらアップできました…。
/uploads/が757になっていれば、翌年に作られるディレクトリも757になるはずなので、これでいいはず。

まとめ

[chat face=”hagishirikun_udegumi.png” name=”” align=”left” border=”none” bg=”gray” style=””]最初からパーミッション757の状態でWordPressをインストールして、そのあとでAll In One Migrationのデータをインポートすれば万事OKだったのでは…[/chat]

という気がしますね。
でもプラグインのインストール時にFTPアカウントを求められてるから無理かな?