📜 ⬆️ ⬇️

Installation for dummies: nginx + php-cgi + mysql + eaccelerator + memcache on Debian 5.0 "lenny"

This note is a cheat sheet for beginners to install a normally working complex, described in the title. All installation points have been tested several times on different vds, so there should not be any problems with the lack of something, as is usually the case when you put something on manuals that are pulled from different sources. Detailed description of the settings and "tuning" in the note is not, because it is all very individual and requires an understanding of what, how and why it is done, and it is impossible to embrace it in one very large spur.

First of all we update the list of packages:

apt-get update 

We put necessary for manual installation and some other artful manipulations:

 apt-get install build-essential 

Nginx


We put the libraries necessary for installing nginx in the configuration that we will install (always pcre mandatory, ssl is optional if we configure nginx with it):
')
 apt-get install libpcre3-dev apt-get install openssl apt-get install libcurl4-openssl-dev 

In Debian packages, unfortunately, a very old version of nginx is in a stable version, so we will install the server manually. We go to the pace:

 cd /tmp 

Download the latest stable version of nginx, unpack it and go to the installation folder:

 wget htt://sysoev.ru/nginx/nginx-0.7.61.tar.gz tar -zxvf nginx-0.7.61.tar.gz cd nginx-0.7.61 

Configure and install:

 ./configure \ --user=www-data \ --group=www-data \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_gzip_static_module \ --with-mail \ --with-mail_ssl_module make make install 


Run:
 /usr/local/nginx/sbin/nginx 

Go to the browser, type our ip / domain and see:

Welcome to nginx!

It means everything is OK. Now we need to add nginx to autoload. To do this, create the file '/etc/init.d/nginx' with the following content:

 #! /bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/nginx/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 # Include nginx defaults if available if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0 

Make it executable and add nginx to autoload:

 chmod 755 /etc/init.d/nginx update-rc.d nginx defaults 

Now we can manage our http server with the following commands:

 /etc/init.d/nginx start /etc/init.d/nginx restart /etc/init.d/nginx stop 


PHP-FASTCGI


PHP I suggest to put from the collection of packages. Now there is a stable version 5.2.6 - yes, not the last of 5.2, but it’s not buggy. I tried to install 5.2.10 from test packages, in conjunction with nginx it was not working stably. Install PHP with some required extensions (you can add the extensions you need immediately or later):

 apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-json php5-mcrypt php5-memcache 

Next, go to '/etc/php5/cgi/php.ini', where we add a line to the end of the file:

 cgi.fix_pathinfo = 1 

Add php to autoload. For this, we create the following script '/etc/init.d/php-fastcgi':

 #! /bin/sh ### BEGIN INIT INFO # Provides: php-fastcgi # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop php-cgi in external FASTCGI mode # Description: Start and stop php-cgi in external FASTCGI mode ### END INIT INFO # Author: Kurt Zankl <kz@xon.uni.cc> # Do NOT "set -e" PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="php-cgi in external FASTCGI mode" NAME=php-fastcgi DAEMON=/usr/bin/php-cgi PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # If the daemon is not enabled, give the user a warning and then exit, # unless we are stopping the daemon if [ "$START" != "yes" -a "$1" != "stop" ]; then log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes" exit 0 fi # Process configuration export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT" do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- $DAEMON_ARGS || return 2 } do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null # --name $DAEMON RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac 

We do it:

 chmod 755 /etc/init.d/php-fastcgi 

Create another '/ etc / default / php-fastcgi' file so that we can control php-fastcgi (listen to ports, get the number of child processes and other requests) with the following content:

 # # Settings for php-cgi in external FASTCGI Mode # # Should php-fastcgi run automatically on startup? (default: no) START=yes # Which user runs PHP? (default: www-data) EXEC_AS_USER=www-data # Host and TCP port for FASTCGI-Listener (default: localhost:9000) FCGI_HOST=localhost FCGI_PORT=9000 # Environment variables, which are processed by PHP PHP_FCGI_CHILDREN=5 PHP_FCGI_MAX_REQUESTS=1000 


Run php-fastcgi:
 /etc/init.d/php-fastcgi start 

Add to autoload:

 update-rc.d php-fastcgi defaults 


We are friends with NGINX and PHP


Create a folder for sites, for example, '/ home / www'.

Edit '/usr/local/nginx/conf/nginx.conf'. Specify by whom we will run nginx:

 user www-data www-data; 


In the server {} container, we will change / uncomment the following lines:

 location / { root /home/www; index index.php index.html index.htm; } location ~ \.php$ { root /home/www; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www$fastcgi_script_name; include fastcgi_params; } 

Restart nginx:

 /etc/init.d/nginx restart 

Create a file for the test '/home/www/info.php' of the following content:

 <?php phpinfo(); ?> 

Check in the browser - https: //your-address/info.php

MYSQL


We put:

 apt-get install mysql-server mysql-client 

In the process you will be prompted to set a root password, which can always be changed like this:

 mysqladmin -u root password tralala 

EACCELERATOR


Sadly, eAccelerator is completely missing from the Debian installation packages. We will put hands. Before we need to install the library php-developer:

 apt-get install php5-dev 

Now download and install eAccelerator:

 cd /tmp wget htt://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2 tar xvfj eaccelerator-0.9.5.3.tar.bz2 cd eaccelerator-0.9.5.3 phpize ./configure make make install 

Create a configuration file '/etc/php5/conf.d/eaccelerator.ini' with the following content:

 extension="eaccelerator.so" eaccelerator.shm_size="64" eaccelerator.cache_dir="/var/cache/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="3600" eaccelerator.shm_prune_period="1800" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" 

Create a folder to store eAccelerator files:

 mkdir -p /var/cache/eaccelerator chmod 0777 /var/cache/eaccelerator 

Restart php:

 /etc/init.d/php-fastcgi restart 

MEMCACHE


Install:

 apt-get install memcached 

Restart php one more time:

 /etc/init.d/php-fastcgi restart 


Have a good job!

btw, who cares, here you can see the tests of this complex on vds: 480 MHz / 256 Mb and 1280 MHz / 1024 Mb.

Source: https://habr.com/ru/post/67557/


All Articles