NginX – Php – MySql – στήσιμο σε Debian lenny

featured-nginx-setup

NginX logo

Οδηγός εγκατάστασης και ρύθμισης του nginx (προφέρεται engine X) σε Debian Lenny (stable). Στόχος μας είναι να στήσουμε όλα τα απαιτούμενα για το στήσιμο wordpress σε ένα δικό μας web server. Ο nginx θα ρυθμιστεί ώστε να εξυπηρετεί πολλαπλά domains (virtual hosts). Θα προσπαθήσουμε να κάνουμε ό, τι καλύτερο μπορούμε αμέσως μόλις επιστρέψουμε από τις διακοπές μας best obx rentals, Θα σας κρατήσουμε ενημερωμένους.
Υποθέτουμε ότι έχουμε ένα μηχάνημα με Debian Lenny και έχουμε πρόσβαση μόνο στην κονσόλα του μηχανήματος (μέσω πχ ssh). Το μηχάνημα δεν έχει γραφικό περιβάλλον. Για κάθε domain πχ www.domain01.gr που φιλοξενείται στο server μας έχουμε και τον αντίστοιχο χρήστη domain01. Θα υποθέσουμε ότι θέλουμε δύο domain, τα:
www.domain01.gr
www.domain02.gr

1. Ο εύκολος τρόπος – nweb script
Για τους «τυχερούς» χρήστες Debian ή Debian based διανομών το wiki του nginx (http://wiki.nginx.org/NginxResources) μας πληροφορεί για την ύπαρξη του:
nWeb Script – Easy installer script for Debian / Ubuntu (Installs nginx, with PHP support and MySQL)

Όπως ξεκάθαρα λένε και οι οδηγίες του site αρκούν τα εξής:

wget http://thehook.eu/downloads/nweb150.tgz (κατέβασμα απαραίτητων αρχείων – 3,9kb)
tar xzvf nweb150.tgz (αποσυμπίεση αρχείων)
cd nweb (μετάβαση στο φάκελο που αποσυμπιέστηκε το script)
sh nweb.sh (εκτέλεση του script – απαιτεί δικαιώματα root)

(το τελευταίο βήμα απαιτεί δικαιώματα root – άρα ή πρέπει να έχετε από πριν δώσει su root για να γίνετε root ή πχ στο ubuntu να δώσετε sudo sh nweb.sh)

Το πρόβλημα με αυτή τη μέθοδο είναι ότι δεν ρυθμίζει το nginx για πολλαπλά domains και ότι αν εκτελεστεί σε Debian Lenny θα εγκαταστήσει την legacy έκδοση του nginx. Μια και θέλουμε και να κάνουμε παραπέρα ρυθμίσεις στον nginX και θα προτιμήσουμε μια πιο «φρέσκια» έκδοση, θα αναφέρουμε πως μπορούμε να κάνουμε την ίδια δουλειά «χωρίς» το nweb script.

2. Βήμα – βήμα εγκατάσταση

Παρόλο που δεν θα χρησιμοποιήσουμε ακριβώς το script το πρώτο μας βήμα είναι να το κατεβάσουμε γιατί θα χρησιμοποιήσουμε τα έτοιμα configuration files που έχει. Οπότε ξεκινάμε με ένα

wget http://thehook.eu/downloads/nweb150.tgz
tar xzvf nweb150.tgz
cd nweb

Στο φάκελο βλέπουμε το ίδιο το script (διαβάζοντάς το επί της ουσίας κατάλαβα τι πρέπει να κάνω για να στηθεί ο nginx), το readme, το changelog και το φάκελο inc. Σε αυτό το φάκελο είναι δύο αρχεία που θα χρειαστούμε, το defaultsite και το nginxconf.

Για την εγκατάσταση του nginx αρκεί ένα
# apt-get install nginx

-ΠΡΟΣΟΧΗ-
σε debian lenny αυτό εγκαθιστά την έκδοση 0.6.32. Αν θέλετε μια πιο φρέσκια έκδοση μπορείτε να προσθέσετε προσωρινά τα αποθετήρια του testing και να εγκαταστήσετε την έκδοση 0.7.64 – το μόνο extra που θα χρειαστείτε από το testing είναι ένα upgrade του libpcre3. Διαλέγετε και παίρνετε!

Θα χρειαστούμε τώρα και το spawn-fcgi….
3 τρόποι….

  1. εγκαθιστούμε το lighthttpd
  2. προσθέτετε προσωρινά τα αποθετήρια του testing και δίνετε
    #apt-get install spawn-fcgi
    (αυτά ΔΕΝ τα έχω κάνει και δεν είμαι σίγουρος αλλά 99,9% πρέπει μετά να μετακινήσετε το αρχείο /usr/bin/spawn-fcgi ή το /usr/bin/spawn-fcgi.standalone για την 2η περίπτωση στη θέση /usr/local/bin/spawn-fcgi )
  3. χειροκίνητα….
    apt-get install build-essential
    wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
    tar xvfz spawn-fcgi-1.6.3.tar.gz
    cd spawn-fcgi-1.6.3 && ./configure
    make
    # cp ./src/spawn-fcgi /usr/local/bin/spawn-fcgi

-ΠΡΟΣΟΧΗ-
Το debian βάζει το spawn-fcgi στο /usr/bin. To nweb.sh το τοποθετεί στο /usr/local/bin. Για να δουλεύουν οι ρυθμίσεις που θα προτείνουμε σε όσους εγκαταστήσουν μέσω του script θα το βάζουμε και εμείς παντα στη θέση /usr/local/bin.

έπειτα προσθέτουμε στο αρχείο /etc/rc.local τις εξής γραμμές (πριν το exit 0):

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9001 -u domain01 -g domain01 -C 1 -f /usr/bin/php5-cgi -P /var/run/fastcgi-php01.pid

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9002 -u domain02 -g domain02 -C 1 -f /usr/bin/php5-cgi -P /var/run/fastcgi-php02.pid

Aυτές οι γραμμές θα ξεκινάνε δύο fast-cgi servers οι οποίοι θα τρέχουν πρακττκά την php. Οι παράμετροι που δίνουμε είναι:
-a 127.0.0.1 –> η διεύθυνση του fast-cgi server
-p 9001 –> το port στο οποίο θα ακούει
-u domain01 –> με τι user id θα ξεκινήσει το proccess
-g domain01 –>με τι group id θα ξεκινήσει το proccess
-C 1 –> πόσα extra proccesses μπορεί να ξεκινήσει – αφού θα εξυπηρετεί ένα site το 1 – 2 είναι λογικές τιμές
-f /usr/bin/php5-cgi –> ποιο cgi θα τρέξει (εμείς θέλουμε την php)
-P /var/run/fastcgi-php01.pid –> το pid file του proccess

Με αυτό το στήσιμο εξασφαλίζουμε ότι η php του ενός χρήστη δεν θα έχει δικαιώματα ούτε στα αρχεία του άλλου ούτε στα «κρίσιμα» αρχεία του συστήματος.

Περνάμε τώρα στην εγκατάσταση της php σαν cgi.
Αν έχετε ήδη php στο σύστημά σας πχ. σαν apache module αρκεί ένα
#apt-get install php5-cgi

αν δεν έχετε ήδη php το nweb script προτείνει τα εξής πακέτα:
#apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

μπορείτε να κρίνετε τι σας χρειάζεται και τι όχι και να πράξετε ανάλογα.

Ανάλογα για τη mysql αρκεί ένα
#apt-get install mysql-server

Τέλος αντιγράφετε τα δύο αρχεία του nweb script, τα defaultsite και nginxconf στις θέσεις
/etc/nginx/sites-available/default και
/etc/nginx/nginx.conf
αντίστοιχα. Καλό είναι να κρατήσετε πριν ένα backup των αρχικών default και nginx.conf

Είμαστε σχεδόν έτοιμοι! Το μόνο που χρειάζετε είναι να ρυθμίσουμε τον server μας ώστε να χειρίζετε σωστά τα δύο virtual domains

Για όσους δεν γνωρίζουν το debian κρατάει όλα τα configurations στο φάκελο /etc/nginx/sites-available. Όποιο site θέλουμε να ενεργοποιήσουμε αρκεί να αντιγράψουμε το αντίστοιχο αρχείο στο φάκελο /etc/nginx/sites-enabled.

Αν μεταφερθούμε στο φάκελο /etc/nginx/sites-available θα δούμε μόνο το αρχείο default. Το αντιγράφουμε μία φορά για κάθε site
#cp default domain01
#cp default domain02

και τροποποιούμε τα αρχεία αυτά ώστε να γράφουν τα εξής:

server {                                                        
        listen   80;                                            
        server_name  domain01.gr www.domain01.gr;              
        access_log  /home/domain01/logs/ngaccess.log;
        root   /home/domain01/public_html;           
        index  index.html index.htm index.php;      

        # Set this to off if you're hosting more than one site
        server_name_in_redirect  off;                         

        # SEO friendly URLs for WordPress
        #                                
        #location /wordpress/ {          
        #        if (!-e $request_filename) {
        #                rewrite ^(.*)$ /wordpress/index.php?q=$1 last;
        #        }                                                     
        #}                                                             

        #error_page  404  /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
                root   /var/www/nginx-default;
        }
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9001;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /home/domain01/public_html$fastcgi_script_name;
                include fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root concurs with nginx's one
        #
        location ~ /\.ht {
                deny  all;
        }
}

Όπου βλέπετε γκρίζες γραμμές είναι οι αλλαγές που πρέπει να κάνετε, προσέξτε ότι για το domain02 πρέπει να αλλάξετε εκτός από τα domain01 σε domain02 και το
fastcgi_pass 127.0.0.1:9001; σε
fastcgi_pass 127.0.0.1:9002;

Τώρα δημιουργούμε link των δύο αρχείων στο φάκελο sites-enabled
ln -s /etc/nginx/sites-available/domain01 /etc/nginx/sites-enabled/domain01
και αντίστοιχα για το domain02

Είμαστε έτοιμοι!!!
Δώστε
#/etc/rc.local
για να ξεκινήσουν τα fast-cgi proccesses και

#/etc/init.d/nginx restart
για να γίνει επανεκίνηση του nginx και τελειώσατε!

Σχολιάστε

*