Magento setup

Hi,

Anyone can share a working magento setup?
I’ve read that nginx outperforms apache but couldn’t find a clear
instructions how to setup on ubuntu:
nginx + config file
fcgi + spawn-fcgi + upstart script
php-fpm

Thanks

Hey Pablo,

I’ve got instructions for CentOS - installation and configuration.
It’s late for me here and I just finished helping host a birthday
party, but I will post it for you tomorrow.

Raina

Thank you very much for the detailed instructions.
I’ll try it and report the results.

Is nginx going to be faster than apache on a dev server with ~2 users
or am I going to see a difference only when having large number of
concurrent users?

Hi Pablo,

Ok. Here are notes/commands that worked successfully for me when
installing PHP-FPM, Nginx and Magento on a Media Temple (ve) loaded
with CentOS. My notes are a little messy. Let me know if you get stuck
with anything, though if the process is significantly different for
Ubuntu I might not be able to help. I’ve also pasted my config files
below.

INSTALL DEPENDENCIES
yum install -y curl-devel gcc GeoIP* httpd-devel libevent
libevent-devel libjpeg-devel libmcrypt-devel libpng-devel
libtool-ltdl-devel libxml2 libxml2-devel mysql mysql-devel
mysql-server openssl-devel patch pcre-devel php-gd php-mcrypt
php-mysql php-pdo php-xml spawn-fcgi xmlrpc zlib-devel

yum install php* ???

DOWNLOAD OWN LIBEVENT RATHER THAN YUM

→ mkdir /opt/libevent
→ cd /opt/libevent
→ wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz
→ tar xvf libevent…

PHP: COMPILE AND INSTALL FIRST

this was the most helpful

http://interfacelab.com/nginx-php-fpm-apc-awesome/

helpful but failed

http://adityo.blog.binusian.org/?p=428

didn’t use these but they look good

http://www.newmediaist.com/n/installing-nginx-mysql-php-fpm-xcache-centos-53-howto

./configure --enable-fpm --enable-inline-optimization --enable-pdo
–enable-soap --enable-sockets --enable-zip --with-curl --with-gd
–with-jpeg-dir --with-libdir=lib64 --with-mcrypt --with-mhash
–with-mysql --with-mysqli=mysqlnd --with-openssl --with-pear
–with-pdo-mysql=mysqlnd --with-zend-vm=GOTO --with-zlib

make
make test
make install

Wrote PEAR system config file at: /usr/local/etc/pear.conf
You may want to add: /usr/local/lib/php to your php.ini include_path
/usr/local/src/php-5.3.3/build/shtool install -c ext/phar/phar.phar
/usr/local/bin
ln -s -f /usr/local/bin/phar.phar /usr/local/bin/phar
Installing PDO headers: /usr/local/include/php/ext/pdo/

#strip /usr/local/bin/php-cgi

PHP: CONFIG
/usr/local/etc/php-fpm.conf

INSTALLING NGINX
wget http://sysoev.ru/nginx/nginx-0.7.67.tar.gz
http://wiki.nginx.org/NginxInstallOptions

./configure
–prefix=/
–sbin-path=/usr/sbin/nginx
–conf-path=/etc/nginx/nginx.conf
–error-log-path=/var/log/nginx/error.log
–pid-path=/var/run/nginx/nginx.pid
–lock-path=/var/lock/nginx.lock
–with-http_geoip_module
–without-http_autoindex_module
–with-http_stub_status_module
–user=nginx
–group=nginx
–with-http_ssl_module
–with-http_flv_module
–with-http_gzip_static_module
–http-log-path=/var/log/nginx/access.log
–http-client-body-temp-path=/var/tmp/nginx/client/
–http-proxy-temp-path=/var/tmp/nginx/proxy/
–http-fastcgi-temp-path=/var/tmp/nginx/fcgi/

make && make install

NGINX SYMLINK (USUALLY CREATED AUTOMATICALLY ON INSTALL)
ln -s /usr/local/nginx/conf /etc/nginx
OR MOVE LOCATION
cd /usr/local/src/nginx…
cp -a nginx-0.7.67 …/nginx

#be sure to set the correct paths
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

TO START WEBSERVER
uncomment ‘nobody’ in /etc/nginx/nginx.conf
create init:

/etc/init.d/nginx

TODO
#integrate apc
http://www.chilipepperdesign.com/2009/12/18/configuring-and-compiling-nginx-and-php-fpm-on-ubuntu-for-magento-part-2
#get ssl working
#add these to server boot
/etc/init.d/php_cgi start
mysql
service mysqld start
review php and nginx configuration options

INSTALL MYSQL
5.0.77 Source distribution
http://forums.mysql.com/read.php?11,153632
chgrp -R mysql /var/lib/mysql
chmod -R 770 /var/lib/mysql
chkconfig mysqld on && service mysqld restart && chkconfig --list | grep
mysqld
service mysqld start
/usr/bin/mysqladmin -u root password ‘password’

