Wednesday, May 19, 2010

Preparing for Nginx+PHP+lighttpd on CentOS 5.5 with ext4 filesystem

Preparing for a lightweight image server is as looking for the right package to host the project.  In this arcticle I am going to detail a few simple steps on how to set-up a lightweight image server running nginx, php, lighttpd on CentOS 5.5. 

Preparing the Server

This one will be using a x86_64 version of the system.  One of the key here is to be able to use ext4 filesystem on one of the partitions, as of this writing the default filesystem is still the ext3 work horse for all RHEL. 

Install the base using the basic.  Just install the base and disable all ticked instances of servers.  After all the partitioning stuff and installation proper.  Update your system using yum, accept all updates.  Afterwards, issue this command.

rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

This command will include the rpmforge repository the latest of which from this writing was March 2010.  Then update your system using yum again.


Download non-repo based php packages

Next download the necessary packages for the PHP you will use in this installation.  Goto http://www.jasonlitka.com/media/EL5/x86_64/  and download the packages.  In our case we just need to download the 5.2.11 jason packages to a specified directory. 

Install additional packages using yum

Install additional packages via yum.  gcc, binutils, make, autoconf, Net-perl-SSLeay, gd, gd-devel, gmp, gmp-devel, pcre, pcre-devel, openssl, openssl-devel, zlib-devel and lastly e4fsprogs (for ext4 kernel support).

Install the PHP packages

Goto the specified directory where you downloaded the php packages. Issue the command. 

rpm -ihv *.rpm

Install lighttpd

Issue the command:  yum install lighttpd

Download Nginx and do a compile.

Download the latest nginx source package for us to do a manual install.  http://www.nginx.eu/download/sources/nginx-0.8.32.tar.gz  unpack this source package and do the following: 

tar xvf ngix-0.8.32.tar.gz

cd ngix-0.8.32/

./configure --sbin-path=/usr/local/sbin --with-http_ssl_module

.....

checking for OS
 + Linux 2.6.18-194.3.1.el5 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.1.2 20080704 (Red Hat 4.1.2-48)
checking for gcc -pipe switch ... found
checking for gcc variadic macros ... found
checking for C99 variadic macros ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for sendfile() ... found
checking for sendfile64() ... found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... found
checking for sched_setaffinity() ... found
checking for crypt_r() ... found
checking for sys/vfs.h ... found
checking for nobody group ... found
checking for poll() ... found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... found
checking for O_DIRECT ... found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... found
checking for statvfs() ... found
checking for dlopen() ... not found
checking for dlopen() in libdl ... found
checking for sched_yield() ... found
checking for PCRE library ... found
checking for OpenSSL library ... found
checking for zlib library ... found
creating objs/Makefile
checking for int size ... 4 bytes
checking for long size ... 8 bytes
checking for long long size ... 8 bytes
checking for void * size ... 8 bytes
checking for uint64_t ... found
checking for sig_atomic_t ... found
checking for sig_atomic_t size ... 4 bytes
checking for socklen_t ... found
checking for in_addr_t ... found
checking for in_port_t ... found
checking for rlim_t ... found
checking for uintptr_t ... uintptr_t found
checking for system endianess ... little endianess
checking for size_t size ... 8 bytes
checking for off_t size ... 8 bytes
checking for time_t size ... 8 bytes
checking for setproctitle() ... not found
checking for pread() ... found
checking for pwrite() ... found
checking for strerror_r() ... found but is not working
checking for gnu style strerror_r() ... found
checking for localtime_r() ... found
checking for posix_memalign() ... found
checking for memalign() ... found
checking for mmap(MAP_ANON|MAP_SHARED) ... found
checking for mmap("/dev/zero", MAP_SHARED) ... found
checking for System V shared memory ... found
checking for struct msghdr.msg_control ... found
checking for ioctl(FIONBIO) ... found
checking for struct tm.tm_gmtoff ... found
checking for struct dirent.d_namlen ... not found
checking for struct dirent.d_type ... found

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1 library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/sbin"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"

next ...

do a make && make install  to finish the job. 

Configure to nginx.conf to listen to port that you desire.  By default it will listen to 80.  But in this case you have lighttpd installed that is already listening on that port.


Preparing your spare drive for ext4 filesystem

Issue the command: 

fdisk -lu /dev/sdb .... etc whichever device you may have in my case its sitting on /dev/sdb

create a new partition on this device using fdisk

format this new partition with the new ext4 filesystem

mkfs.ext4 /dev/sdb1 

introduce this filesystem to your system

vi /etc/fstab

add the following line at the bottom of fstab

/dev/sdb1        /      ext4     defaults    0 0

(in my case i mounted on /opt)

mount the filesystem

mount -a




Done!  You now have nginx+php+lighttpd plus ext4 filesystem installed on your system.  I hope this basics covered much of the information you need to immediately setup a working lightweight webserver for hosting images.

No comments:

Post a Comment