Ubuntu 18.04でLAMPを使用してCakePHPアプリケーションを設定する方法

著者はhttps://www.brightfunds.org/funds/foss-nonprofits [無料およびオープンソース基金]を選択して、https://do.co/w4do-cta [Donationsのために書く]の一部として寄付を受け取りましたプログラム。

前書き

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

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

前提条件

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

  • ルートアクセスおよびsudo、非ルートアカウントでUbuntu 18.04を実行しているサーバーは、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-に従って設定できます。 04 [このサーバーの初期セットアップガイド]。

  • Linux、Apacheのインストール方法に従ってインストールされたLAMPスタック、MySQL、Ubuntu 18.04上のPHP(LAMP)スタック]。 この記事の執筆時点では、PHP 7.2が最新バージョンです。

  • サーバーにインストールされているhttps://getcomposer.org/[Composer](PHPパッケージマネージャー)。 その方法のガイドについては、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-ubuntu-18-04 [Composerをインストールして使用する方法をご覧ください。 Ubuntu 18.04で]。 そのチュートリアルの最初の2つのステップを完了するだけです。

  • Let’s Encryptで保護されたApache。 この前提条件を完了するには、まずhttps://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntuのステップ5に従って仮想ホストをセットアップする必要があります-18-04#step-5-%E2%80%94-setting-up-virtual-hosts-(推奨)[Ubuntu 18.04にApacheをインストールする方法]。 Let’s Encrypt onでApacheを保護する方法 Ubuntu 18.04] Let’s EncryptでApacheを保護します。 要求されたら、必須のHTTPSリダイレクトを有効にします。

  • 完全に登録されたドメイン名。 このチュートリアルでは、全体で「++」を使用します。 Namecheapでドメイン名を購入するか、https://www.freenom.com/en/index.html?lang = en [Freenom]で無料で入手できます。または選択したドメインレジストラーを使用します。

  • 次の両方のDNSレコードがサーバーに設定されています。 追加方法の詳細については、https://www.digitalocean.com/docs/networking/dns/quickstart/ [この概要]からDigitalOcean DNSを参照してください。

  • サーバーのパブリックIPアドレスを指す「++」を持つAレコード。

  • サーバーのパブリックIPアドレスを指す「++」を持つAレコード。

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

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

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

sudo apt update

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

sudo apt install php-intl php-xml -y

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

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

ステップ2-MySQLデータベースのセットアップ

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

MySQLシェルを起動します。

sudo mysql -u root -p

要求されたら、最初のLAMPインストール中に設定したパスワードを入力します。

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

CREATE DATABASE ;

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

OutputQuery OK, 1 row affected (0.00 sec)

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

次に、MySQLに新しい「++」データベースを操作するよう指示します。

USE ;

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

OutputDatabase changed

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

CREATE TABLE articles (
   id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
   title VARCHAR(50),
   body TEXT,
   created DATETIME DEFAULT NULL,
   modified DATETIME DEFAULT NULL
);

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

  • + id +:記事の一意の識別子であり、主キーとして設定されます。

  • + title +:記事のタイトルで、最大50文字のテキストフィールドとして宣言されます。

  • + body +:記事のテキストで、 `+ TEXT +`フィールドとして宣言されています。

  • + created +:レコードが作成された日付と時刻です。

  • + modified +:レコードが変更された日付と時刻です。

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

OutputQuery OK, 0 rows affected (0.01 sec)

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

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

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

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

OutputQuery OK, 0 rows affected (0.01 sec)

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

GRANT ALL PRIVILEGES ON .* TO ''@'localhost' IDENTIFIED BY '';

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

「++」を選択した強力なパスワードに置き換えることを忘れないでください。

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

FLUSH PRIVILEGES;

新しいデータベースユーザー「」を作成し、「」データベースに対するユーザー権限のみを付与したため、セキュリティが強化されました。

「+ exit +」と入力して、MySQLターミナルを終了します。

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

ステップ3-ブログアプリケーションの作成

