Help us understand the problem. What is going on with this article?

AWS EC2のNginx環境にMagentoをインストールする

More than 5 years have passed since last update.

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
  • 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

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.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
ここの設定がかなり肝。

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

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

Terminal
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を初期化しやすいのでそのまま置いておく。

パーミッションの設定

Terminal
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

というファイルにリダイレクトされるので、全文をコピー。

サーバーにパッチファイルを作成

Terminal
cd /var/www/vhosts/domain.com/
vi patch.sh

先ほどコピーしたパッチ全文をコピーして、:wqで保存。

patchツールをダウンロード

Amimoto AMIではpatchツールが標準でインストールされていないので、yumでインストール。

Terminal
yum install patch

パッチを当てる

Terminal
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。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした