序章

CakePHP は、人気があり機能が豊富なPHPWebフレームワークです。 これは、データベースとの対話、SQLインジェクションに対するシールド、ビューコードの生成など、Web開発で一般的な問題の多くを解決します。 これは、 model-view-controller (MVC)パターンに準拠しており、アプリケーションのさまざまな部分を切り離し、開発者がアプリのさまざまな部分で並行して作業できるようにします。 また、組み込みのセキュリティと認証も提供します。 基本的なデータベースアプリを作成することはシームレスなプロセスであり、CakePHPをプロトタイピングに役立ちます。 ただし、CakePHPを使用して、展開用に完全に開発されたWebアプリケーションを作成することもできます。

このチュートリアルでは、サンプルのCakePHPWebアプリケーションを実稼働環境にデプロイします。 これを実現するには、サンプルデータベースとユーザーを設定し、Apacheを構成し、アプリをデータベースに接続して、デバッグモードをオフにします。 CakePHPも使用します bake 記事モデルを自動的に生成するコマンド。

前提条件

このチュートリアルを開始する前に、次のものが必要です。

  • ルートアクセスとsudo、非ルートアカウントでUbuntu 18.04を実行しているサーバー。これは、この初期サーバーセットアップガイドに従ってセットアップできます。
  • Linux、Apache、MySQL、PHP(LAMP)スタックをUbuntu18.04にインストールする方法に従ってインストールされたLAMPスタック。 この記事の執筆時点では、PHP7.2が最新バージョンです。
  • サーバーにインストールされているComposer(PHPパッケージマネージャー)。 その方法のガイドについては、 Ubuntu18.04にComposerをインストールして使用する方法をご覧ください。 そのチュートリアルの最初の2つのステップを完了するだけで済みます。
  • Let’sEncryptで保護されたApache。 この前提条件を完了するには、最初に Ubuntu18.04にApacheをインストールする方法のステップ5に従って仮想ホストを設定する必要があります。 次に、 Ubuntu 18.04でLet’sEncryptを使用してApacheを保護する方法に従って、Let’sEncryptを使用してApacheを保護します。 求められたら、必須のHTTPSリダイレクトを有効にします。
  • 完全に登録されたドメイン名。 このチュートリアルでは、 example.com 全体を通して。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
  • 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、この紹介に従ってDigitalOceanDNSを参照できます。
    • とのAレコード example.com サーバーのパブリックIPアドレスを指します。
    • とのAレコード www.example.com サーバーのパブリックIPアドレスを指します。

ステップ1—依存関係のインストール

アプリケーションの準備をするには、CakePHPが必要とするPHP拡張機能をインストールすることから始めます。

パッケージマネージャーのキャッシュを更新することから始めます。

  1. sudo apt update

CakePHPには mbstring, intl、 と simplexml マルチバイト文字列、国際化、およびXML処理のサポートを追加するPHP拡張機能。 インストールしました mbstring Composer前提条件チュートリアルの一部として。 残りのライブラリは、次の1つのコマンドでインストールできます。

  1. sudo apt install php7.2-intl php7.2-xml -y

上記のバージョン番号(7.2)は、新しいバージョンのPHPで変更されることに注意してください。

CakePHPに必要な依存関係をインストールしました。 これで、本番環境で使用するためにMySQLデータベースを構成する準備が整いました。

ステップ2—MySQLデータベースを設定する

次に、ブログの記事に関する情報を格納するためのMySQLデータベースを作成します。 また、アプリケーションがデータベースへのアクセスに使用するデータベースユーザーを作成します。 この制御の分離を実現するために、データベース権限を変更します。 その結果、悪意のある攻撃者は、データベースのクレデンシャルを使用してもシステムに問題を引き起こすことはできません。これは、実稼働環境での重要なセキュリティ対策です。

MySQLシェルを起動します。

  1. sudo mysql -u root -p

求められたら、LAMPの初期インストール時に設定したパスワードを入力します。

