本番環境にファイルを配置

この章では現在のecサイトを本番環境に再現する方法について解説します。

本番環境のドキュメントルート

本番環境のドキュメントルートは

/var/www/html

に設定されています。

ドキュメントルートの所有ユーザ・グループを変更

ls -l /var/www/html

を実行すると、 現在はドキュメントルートの所有ユーザ・グループがrootに設定されていることが確認できます。

このままの設定だと

  • 追加したユーザーはドキュメントルートにファイル・ディレクトリの作成ができない

という問題があります。 sudoを利用すれば作成は可能になりますが、不便なだけでなくファイルアップロード時などに不具合が生じます。

この問題を解決するためによく利用される方法として、

  • ドキュメントルートの所有ユーザ・グループをapacheに設定する
  • ドキュメントルートのパーミッションをグループ書き込み可能にする
  • 作成したユーザーをapacheグループに所属させる

という方法があります。(apacheユーザーとapacheグループは、apacheのインストール時に自動的に作成されています。)

そこで、ドキュメントルートの所有ユーザ・グループを apache に変更するために以下のコマンドを実行します。

sudo chown -R apache:apache /var/www/html/

さらに、ドキュメントルートのパーミッションをグループ書き込み可能にするために以下のコマンドを実行します。

sudo chmod 775 /var/www/html/

最後に、作成したユーザーをapacheグループに所属させるために

sudo usermod -aG apache [ユーザー名]

とすればOKです。

さらに、今回はMVCモデルを利用して、ドキュメントルート外にもファイルを設置しているため、conf, model, viewの各ディレクトリを作成し、こちらも同様の設定を行っておきます。

sudo mkdir /var/www/conf
sudo chown -R apache:apache /var/www/conf/
sudo chmod 775 /var/www/conf/

sudo mkdir /var/www/model
sudo chown -R apache:apache /var/www/model/
sudo chmod 775 /var/www/model/

sudo mkdir /var/www/view
sudo chown -R apache:apache /var/www/view/
sudo chmod 775 /var/www/view/

sftpでファイルを設置

ドキュメントルートの設定が完了したので、SFTPクライアントを用いてファイルをアップロードします。

SFTPとは

SFTPとは、SSHを利用してファイルの送受信を行う仕組みです。SSHを利用できる環境下であれば利用可能です。

SFTPクライアント

SFTPクライアントは数多く存在します。ここではFilezillaを例に紹介いたします。

Filezillaプロジェクト日本語トップページ

Filezillaの設定

Filezillaで接続を行う際には

  • ホスト名: 作成したvps環境のipアドレス
  • プロトコル: SFTPを選択
  • ログオンの種類: 通常
  • ユーザー名: 作成したユーザー名
  • パスワード: 作成したユーザーのパスワード

と設定する必要があります。 (なお、付録の記述によりパスワードログインを禁止し、sshのポート番号を変更した場合には、ポート番号の設定を変更した上で、ログオンの種類をKeyfileとして、該当の秘密鍵ファイルを選択する必要があります。)

ファイルのアップロード

SFTPの設定が正しく行われ、本番環境のファイルが確認できる状態になったらファイルのアップロードを行います。

  • ローカルのwww内の各種ディレクトリを /var/www/にアップロード

と言う流れで実施します。

基本操作として、右画面でアップロード先のフォルダを選択した状態にし、左画面に表示されているファイル・フォルダを選択して右クリックから「アップロード」をクリックすることでアップロード可能です。

アップロードフォルダのパーミッション変更

完了したら /var/www/html/assets 内のimagesディレクトリについて右クリックし、コンテキストメニューから「ファイルの属性」を選択するとパーミッションの変更が可能です。

画像のアップロードを行えるように、パーミッションを777に変更しておきましょう。

動作確認

[本番環境のIPアドレス]/login.php

にアクセスして、ログインページが開かれることを確認しましょう。

const.phpの書き換え

アップロードした /var/www/conf/const.php を書き換えて本番環境に合わせます。

sudo vim /var/www/conf/const.php

上記のコマンドでconst.phpを開き

DBのユーザー名 root
DBのパスワード rootユーザーのパスワード(sshで本番環境にログインする際に毎回表示されます)
データベース名 任意です、今回はec_siteとします

のように変更します。mysql(mariadb)のユーザーとしてrootというユーザーが初期設定されているので、それを利用しています。

<?php

define('MODEL_PATH', $_SERVER['DOCUMENT_ROOT'] . '/../model/');
define('VIEW_PATH', $_SERVER['DOCUMENT_ROOT'] . '/../view/');


define('IMAGE_PATH', '/assets/images/');
define('STYLESHEET_PATH', '/assets/css/');
define('IMAGE_DIR', $_SERVER['DOCUMENT_ROOT'] . '/assets/images/' );

// 以下を修正
define('DB_HOST', 'localhost');
define('DB_NAME', 'ec_site');
define('DB_USER', 'root');
define('DB_PASS', 'rootユーザーのパスワード');

define('DB_CHARSET', 'utf8');

define('SIGNUP_URL', '/signup.php');
define('LOGIN_URL', '/login.php');
define('LOGOUT_URL', '/logout.php');
define('HOME_URL', '/index.php');
define('CART_URL', '/cart.php');
define('FINISH_URL', '/finish.php');
define('ADMIN_URL', '/admin.php');

define('REGEXP_ALPHANUMERIC', '/\A[0-9a-zA-Z]+\z/');
define('REGEXP_POSITIVE_INTEGER', '/\A([1-9][0-9]*|0)\z/');


