AWS EC2のNginx環境にPHP5.5でMagentoをインストールする
EC2 + Nginx + RDS + PHP5.5 + Magento
Amazon Web ServiceのEC2での、Nginxサーバー環境にMagentoをインストールするチュートリアル。
日本版StackOverflowのようなQiitaでも、Magnetoの情報が少ないので投稿してみた。
Magentoは、導入段階に何度もテストをする事になるので、データベースサーバーを別に分ける意味でRDSを使用。
CDNなどはとりあえず置いておいて、動作することを目標にする。
ただでさえ重いMagentoをなるべく早くするために、強力なキャッシュ機能を持つZendOPcacheを標準でサポートするPHP5.5で構成。
Amimoto AMIをPHP5.5にバージョンアップする方法は別投稿参照。
更新状況
随時更新予定!
- 2014/03/01 5:20 Magentoのインストールなど更新
- 2014/03/01 3:26 最初の投稿 (1ストックありがとうございます)
アジェンダ
- サーバー環境
- ソフトウェア環境
- インスタンスの用意
- Route53でテストサーバーのURLを登録
- Amimoto AMIの初期設定を把握・編集
- 各CONFファイルの設定変更
- nginx.conf
- www.conf
- domain.conf
- domain.backend.conf
- Magentoのインストール
- ダウンロード
- サーバーにアップ
- パーミッションの設定
- MagentoをPHP5.4以降に対応させる
- パッチスクリプトのダウンロード
- サーバーにパッチファイルを作成
- patchツールをダウンロード
- パッチを当てる
- ブラウザでインストール
サーバー環境
- AWS EC2 Tokyo Region
- t1.micro Instance
- AMIMOTO.AMI
- Amazon Linux OS
- nginx version: nginx/1.4.3
- PHP 5.5.7 (fpm-fcgi)
- オプションフルインストール
- apcのみ停止
- MySQL 5.6.13
- AWS RDS
- Route53
ソフトウェア環境
- Magento Community Edition(CE) 1.8.0.0
- WordPressを同サーバーに共存
インスタンスの用意
ポテンシャルの汎用性を信じつつ、WordPressも同サーバーに共存させる関係で、Amimoto AMIを使用。
AMIMOTO.AMI
インストールなどは別投稿参照。
Route53でテストサーバーのURLを登録
MagentoはWordPress等と同じくURL情報をデータベースに保存するので、本番環境になるべく近づけるべく、Route53でテスト用URLを発行する。
後でMySQLデータベースを編集して、そのまま本番サーバーに移行可能。
Amimoto AMIの初期設定を把握・編集
詳細は後で編集。
デフォルトで作成されるインスタンスIDフォルダはそのまま維持し、vhosts内にRoute53で取得したテストサーバーURLでフォルダを作りMagentoをインストールする。
各CONFファイルの設定変更
nginx.conf
vi /etc/nginx/nginx.conf
http {
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
}
www.conf
vi /etc/php-fpm-5.5.d/www.conf
[www]
request_terminate_timeout = 300
hp_admin_value[upload_max_filesize] = 64M
php_admin_value[post_max_size] = 64M
php_admin_value[max_execution_time] = 3000
domain.conf
vi /etc/nginx/conf.d/domain.conf
ここの設定がかなり肝。
server {
server_name www.domain.com;
return 301 $scheme://domain.com$request_uri;
}
server {
listen 80;
server_name domain.com;
root /var/www/vhosts/domain.com;
charset utf-8;
access_log /var/log/nginx/domain.com.access.log main;
error_log /var/log/nginx/domain.com.error.log;
## maintenance mode ##
######################
# set $maintenance on;
# if ($remote_addr ~ (8.8.8.8|8.8.4.4)) {
# set $maintenance off;
# }
# if ($uri ~ ^/(index.php/)?(paypal)/(.*)$ ) {
# set $maintenance off;
# }
# if ($maintenance = on) {
# return 503;
# }
# location /maintenance {}
# error_page 503 @maintenance;
# location @maintenance {
# root /var/www/vhosts/domain.com/maintenance;
# rewrite ^(.*)$ /index.html break;
# }
##########################
## end maintenance mode ##
location = /favicon.ico {
try_files $uri =204;
}
location ~* \.(jpe?g|gif|css|png|js|ico|pdf|zip|tar|t?gz|mp3|wav|swf)$ {
expires max;
}
location / {
index index.html index.php;
try_files $uri $uri/ @handler;
rewrite ^/my-url.html /my-url/ permanent;
rewrite ^/my-url.html http://domain.co.uk/ permanent;
expires 7d;
}
location ~ ^/(app|includes|media/downloadable|pkginfo|report/config.xml|var)/ { deny all; }
location ~ ^/(info.php|var/export/)/ {
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd;
}
location @handler {
rewrite / /index.php;
}
location ~ .php/ {
rewrite ^(.*.php)/ $1 last;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_pass phpfpm;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param MAGE_RUN_TYPE website;
fastcgi_param MAGE_RUN_CODE base;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_param REMOTE_ADDR $http_x_real_ip;
fastcgi_pass_header "X-Accel-Redirect";
fastcgi_pass_header "X-Accel-Buffering";
fastcgi_pass_header "X-Accel-Charset";
fastcgi_pass_header "X-Accel-Expires";
fastcgi_pass_header "X-Accel-Limit-Rate";
}
#
# When you use phpMyAdmin, uncomment the line "include /etc/nginx/phpmyadmin;"
# and delete or comment out the below line "location ~* /(phpmyadmin|myadmin|pma) { }".
#
include /etc/nginx/phpmyadmin;
wwwのリダイレクトを設定。
今回は無しに設定。
他は今後追記。
domain.backend.conf
server {
listen unix:/var/run/nginx-backend.sock;
server_name domain.com;
root /var/www/vhosts/domain.com;
index index.php index.html index.htm;
access_log /var/log/nginx/domain.com.backend.access.log backend;
keepalive_timeout 25;
port_in_redirect off;
gzip off;
gzip_vary off;
#include /etc/nginx/wp-singlesite;
#include /etc/nginx/wp-multisite-subdir;
}
Magentoのインストール
ダウンロード
Magento Community Edition Download
Magentoサイトのアカウントを持っていない人は登録してね。
最新は
ver 1.8.1.0 - Added Dec. 11, 2013
だけど今回は諸事情で
ver 1.8.0.0 - Added Sep 25, 2013
を使用。後で更新する。
ローカルにファイルが要らないなら、次項目でmagentoオフィシャルからwget
サーバーにアップ
適当な所有しているサーバーにアップしてwgetするか、SCPでアップロード。
僕は面倒なのでEC2の他のインスタンスにアップしました。
なお、magentoのオフィシャルからもwget可能。
その場合のURLは
http://www.magentocommerce.com/downloads/assets/1.8.0.0/magento-1.8.0.0.tar.gz
cd /var/www/vhosts/
wget http://otherinstance.com/magento-1.8.0.0.tar.gz
tar xzvf magento-1.8.0.0.tar.gz
mv magento domain.com
chown -R nginx:nginx domain.com
やったこと
- Amimoto AMIでのサイトルートフォルダを置くvhostsにmagento1.8.0.0.tar.gzをダウンロード
- wgetしたファイルを解凍
- 解凍したフォルダをdomain.confで設定したドメインのルートフォルダ名に変更
- wgetだとオーナー・グループがrootなので、nginxに変更
そのままtar.gzファイルを置いておくと、Magentoを初期化しやすいのでそのまま置いておく。
パーミッションの設定
cd domain.com
chmod -R 777 app/etc
chmod -R 777 media
Magentoをインストールする際に書き込み権限が必要なフォルダのパーミッションを変更。
MagentoをPHP5.4以降に対応させる
Zend OPcacheを使いたいがために、PHP5.5で動作させたい。
2014/1/17に、公式で5.4以降に対応したので、パッチを当てる。
パッチスクリプトのダウンロード
Magento Community Edition Download
の下の方、「Magento Community Edition Patches」からパッチをダウンロード。
Magentoアカウントでログイン必須。
対応するMagentoバージョンを選んでDOWNLOADを押すと
PATCH_SUPEE-2619_EE_1.13.1.0_v1.sh
というファイルにリダイレクトされるので、全文をコピー。
サーバーにパッチファイルを作成
cd /var/www/vhosts/domain.com/
vi patch.sh
先ほどコピーしたパッチ全文をコピーして、:wqで保存。
patchツールをダウンロード
Amimoto AMIではpatchツールが標準でインストールされていないので、yumでインストール。
yum install patch
パッチを当てる
sh patch.sh
Checking if patch can be applied/reverted successfully...
Patch was applied/reverted successfully.
と表示されたらパッチインストール完了。
- app/code/core/Mage/Catalog/Model/Product.php(編集)
- app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(編集)
- app/code/core/Zend/Pdf/FileParserDataSource.php(新規作成)
3つのファイルにパッチが当たる。
Principle Works様曰く
このパッチで行われる変更点はバージョンによって異なりますが、
app/code/core/Mage/Core/Controller/Varien/Router/Standard.php
というファイルに対して行われる修正はかなり重要です。
このファイルは、Magentoがアクセスを受け付けたURLに対して、どのモジュールに処理を引き渡せばよいかを判断しているプログラムが書かれています。
ですが、このプログラムの動作がPHP5.3までとPHP5.4以降ではどうやら異なるようです(もちろん、その不具合を治すためのパッチです)。
もし、PHP5.4以降を使う場合にこのパッチを当てていない場合は、エクステンションや標準機能の一部で動作がおかしくなる事があります。
との事です。
ブラウザでインストール
割愛。
KATS AI。