次に、データベースを作成します。

  1. CREATE DATABASE cakephp_blog;

次のような出力が表示されます。

Output
Query OK, 1 row affected (0.00 sec)

CakePHPアプリは、この新しいデータベースを使用して本番データを読み取り、保存します。

次に、MySQLに新しいものを操作するように指示します cakephp_blog データベース:

  1. USE cakephp_blog;

次のような出力が表示されます。

Output
Database changed

次に、ブログ記事のテーブルスキーマを作成します。 cakephp_blog データベース。 次のコマンドを実行して、これを設定します。

  1. CREATE TABLE articles (
  2. id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  3. title VARCHAR(50),
  4. body TEXT,
  5. created DATETIME DEFAULT NULL,
  6. modified DATETIME DEFAULT NULL
  7. );

ブログ記事を説明するための5つのフィールドを持つスキーマを作成しました。

  • id:は記事の一意の識別子であり、主キーとして設定されます。
  • title:は記事のタイトルであり、最大50文字を含むテキストフィールドとして宣言されています。
  • body:は記事のテキストであり、次のように宣言されています TEXT 分野。
  • created:レコードが作成された日時です。
  • modified:は、レコードが変更された日時です。

出力は次のようになります。

Output
Query OK, 0 rows affected (0.01 sec)

記事を保存するためのテーブルを作成しました cakephp_blog データベース。 次に、次のコマンドを実行して、サンプル記事を入力します。

  1. INSERT INTO articles (title, body, created)
  2. VALUES ('Sample title', 'This is the article body.', NOW());

タイトルと本文のサンプルデータを含むサンプル記事を追加しました。

次の出力が表示されます。

Output
Query OK, 0 rows affected (0.01 sec)

CakePHPアプリをデータベースに接続するには、新しいデータベースユーザーを作成し、その権限を制限する必要があります。

  1. GRANT ALL PRIVILEGES ON cakephp_blog.* TO 'cake_user'@'localhost' IDENTIFIED BY 'password';

このコマンドは、データベース内のすべてのテーブルにすべての特権を付与します。

交換することを忘れないでください password 選択した強力なパスワードを使用します。

行った変更でデータベースを更新するには、次のコマンドを実行してリロードします。

  1. FLUSH PRIVILEGES;

新しいデータベースユーザーを作成しました。 cake_user そして、ユーザー特権を与えられたのは cakephp_blog データベース、したがってセキュリティを強化します。

次のように入力してMySQLターミナルを終了します exit.

スキーマを使用して新しいデータベースを作成し、サンプルデータを入力して、適切なデータベースユーザーを作成しました。 次のステップでは、CakePHPアプリ自体をセットアップします。

ステップ3—ブログアプリケーションを作成する

このセクションでは、Composerを使用してサンプルのCakePHPアプリをインストールします。 コマンドラインからCakePHPをインストールでき、特定のファイル権限と構成ファイルを自動的に設定できるComposerを使用すると便利です。

まず、ApacheWebサーバーフォルダーに移動します。

  1. cd /var/www/example.com/html

Apacheはこのディレクトリを使用して、外部から見えるファイルを保存します。 The root ユーザーがこのディレクトリを所有しているため、root以外のユーザーは sammy、何も書き込めません。 これを修正するには、次のコマンドを実行してファイルシステムのアクセス許可を変更します。

  1. sudo chown -R sammy .

次に、Composerを介して新しいCakePHPアプリを作成します。

  1. composer create-project --prefer-dist cakephp/app cake-blog

ここであなたは呼び出しました composer で新しいプロジェクトを作成するように指示しました create-project. --prefer-dist cakephp/app 言う composer CakePHPをテンプレートとして使用するには cake-blog 新しいアプリケーションの名前として。

このコマンドが完了するまでに時間がかかる場合があることに注意してください。

Composerからフォルダのアクセス許可を設定するように求められたら、次のように答えます。 y.