define('USER_NAME_LENGTH_MIN', 6);
define('USER_NAME_LENGTH_MAX', 100);
define('USER_PASSWORD_LENGTH_MIN', 6);
define('USER_PASSWORD_LENGTH_MAX', 100);

define('USER_TYPE_ADMIN', 1);
define('USER_TYPE_NORMAL', 2);

define('ITEM_NAME_LENGTH_MIN', 1);
define('ITEM_NAME_LENGTH_MAX', 100);

define('ITEM_STATUS_OPEN', 1);
define('ITEM_STATUS_CLOSE', 0);

define('PERMITTED_ITEM_STATUSES', array(
  'open' => 1,
  'close' => 0,
));

define('PERMITTED_IMAGE_TYPES', array(
  IMAGETYPE_JPEG => 'jpg',
  IMAGETYPE_PNG => 'png',
));

phpmyadminの設置

ローカル開発環境で作成したデータベースは、まだ本番環境には存在していません。phpmyadminをインストールして、データベースを作成します。

phpmyadminのダウンロード

phpmyadminから最新のphpmyadminをダウンロードします。zip形式でダウンロードされるので、解凍しディレクトリ名を「phpmyadmin」にリネームします。

phpmyadminの設置

/var/www/html

に解凍したphpmyadminを設置します。(ファイルの数が多く、少し時間がかかります。)

phpmyadminへのアクセス

[サーバのIPアドレス]/phpmyadmin

にアクセスすると、phpmyadminのログイン画面が表示されます。

  • ユーザー名: root
  • パスワード: const.phpに記載したものと同じパスワード

でログインできます。

DBの作成

ログインしたら、画面左上の「New」をクリックしてデータベース作成画面に移動します。

  • データベース名: ec_site
  • 照合順序: utf8mb4_general_ci

でデータを作成します。

開発環境のテーブルのエクスポート

開発環境のphpmyadminにアクセスし、sampleを選択します。

画面中央上部の「エクスポート」をクリックするとエクスポート画面が開きます。

実行ボタンを押すことで、現在のsampleに設定されている全てのテーブルとその中のレコードをエクスポートすることができます。sqlファイルがダウンロードされますが、この中身をテキストエディタなどで確認すると、テーブル作成と、レコードのINSERTなどを行うSQLが書かれていることがわかります。

テーブルがインポートできない

現状ではテーブルのインポート時にインポートが失敗します。

実は、conohaのLAMP環境では、MySQLではなくMariaDBというMySQL派生のオープンソースのRDBMSが初期設定されています。そのためMySQLの一部機能が利用できない場合があります。

なお、同様のことはインストールされているMySQLのバージョンが異なる場合にも起こりますので、環境構築の際にはDBのバージョンなども重要になります。

トラブル解決のためには

  1. 開発環境と本番環境のRDBMSとバージョンを合わせる
  2. 共通している機能のみを利用する

などの方法があります。

1の方法が基本ですが、応急処置として2が利用されることもあります。

今回のケースでは、主にCURRENT_TIMESTAMP機能をデフォルト値として利用している場合が想定されます。

DATETIME型のカラムのデフォルト値にMySQLの5.6以上ではCURRENT_TIMESTAMPを設定することが可能ですが、今回利用しているMariaDBでは不可能です。

そのため、開発環境でこの機能を前提としている箇所のSQLをdate関数などを利用して書き換え、開発環境でCURRENT_TIMESTAMPを利用しない形に変更してから再度エクスポート、インポートの流れを実行することで、正しくインポートすることが可能です。

(逆に言えば、このような煩雑なことが起こらないように、開発環境では本番環境に合わせた環境構築をおこなうと効率が良くなりますが、今回は広く利用されているMySQL環境の構築を優先させていただきました。)

MariaDBのアップデート

以下でMariaDBをアップデートできます。これにより、datetime型のカラムでCURRENT_TIMESTAMPが利用可能です。

# yumリポジトリを追加
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
# mariadbを停止
sudo systemctl stop mariadb
# mariadbをアップデート
sudo yum update mariadb-server -y
# mariadbを起動
sudo systemctl start mariadb

本番環境のテーブルのインポート

エクスポートされたSQLファイルを利用して、本番環境でDBをインポートします。

本番環境のphpmyadminにログインして、データベース「ec_site」を選択します。

メニューから「インポート」を選択するとec_siteへのインポート画面が開きます。

「ファイルの選択」ボタンから先ほどエクスポートしたSQLファイルを選択してから実行ボタンを押すことで、sqlが実行され、開発環境のテーブルが再現されます。

動作確認

[本番環境のIPアドレス]/login.php

にアクセスして、adminユーザーでログインし動作を確認しましょう。

  • 一覧画面での商品一覧表示
  • 管理画面での商品追加

以上が問題なく実行できればOKです。

まとめ

以上の流れで、本番環境におけるアプリケーションの設置が完了します。今後は、const.php以外のファイルを更新し、さらにDB上での設計変更を行なっていくことでアプリケーションを更新していくことが可能です。

ただし、上記の手続きは煩雑であまり効率が良くありません。今回のような本番環境に対するアプリケーションの設置を「デプロイ」と呼びますが、SFTPを利用したデプロイの他に

  • ディレクトリの同期コマンド「rsync」を利用したデプロイ
  • git pullを利用したデプロイ
  • デプロイツールを利用したデプロイ

など様々な方法があります。

デプロイの効率化は、迅速な保守やアップデートにつながるため近年重要視されています。検索などを利用してスキルアップに挑戦してみることをお勧めします。

(付録としてrsyncを利用したデプロイについての解説を追加予定です。)

results matching ""

    No results matching ""