このセクションでは、Composerを使用してCakePHPアプリの例をインストールします。 Composerを使用すると、コマンドラインからCakePHPをインストールでき、特定のファイル許可と設定ファイルが自動的に設定されるため、有利です。

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

cd /var/www//html

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

sudo chown -R  .

Composerを使用して新しいCakePHPアプリを作成します。

composer create-project --prefer-dist cakephp/app

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

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

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

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

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

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

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

テキストエディタを使用してApacheグローバル設定ファイル( + apache2.conf +)を開くことから始めます。

sudo nano /etc/apache2/apache2.conf

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

/etc/apache2/apache2.conf

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

次のように、「+ AllowOverride」を「+ None」から「+ All」に変更します。

/etc/apache2/apache2.conf

...
<Directory /var/www/>
       Options Indexes FollowSymLinks
       AllowOverride
       Require all granted
</Directory>
...

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

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

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

最初に、 `+ -le-ssl.conf`設定ファイルを開きます:

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

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

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

DocumentRoot /var/www//html

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

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

DocumentRoot /var/www/example.com/html/

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

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

sudo systemctl restart apache2

これで、ブラウザで `+ https:/// +`にアクセスできます。

image:https://assets.digitalocean.com/articles/cakephp_1804/step3.png [CakePHPはデータベースに接続できません]

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

これで、 `+ .htaccess `オーバーライドが有効になり、Apacheが正しい ` webroot +`ディレクトリを指すようになりました。

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

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

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

cd /var/www//html/cake-blog

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

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' => '',
           'password' => '',
           'database' => '',
...

`+ 'username' `の場合、 ``をデータベースユーザーのユーザー名に置き換え(このチュートリアルでは ``を使用)、 ``はデータベースユーザーのパスワードに、2番目の ``はデータベース名に置き換えます(このチュートリアルの「+」)。

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

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

image:https://assets.digitalocean.com/articles/cakephp_1804/step5.png [CakePHPはデータベースに接続できます]

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

ステップ6-記事のユーザーインターフェイスの作成

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

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

  • モデルはデータ構造を表します。

  • ビューは、ユーザーフレンドリーな方法でデータを表示します。

  • コントローラーはユーザーの要求に応じて動作し、ビューとモデルの間の仲介者として機能します。

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

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

./bin/cake bake all

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

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

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

データベースから `+ articles +`定義を適切に検出し、そのモデルのファイルを生成するように提供しています。

以下を実行して焼きます:

./bin/cake bake all articles

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

OutputBake 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:///articles

現在データベースにある記事のリストが表示され、* Sample Title *というタイトルの1行が含まれています。 `+ bake +`コマンドはこのインターフェースを作成し、記事を作成、削除、編集できるようにしました。 そのため、今後の開発の確実な出発点となります。 サイドバーの[新しい記事]リンクをクリックして、新しい記事を追加してみてください。

image:https://assets.digitalocean.com/articles/cakephp_1804/step6.png [生成された記事のユーザーインターフェイス]

このセクションでは、CakePHPの `+ bake +`コマンドでモデル、ビュー、コントローラーファイルを生成しました。 記事を作成、削除、表示、編集できるようになりました。すべての変更はすぐにデータベースに保存されます。

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

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

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

お気に入りのエディターを使用して、 `+ config / app.php +`ファイルを開きます。

sudo nano config/app.php

ファイルの先頭近くに、 `+ 'debug' `モードの行があります。 ファイルを開くと、 ` 'debug' `モードが ` true `に設定されます。 これを次のように「 false +」に変更します。

config / app.php

...
'debug' => filter_var(env('DEBUG', ), FILTER_VALIDATE_BOOLEAN),
...

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

image:https://assets.digitalocean.com/articles/cakephp_1804/step7.png [デバッグモードエラー]

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

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

編集のために `+ home.ctp +`を開きます:

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 +`コントローラーが提供するブログ投稿リストインターフェースにユーザーをリダイレクトすることで、ホームページのエラーを修正しました。

結論

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

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

Related