生活の跡

個人的な備忘録

FuelPHPで作ったWebアプリを、さくらのレンタルサーバで公開する

概要

タイトルの通りです。「FuelPHP さくら」とかで検索すると似たような記事が見つかるのですが、次の4点が気になったので私も記事を書くことにしました。

  • 専門用語が多い(初学者向けではない)
  • 最近書かれた記事が少ない(不要な手順があった)
  • ファイルとDB設定の両方について書かれた記事が見つからない
  • 特定のエラーについてのみ書かれており、全体の流れがわからない

この記事の目的

初めてレンタルサーバにWebアプリを公開しようとしている方に向けて手順を書きます。目的は次の2点です。

  • DBを使用するWebアプリを公開する
  • ひとまずレンタルサーバ上で動作することを目指す

2点目については、セキュリティ面などを考慮すれば本来やるべきことは省いて、とにかく動作することを目指すという意味です。ローカル環境とレンタルサーバ環境の違いを確認することを重視するためです。とはいえ、動作が確認できたら別の記事なども参考に、適切な設定をすることをお勧めします。

前提

同じ環境である必要はありませんが、私が試した環境を参考のために書いておきます。

ローカル環境

  • FuelPHP 1.8.2
  • PHP 7.2.1(MAMPで環境を構築しています)
  • MySQL 5.6

さくらレンタルサーバ

  • プラン:さくらのレンタルサーバ スタンダード
  • ドメイン:他社で取得したものを使用(管理も他社)
  • SSL:JPRS ドメイン認証型
  • MySQL 5.7

上記の前提に関する補足

さくらレンタルサーバの環境については、初期ドメイン(〜sakura.ne.jp)だったり、SSL未対応でも、本記事の手順には影響ないと思います。本記事で紹介していないエラーなどがでた場合は、別の記事などを検索してください。

なお、さくらのレンタルサーバの役割や使い方があまりわかっていないという方は、さくらが運営しているブログの初心者講座(全12回)を読むのをお勧めします。さくらのサービスの使い方はもちろんのこと、ドメインやサーバーなどの一般的な概念についてもわかりやすく解説しています。

sakuramarina.com

また、レンタルサーバにアップロードするために、さくらのファイルマネージャーか、FileZillaなどのFTPクライアントソフトを使用します。設定方法については、さくらのサポート情報が参考になります。

ファイルマネージャーについて – さくらのサポート情報

FileZilla 3.39.0 – Mac OS Xを利用する – さくらのサポート情報

レンタルサーバで公開するためにやるべきこと

アップロードするディレクトリ

ローカル環境で作成したFuelPHPプロジェクトのうち、アップロードするのは「fuel」ディレクトリと「public」ディレクトリだけで大丈夫です。

ドメインの公開ディレクトリ(www)直下にアップロードした場合、ブラウザからhttp://ドメイン名/publicにアクセスすれば、例の画面が表示できると思います(例のファイルを残したままであればですが)。

f:id:ishii-akihiro:20191028210504p:plain

しかし、次のようなエラーが出るかもしれません。

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at support@sakura.ad.jp to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

よくわからないので、最後に書かれているようにサーバのエラーログを見てみます。エラーログを見る方法は、さくらのサポート情報に書かれています。

アクセスログの設定と管理 – さくらのサポート情報

エラーログにはこのように出力されていました。

〜省略〜 /public/.htaccess: Option FollowSymLinks not allowed here

public/.htaccess を見ると、Options +FollowSymLinks -Indexesと書かれている箇所があります。Option FollowSymLinks not allowed とか言われているので、この行を#でコメントアウトします(#Options +FollowSymLinks -Indexes)。

今度はブラウザからhttp://ドメイン名/publicに、エラーなくアクセスできるのではないでしょうか。

他のページも、ローカル環境と同じ要領でhttp://ドメイン名/public/コントロール名にアクセスすれば表示できると思います。ただし、データベースにアクセスする必要があるコントローラのURIを入力した場合は、次のような画面が表示されると思います

f:id:ishii-akihiro:20191028210804p:plain

2 (2)!とか言われても意味不明ですが、これについては次節で説明します。

レンタルサーバの設定に従い db.php を書き換える

改めてエラーを見てみましょう。

2 (2)!
Fuel\Core\Database_Exception [ 2 (2) ]:
mysqli::__construct(): (HY000/2002): 接続が拒絶されました

「2 (2)!」はさておき、「接続が拒絶されました」と書かれています。つまり、データベースにアクセスしようとしたけど、ユーザ名やパスワードなどが一致せずに拒絶されたということです。

そこで、APPPATH/config/db.php を次のように書き換えます。

<?php
return array(
  'active' => 'production', //レンタルサーバ用の設定を参照する

  //開発環境の設定
  'development' => array(
    'type'           => 'mysqli',
    'connection'     => array(
      'hostname'       => '127.0.0.1',
      'database'       => 'test',
      'username'       => 'root',
      'password'       => 'root',
      'persistent'     => false,
    ),
    'identifier'     => '`',
    'table_prefix'   => '',
    'charset'        => 'utf8',
    'caching'        => false,
    'profiling'      => true,
  ),
 
  //レンタルサーバ用の設定
  'production' => array(
    'type'           => 'mysqli',
    'connection'     => array(
      'hostname'       => '(※1)',
      'database'       => '(※2)',
      'username'       => '(※3)',
      'password'       => '(※4)',
      'persistent'     => false,
    ),
    'identifier'     => '`',
    'table_prefix'   => '',
    'charset'        => 'utf8',
    'caching'        => false,
    'profiling'      => true,
  ),
);

上記(※1)〜(※4)には、さくらのサーバコントロールパネルから「データベースの設定」を選択して表示される次の部分を入力します。

f:id:ishii-akihiro:20191028213017p:plain

修正した db.php をアップロードしましょう。

レンタルサーバのDBにテーブルを作成する

db.php を適切に設定しても、テーブルを作成していない状態では次のようなエラーがでます。

1146 (1146)!
Fuel\Core\Database_Exception [ 1146 (1146) ]:
Table 'DB名.テーブル名' doesn't exist [ SELECT * FROM `テーブル名` ]

これまでのエラーより分かりやすいですね。DBには接続できたけど、コントローラ(とかモデル)に書かれているSQLで「そんなテーブルないよ」と言われています。ローカルのDBから必要なテーブルをエクスポートして、レンタルサーバのDBにインポートしましょう。

レンタルサーバの phpMyAdmin には、上記の「データベースの設定」に表示されている「管理ツール ログイン」のリンクから入れます。

これで無事に公開できたのではないでしょうか。

おわりに

基本的には「fuel」ディレクトリと「public」ディレクトリをアップロードするだけでよく、データベースも使用するWebアプリの場合はDB設定もすれば公開できました。

ただ、他の記事を読むと .htaccess や php.ini の設定が必要な場合もあるようです。ここ数年でさくらの環境が変わって設定が不要になったのかもしれません。また、public ディレクトリをそのまま公開するとセキュリティ面でよろしくないなどの話もあるので、他の情報も調べてみてください。

参考

私が参考にした記事をいくつか紹介します。私より技術的な内容をちゃんと理解されている方々だと思います。

sachips.byeto.jp

inter-arteq.com