TROUBLESHOOTING
one ve2, had to use 127.0.0.1 instead of localhost, had to skip base
url validation, and had to change root password as follows:

update user set Password=PASSWORD(‘password’) where user=‘user’;
or
set Password=PASSWORD(‘password’) where user=‘user’;
flush privileges;
exit;

INSTALL PEAR & APC
http://www.webtatic.com/blog/2009/06/php-530-on-centos-5/
#didn’t work#
#yum install nfs-utils
#/sbin/service portmap start
#/sbin/service nfslock start
#/sbin/service nfs start
##mount nfs -t /dev/simfs -o remount,exec /tmp
##mount nfs -o remount,exec /tmp
##/dev/simfs on /tmp type simfs (rw,noexec)
##pecl install apc
http://www.php.net/manual/en/install.pecl.phpize.php
#WORKS
yum install autoconf
http://constantshift.com/installing-apc-for-php-5-3/
$ cd /usr/local/src
$ wget http://pecl.php.net/get/APC-3.1.3p1.tgz
$ tar xzvf APC-3.1.3p1.tgz
$ cd APC-3.1.3p1
$ phpize
$ ./configure --enable-apc --enable-mmap
$ make
$ make install
$ cp /usr/local/src/APC-3.1.3p1/modules/apc.so
/usr/local/lib/php/extensions/no-debug-non-zts-20090626/

ADD TO PHP.INI

extension = apc.so
apc.enabled=1
apc.shm_size=30
/etc/init.d/nginx restart && /etc/init.d/php-fpm restart
cp apc.php /var/www/html/

INSTALL FASTCGI
http://adityo.blog.binusian.org/?p=428

  • change to --with-mysql=/usr/bin/mysql

MAGENTO
use magento check file

raised php.ini memory/timeout

END OF NOTES, START FILES###

/etc/nginx/nginx.conf

user nobody;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] 

“$request “’
'$status $body_bytes_sent “$http_referer” ’
'”$http_user_agent” “$http_x_forwarded_for”';
access_log /var/log/nginx/access.log main;

sendfile        on;
map $scheme $fastcgi_https { ## Detect when HTTPS is used
    default off;
    https on;
}

client_body_timeout 5;
client_header_timeout 5;
keepalive_timeout 5 5;
send_timeout 5;

gzip  on;
gzip_comp_level 2;
gzip_proxied any;

gzip_static on;
gzip_buffers 16 8k;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_vary on;
gzip_types text/plain text/css application/x-javascript
text/xml application/xml application/xml+rss text/javascript;

# Load config files from the /etc/nginx/conf.d directory
include /etc/nginx/conf.d/*.conf;

}

/etc/nginx/conf.d/domain.conf

server {
listen 80;
server_name domain.com;

root /var/www/html;

location / {
    index index.html index.php; ## Allow a static html file to be

shown first
try_files $uri $uri/ @handler; ## If missing pass the URI to
Magento’s front handler
expires max; ## Assume all files are cachable
error_page 404 = @handler;
log_not_found off;
}

location ~ /(.*)/index\.php$ { ## strip index.php from product urls
  if (!-e $request_filename) { rewrite ^(.*)/index\.php$ $1/ 

permanent; }
}

location /minify/ { ## Needed for Fooman Speedster
    rewrite ^/minify/([0-9]+)(/.*\.(js|css))$

/lib/minify/m.php?f=$2&d=$1 last;
}

## These locations would be hidden by .htaccess normally
location /app/                { deny all; }
location /includes/           { deny all; }
location /lib/                { deny all; }
location /lib/minify/         { allow all; }  ## Deny is applied

after rewrites so must specifically allow minify
location /media/downloadable/ { deny all; }
location /pkginfo/ { deny all; }
location /report/config.xml { deny all; }
location /var/ { deny all; }

location /var/export/ { ## Allow admins only to view export folder
    auth_basic           "Restricted"; ## Message shown in login 

window
auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
}

location  /. { ## Disable .htaccess and other hidden files
    return 404;
}

location @handler { ## Magento uses a common front handler
    rewrite / /index.php;
}

location ~ \.php/ { ## Forward paths like /js/index.php/x.js to

relevant handler
rewrite ^(.*.php)/ $1 last;
}

location ~ \.php$ { ## Execute PHP scripts
    expires      off; ## Do not cache dynamic content
    fastcgi_param  HTTPS $fastcgi_https;
    fastcgi_param  SCRIPT_FILENAME 

$document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param MAGE_RUN_CODE base;
fastcgi_param MAGE_RUN_TYPE website;
include fastcgi_params; ## See /etc/nginx/fastcgi_params
}

}

END

This is not necessarily the most optimal or logical configuration, but
it works for me. It could probably be simplified, though you’ll also
likely want to at least add a server configuration for SSL.

Hope that helps! Let me know how it goes for you.

Best,
Raina