このセクションでは、Composerを使用して新しいCakePHPプロジェクトを作成しました。 次のステップでは、新しいアプリを指すようにApacheを構成します。これにより、ブラウザーで表示できるようになります。

ステップ4—アプリを指すようにApacheを構成する

次に、新しいCakePHPアプリケーション用にApacheを構成し、有効にします。 .htaccess CakePHPの要件であるオーバーライド。 これには、Apache構成ファイルの編集が伴います。

実際のルーティングを行うには、Apacheに使用するように指示する必要があります .htaccess ファイル。 これらはアプリケーションのサブディレクトリにある構成ファイルであり(必要な場合)、Apacheはそのファイルを使用して、アプリの要求された部分のグローバル構成を変更します。 他のタスクの中でも、URL書き換えルールが含まれ、これを調整します。

まず、Apacheグローバル構成ファイルを開きます(apache2.conf)テキストエディタを使用する:

  1. sudo nano /etc/apache2/apache2.conf

次のコードブロックを見つけます。

/etc/apache2/apache2.conf
...
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
...

変化する AllowOverride から NoneAll、次のように:

/etc/apache2/apache2.conf
...
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
...

ファイルを保存して閉じます。

次に、Apacheにポイントするように指示します webroot CakePHPインストールのディレクトリ。 Apacheは、構成ファイルをUbuntu18.04に保存します。 /etc/apache2/sites-available. これらのファイルは、ApacheがWeb要求を処理する方法を管理します。

Let’s Encryptの前提条件のチュートリアルで、HTTPSリダイレクトを有効にしました。 したがって、HTTPSトラフィックのみを許可します。 その結果、編集するのは example.com-le-ssl.conf HTTPSトラフィックを構成するファイル。

まず、 example.com-le-ssl.conf 構成ファイル:

  1. sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf

設定する行を1行だけ変更する必要があります DocumentRoot そして、ブラウザにコンテンツを提供する場所をApacheに指示します。 ファイル内で次の行を見つけます。

/etc/apache2/sites-available/example.com-le-ssl.conf
DocumentRoot /var/www/example.com/html

次の強調表示されたコンテンツを追加して、CakePHPのインストールを指すようにこの行を編集します。

/etc/apache2/sites-available/example.com-le-ssl.conf
DocumentRoot /var/www/example.com/html/cake-blog/webroot

ファイルを保存して、エディターを終了します。

その後、Apacheを再起動して、新しい構成を反映します。

  1. sudo systemctl restart apache2

今、あなたは訪問することができます https://your_domain/ ブラウザで。

デフォルトのCakePHP成功ページが表示されます。 アプリケーションがデータベースに接続できないことを示すブロックがあることに気付くでしょう。 次のステップでは、アプリをデータベースに接続することでこれを解決します。

これで有効になりました .htaccess オーバーライドし、Apacheを正しい方向に向けました webroot ディレクトリ。

ステップ5—アプリをデータベースに接続する

このセクションでは、ブログが記事にアクセスできるように、データベースをアプリケーションに接続します。 CakePHPのデフォルトを編集します config/app.php データベースへの接続を設定するファイル。

アプリフォルダに移動します。

  1. cd /var/www/example.com/html/cake-blog

を開きます config/app.php 次のコマンドを実行してファイルを作成します。

  1. sudo nano config/app.php

を見つける Datasources ブロック(次のようになります):

/var/www/example.com/html/cake-blog/config/app.php
...
    'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            ...
            //'port' => 'non_standard_port_number',
            'username' => 'cake_user',
            'password' => 'password',
            'database' => 'cakephp_blog',
...

為に 'username' 交換 my_app データベースユーザーのユーザー名を使用します(このチュートリアルでは以下を使用します: cake_user), secret データベースユーザーのパスワードと2番目の my_app データベース名(cakephp_blog このチュートリアルでは)。

ファイルを保存して閉じます。

