Ubuntu18.04でLAMPを使用してCakePHPアプリケーションをセットアップする方法
序章
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アドレスを指します。
- とのAレコード
ステップ1—依存関係のインストール
アプリケーションの準備をするには、CakePHPが必要とするPHP拡張機能をインストールすることから始めます。
パッケージマネージャーのキャッシュを更新することから始めます。
- sudo apt update
CakePHPには mbstring
, intl
、 と simplexml
マルチバイト文字列、国際化、およびXML処理のサポートを追加するPHP拡張機能。 インストールしました mbstring
Composer前提条件チュートリアルの一部として。 残りのライブラリは、次の1つのコマンドでインストールできます。
- sudo apt install php7.2-intl php7.2-xml -y
上記のバージョン番号(7.2)は、新しいバージョンのPHPで変更されることに注意してください。
CakePHPに必要な依存関係をインストールしました。 これで、本番環境で使用するためにMySQLデータベースを構成する準備が整いました。
ステップ2—MySQLデータベースを設定する
次に、ブログの記事に関する情報を格納するためのMySQLデータベースを作成します。 また、アプリケーションがデータベースへのアクセスに使用するデータベースユーザーを作成します。 この制御の分離を実現するために、データベース権限を変更します。 その結果、悪意のある攻撃者は、データベースのクレデンシャルを使用してもシステムに問題を引き起こすことはできません。これは、実稼働環境での重要なセキュリティ対策です。
MySQLシェルを起動します。
- sudo mysql -u root -p
求められたら、LAMPの初期インストール時に設定したパスワードを入力します。
次に、データベースを作成します。
- CREATE DATABASE cakephp_blog;
次のような出力が表示されます。
OutputQuery OK, 1 row affected (0.00 sec)
CakePHPアプリは、この新しいデータベースを使用して本番データを読み取り、保存します。
次に、MySQLに新しいものを操作するように指示します cakephp_blog
データベース:
- USE cakephp_blog;
次のような出力が表示されます。
OutputDatabase changed
次に、ブログ記事のテーブルスキーマを作成します。 cakephp_blog
データベース。 次のコマンドを実行して、これを設定します。
- 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)
記事を保存するためのテーブルを作成しました cakephp_blog
データベース。 次に、次のコマンドを実行して、サンプル記事を入力します。
- 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 cakephp_blog.* TO 'cake_user'@'localhost' IDENTIFIED BY 'password';
このコマンドは、データベース内のすべてのテーブルにすべての特権を付与します。
交換することを忘れないでください password
選択した強力なパスワードを使用します。
行った変更でデータベースを更新するには、次のコマンドを実行してリロードします。
- FLUSH PRIVILEGES;
新しいデータベースユーザーを作成しました。 cake_user
そして、ユーザー特権を与えられたのは cakephp_blog
データベース、したがってセキュリティを強化します。
次のように入力してMySQLターミナルを終了します exit
.
スキーマを使用して新しいデータベースを作成し、サンプルデータを入力して、適切なデータベースユーザーを作成しました。 次のステップでは、CakePHPアプリ自体をセットアップします。
ステップ3—ブログアプリケーションを作成する
このセクションでは、Composerを使用してサンプルのCakePHPアプリをインストールします。 コマンドラインからCakePHPをインストールでき、特定のファイル権限と構成ファイルを自動的に設定できるComposerを使用すると便利です。
まず、ApacheWebサーバーフォルダーに移動します。
- cd /var/www/example.com/html
Apacheはこのディレクトリを使用して、外部から見えるファイルを保存します。 The root
ユーザーがこのディレクトリを所有しているため、root以外のユーザーは sammy
、何も書き込めません。 これを修正するには、次のコマンドを実行してファイルシステムのアクセス許可を変更します。
- sudo chown -R sammy .
次に、Composerを介して新しいCakePHPアプリを作成します。
- 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
)テキストエディタを使用する:
- sudo nano /etc/apache2/apache2.conf
次のコードブロックを見つけます。
...
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
...
変化する AllowOverride
から None
に All
、次のように:
...
<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
構成ファイル:
- sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf
設定する行を1行だけ変更する必要があります DocumentRoot
そして、ブラウザにコンテンツを提供する場所をApacheに指示します。 ファイル内で次の行を見つけます。
DocumentRoot /var/www/example.com/html
次の強調表示されたコンテンツを追加して、CakePHPのインストールを指すようにこの行を編集します。
DocumentRoot /var/www/example.com/html/cake-blog/webroot
ファイルを保存して、エディターを終了します。
その後、Apacheを再起動して、新しい構成を反映します。
- sudo systemctl restart apache2
今、あなたは訪問することができます https://your_domain/
ブラウザで。
デフォルトのCakePHP成功ページが表示されます。 アプリケーションがデータベースに接続できないことを示すブロックがあることに気付くでしょう。 次のステップでは、アプリをデータベースに接続することでこれを解決します。
これで有効になりました .htaccess
オーバーライドし、Apacheを正しい方向に向けました webroot
ディレクトリ。
ステップ5—アプリをデータベースに接続する
このセクションでは、ブログが記事にアクセスできるように、データベースをアプリケーションに接続します。 CakePHPのデフォルトを編集します config/app.php
データベースへの接続を設定するファイル。
アプリフォルダに移動します。
- cd /var/www/example.com/html/cake-blog
を開きます config/app.php
次のコマンドを実行してファイルを作成します。
- sudo nano config/app.php
を見つける Datasources
ブロック(次のようになります):
...
'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
コマンドはデータベースをチェックし、見つかったテーブル定義に基づいてモデルを生成します。 次のコマンドを実行して開始します。
- ./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://your_domain/articles
Sample Title というタイトルの1行を含む、現在データベースにある記事のリストが表示されます。 The bake
コマンドは、記事の作成、削除、編集を可能にするこのインターフェースを作成しました。 このように、それはさらなる開発のための確かな出発点を提供します。 サイドバーの新しい記事リンクをクリックして、新しい記事を追加してみてください。
このセクションでは、CakePHPを使用してモデル、ビュー、およびコントローラーファイルを生成しました bake
指図。 これで、記事を作成、削除、表示、および編集でき、すべての変更がすぐにデータベースに保存されます。
次の手順では、デバッグモードを無効にします。
ステップ7—CakePHPでデバッグモードを無効にする
このセクションでは、CakePHPのデバッグモードを無効にします。 デバッグモードでは、アプリが詳細なデバッグ情報を表示するため、これは非常に重要です。これはセキュリティ上のリスクです。 アプリケーションの開発が完了したら、このステップを完了します。
を開きます config/app.php
お気に入りのエディタを使用したファイル:
- sudo nano config/app.php
ファイルの先頭近くに、 'debug'
モード。 ファイルを開くとき 'debug'
モードはに設定されます true
. これをに変更します false
次のように:
...
'debug' => filter_var(env('DEBUG', false), FILTER_VALIDATE_BOOLEAN),
...
デバッグモードをオフにすると、下にあるホームページが表示されます。 src/Templates/Pages/home.ctp
、エラーが表示されます。
注:デフォルトルートを変更していないか、の内容を置き換えていない場合 home.ctp
、アプリのホームページにエラーが表示されるようになりました。 これは、デフォルトのホームページが開発中にステータスダッシュボードとして機能するが、デバッグモードが無効になっていると機能しないためです。
デバッグモードを無効にしました。 今後発生するエラーや例外は、それらのスタックトレースとともにエンドユーザーに表示されないため、アプリケーションのセキュリティが強化されます。
ただし、デバッグモードを無効にすると、 home.ctp
エラーが表示されます。 このチュートリアルの目的でのみこの手順を完了した場合は、デバッグモードを無効にしたまま、ホームページを記事リストインターフェイスにリダイレクトできるようになりました。 これは、次のコンテンツを編集することで実現できます。 home.ctp
.
開ける home.ctp
編集用:
- sudo nano 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のあらゆる側面に関する詳細なドキュメントを提供します。 アプリケーションの次のステップには、すべてのユーザーが独自の記事を作成できるように、ユーザー認証を実装することが含まれる場合があります。