ブラウザでアプリを更新し、データベースセクションの下にある成功メッセージを確認します。 エラーが表示された場合は、構成ファイルを前の手順と照らし合わせて再確認してください。

このステップでは、CakePHPアプリをMySQLデータベースに接続しました。 次のステップでは、記事を操作するためのユーザーインターフェイスを構成するモデル、ビュー、およびコントローラーファイルを生成します。

ステップ6—Articleユーザーインターフェイスの作成

このセクションでは、CakePHPを実行して、すぐに使用できる記事インターフェースを作成します。 bake 記事モデルを生成するコマンド。 CakePHPでは、ベイク処理により、必要なすべてのモデル、ビュー、およびコントローラーが基本的な状態で生成され、さらに開発できるようになります。 すべてのデータベースアプリは、作成、読み取り、更新、削除(CRUD)操作を許可する必要があります。これにより、CakePHPは bake これらの操作のコードを自動的に生成するのに役立つ機能。 数分以内に、アプリの完全なプロトタイプを取得し、データを入力、保存、編集する準備が整います。

モデル、ビュー、およびコントローラーは、MVCパターンに関連しています。 彼らの役割は次のとおりです。

  • モデルはデータ構造を表します。
  • ビューは、ユーザーフレンドリーな方法でデータを表示します。
  • コントローラはユーザーの要求に応じて機能し、ビューとモデルの間の仲介役として機能します。

CakePHPは、CLI実行可能ファイルを bin/cake. これは主にベイク処理に使用されますが、さまざまなキャッシュをクリアするためのコマンドなど、他の多くのコマンドを提供します。

The bake コマンドはデータベースをチェックし、見つかったテーブル定義に基づいてモデルを生成します。 次のコマンドを実行して開始します。

  1. ./bin/cake bake all

を渡すことによって all コマンドを実行すると、CakePHPにモデル、コントローラー、ビューを一度に生成するように指示します。

出力は次のようになります。

Output
Bake All --------------------------------------------------------------- Possible model names based on your database: - articles Run `cake bake all [name]` to generate skeleton files.

正しく検出されました articles データベースからの定義であり、そのモデルのファイルを生成することを提案しています。

実行して焼きます:

  1. ./bin/cake bake all articles

出力は次のようになります。

Output
Bake All --------------------------------------------------------------- One moment while associations are detected. Baking table class for Articles... Creating file /var/www/example.com/html/cake-blog/src/Model/Table/ArticlesTable.php Wrote `/var/www/example.com/html/cake-blog/src/Model/Table/ArticlesTable.php` Deleted `/var/www/example.com/html/cake-blog/src/Model/Table/empty` Baking entity class for Article... Creating file /var/www/example.com/html/cake-blog/src/Model/Entity/Article.php Wrote `/var/www/example.com/html/cake-blog/src/Model/Entity/Article.php` Deleted `/var/www/example.com/html/cake-blog/src/Model/Entity/empty` Baking test fixture for Articles... Creating file /var/www/example.com/html/cake-blog/tests/Fixture/ArticlesFixture.php Wrote `/var/www/example.com/html/cake-blog/tests/Fixture/ArticlesFixture.php` Deleted `/var/www/example.com/html/cake-blog/tests/Fixture/empty` Bake is detecting possible fixtures... Baking test case for App\Model\Table\ArticlesTable ... Creating file /var/www/example.com/html/cake-blog/tests/TestCase/Model/Table/ArticlesTableTest.php Wrote `/var/www/example.com/html/cake-blog/tests/TestCase/Model/Table/ArticlesTableTest.php` Baking controller class for Articles... Creating file /var/www/example.com/html/cake-blog/src/Controller/ArticlesController.php Wrote `/var/www/example.com/html/cake-blog/src/Controller/ArticlesController.php` Bake is detecting possible fixtures... ... Baking `add` view template file... Creating file /var/www/example.com/html/cake-blog/src/Template/Articles/add.ctp Wrote `/var/www/example.com/html/cake-blog/src/Template/Articles/add.ctp` Baking `edit` view template file... Creating file /var/www/example.com/html/cake-blog/src/Template/Articles/edit.ctp Wrote `/var/www/example.com/html/cake-blog/src/Template/Articles/edit.ctp` Bake All complete.

出力では、CakePHPが機能的なボイラープレートを作成するために行ったすべての手順をログに記録していることがわかります。 articles データベース。

次に、ブラウザで次の場所に移動します。

https://your_domain/articles

Sample Title というタイトルの1行を含む、現在データベースにある記事のリストが表示されます。 The bake コマンドは、記事の作成、削除、編集を可能にするこのインターフェースを作成しました。 このように、それはさらなる開発のための確かな出発点を提供します。 サイドバーの新しい記事リンクをクリックして、新しい記事を追加してみてください。

このセクションでは、CakePHPを使用してモデル、ビュー、およびコントローラーファイルを生成しました bake 指図。 これで、記事を作成、削除、表示、および編集でき、すべての変更がすぐにデータベースに保存されます。

次の手順では、デバッグモードを無効にします。

ステップ7—CakePHPでデバッグモードを無効にする

このセクションでは、CakePHPのデバッグモードを無効にします。 デバッグモードでは、アプリが詳細なデバッグ情報を表示するため、これは非常に重要です。これはセキュリティ上のリスクです。 アプリケーションの開発が完了したら、このステップを完了します。

を開きます config/app.php お気に入りのエディタを使用したファイル:

  1. sudo nano config/app.php

ファイルの先頭近くに、 'debug' モード。 ファイルを開くとき 'debug' モードはに設定されます true. これをに変更します false 次のように:

config / app.php
...
'debug' => filter_var(env('DEBUG', false), FILTER_VALIDATE_BOOLEAN),
...

デバッグモードをオフにすると、下にあるホームページが表示されます。 src/Templates/Pages/home.ctp、エラーが表示されます。

注:デフォルトルートを変更していないか、の内容を置き換えていない場合 home.ctp、アプリのホームページにエラーが表示されるようになりました。 これは、デフォルトのホームページが開発中にステータスダッシュボードとして機能するが、デバッグモードが無効になっていると機能しないためです。

デバッグモードを無効にしました。 今後発生するエラーや例外は、それらのスタックトレースとともにエンドユーザーに表示されないため、アプリケーションのセキュリティが強化されます。

ただし、デバッグモードを無効にすると、 home.ctp エラーが表示されます。 このチュートリアルの目的でのみこの手順を完了した場合は、デバッグモードを無効にしたまま、ホームページを記事リストインターフェイスにリダイレクトできるようになりました。 これは、次のコンテンツを編集することで実現できます。 home.ctp.

開ける home.ctp 編集用:

  1. sudo nano src/Template/Pages/home.ctp

その内容を次のように置き換えます。

src / Template / Pages / home.ctp
<meta http-equiv="refresh" content="0; url=./Articles" />
<p><a href="./Articles">Click here if you are not redirected</a></p>

このHTMLはにリダイレクトされます Articles コントローラ。 自動リダイレクトが失敗した場合は、ユーザーがたどるリンクもあります。

この手順では、セキュリティ上の理由からデバッグモードを無効にし、ユーザーをブログ投稿リストインターフェイスにリダイレクトすることでホームページのエラーを修正しました。 Articles コントローラが提供します。

結論

これで、Ubuntu18.04のLAMPスタックにCakePHPアプリケーションが正常にセットアップされました。 CakePHPを使用すると、必要な数のテーブルを含むデータベースを作成でき、データ用のライブWebエディターが作成されます。

CakePHPクックブックは、CakePHPのあらゆる側面に関する詳細なドキュメントを提供します。 アプリケーションの次のステップには、すべてのユーザーが独自の記事を作成できるように、ユーザー認証を実装することが含まれる場合があります。