luni, 24 august 2009

Instalare Apache, MySQL si PHP in Linux

Acest tutorial isi propune sa-i indrume, pe cei doritori de a avea un server web in Linux, in pasii instalarii celor trei pachete gratuite si open-source, apache, Mysql si php.

In cazul de fata vom folosi:

Sistem de operare: SuSE Linux 10.1
Compilator: GCC 4.1.0
Server web: Apache 2.2.2
Server baze de date: MySQL 5.0.22
Interpretor: PHP 5.1.4
~> reprezinta promptul consolei

Procesele de instalare se realizeaza sub privilegii de root (su û Enter û *parola_de_root* û Enter)
Instalare Apache 2.2.2

Inainte de a incepe cu instalarea, e indicat (nu obligatoriu) sa cream un user si un grup sub care va rula Apache (astfel, fisierle create de Apache (eventual rezultatele executiilor scripturilor PHP) vor apartine acestui user, apache2 in cazul nostru, si afiliate acestui grup, www in cazul nostru):

~> groupadd www
~> useradd -g www apache2

In continuare vom obtine sursele serverului: httpd-2.2.2.tar.gz (aproximativ 6 MB)

Dupa ce am obtinut sursele, trecem la dezarhivarea lor in hardisk-ul local, deschizand o consola in directorul unde am salvat arhiva .tar.gz

~> tar -xzf httpd-2.2.2.tar.gz
~> cd httpd-2.2.2
~> ./configure --prefix=/usr/local/apache2 --enable-so

In exemplul de mai sus, prima linie reprezinta dezarhivarea surselor, a doua linie reprezinta schimbarea directorului curent in cel in care s-a realizat dezarhivarea iar a treia linie reprezinta configurarea surselor: --prefix reprezinta destinatia unde se va instala (si va fi accesibil) serverul Apache iar --enable-so activeaza modulul Dynamic Shared Object, pentru a putea dISPune pe viitor de module cum ar fi de exemplu mod_rewrite. Comanda ./configure accepta si multi alti parametri pe care ii poti afla ruland-o cu optiunea --help (./configure --help).

Odata terminata si aceasta etapa, sa trecem la instalarea efectiva a serverului Apache:

~> make
~> make install

In acest moment, daca totul a decurs fara erori (cel putin asa ar trebui in conditii normale), instalarea serverului Apache s-a incheiat. Urmeaza configurarea lui si a sistemului.

Prima modificare pe care o vom face este aceea a fisierului de configurare a serverului Apache, si anume httpd.conf

~> mcedit /usr/local/apache2/conf/httpd.conf

sau pentru "sadici":

~> vi /usr/local/apache2/conf/httpd.conf

Odata deschis fisierul, trebuie modificat astfel incat sa arate ca mai jos ("..." reprezinta linii ce trebuiesc ignorate):

ServerRoot "/usr/local/apache2"
...


User userul_tau_de_linux
Group www


...
DocumentRoot "/calea/catre/fisierele/tale"
...

Options FollowSymLinks
AllowOverride None

...
DirectoryIndex index.php index.html index.htm index.html.var

Modificarile de mai sus sunt minimale, dar suficiente pentru ce ne trebuie noua.

Acum setam drepturi pentru directorul unde vor fi stocate fisierele site-urilor noastre:

chmod -R 750 /calea/catre/fisierele/tale

Acestea fiind zise, sa testam ce am facut pana acum, pornind, oprind sau restartand serverul:

~> /usr/local/apache2/bin/apachectl start

~> /usr/local/apache2/bin/apachectl stop

~> /usr/local/apache2/bin/apachectl restart

In momentul de fata serverul Apache este configurat si ruleaza. Dar, de vreme ce vom reseta sistemul la un moment dat, sa facem modificarile necesare pentru ca acesta sa porneasca odata cu sistemul:

~> cp /usr/local/apache2/bin/apachectl /etc/init.d
~> chmod 755 /etc/init.d/apachectl
~> chkconfig --add apachectl
~> chkconfig --level 35 apachectl on

Acestea fiind zise, am terminat cu Apache-ul
Instalare MySQL 5.0.22

Inainte de toate trebuie sa ne asiguram ca userul "mysql" exista in sistem, daca nu cream unul (sub care serverul de MySQL va functiona):

~> groupadd mysql
~> useradd -g mysql mysql

Mai departe, obtinem sursele serverului: FTP://ftp.roedu.net/pub/mirrors/ftp.mysql.com/Downloads/MySQL-5.0/mysql-5.0.22.tar.gz" class="link" title="MySQL 5.0.22">mysql-5.0.22.tar.gz (aproximativ 18,6 MB)

In continuare, urmeaza dezarhivarea surselor, configurarea pentru instalare si, in sfarsit, instalarea:

~> tar -xzf mysql-5.0.22.tar.gz
~> cd mysql-5.0.22
~> ./configure --prefix=/usr/local/mysql-5.0.22 --with-charset=utf8 --with-collation=utf8_general_ci
~> make
~> make installc

Mai sus, am folosit --with-charset=utf8 si --with-collation=utf8_general_ci pentru a evita instalarea cu Swedish implicit.

Acum cream un link catre directorul in care s-a instalat MySQL-ul, pentru a ne fi usor sa facem referire pe viitor catre el (la instalarea PHP-ului, de exemplu):

~> ln -s /usr/local/mysql-5.0.22/ /usr/local/mysql

Urmeaza crearea fisierului my.cnf (fisierul de configurare al MySQL-ului). Acesta contine optiuni de control si securitate. Fisierul nu trebuie scris de la 0, existand patru variante gata facute in directorul support-files/ al kit-ului. Citeste-le pe rand si alege-l pe cel care crezi ca ti se potriveste cel mai bine. Eu am ales my-small.cnf pentru ca nu fac webhosting sau mai stiu eu ce... imi trebuie pentru un simplu localhost. Acum il copiem unde trebuie si ii dam drepturi de scriere etc:

~> cp support-files/my-small.cnf /etc/my.cnf
~> chown root /etc/my.cnf
~> chgrp root /etc/my.cnf
~> chmod 644 /etc/my.cnf

Acum editam fisierul si specificam ca serverul va rula sub privilegiile userului mysql.

~> mcedit /etc/my.cnf

sau pentru "sadici":

~> vi /etc/my.cnf

cauta linia [mysqld] si imediat sub ea insereaza o noua linie in care scrii:

user = mysql

Locul pe HDD-uri unde stau bazele de date se poate alege cand se editeaza fisierul my.cnf specificand parametrul datadir. (@whooper)

In continuare, pentru a functiona cum trebuie, MySQL are nevoie de o baza de date mysql . Pentru a o crea, ruleaza:

~> /usr/local/mysql/bin/mysql_install_db --user=mysql

Se va crea un director /usr/local/mysql/var/ care va contine bazele de date necesare. Tot aici vor fi stocate si restul de baze de date care se vor crea de-a lungul timpului. Directorul trebuie sa poata fi scris de catre userul "mysql".

Acum sa pornim serverul pentru prima data (daca acesta este un upgrade, de la o versiune mai veche ce deja exista instalata in sistem, nu uita s-o opresti pe aceasta din urma...):

~> /usr/local/mysql/bin/mysqld_safe --user=mysql &

apasa Enter pentru e reveni la cursor/prompt. Acum severul MySQL ar trebui sa mearga. Pentru a verifica, in urma comenzii de mai jos, trebui sa primesti raspuns de la server cu niste informatii legate de el:

~> /usr/local/mysql/bin/mysqladmin version

Conectarea la serverul MySQL se face cu comanda:

~> /usr/local/mysql/bin/mysql -u root

Vei primi un mesaj de intampinare iar promptul se va schimba in mysql>

Acum sa setam parola de root, inainte de orice alta operatiune:

mysql> DELETE FROM mysql.user WHERE User = '';
mysql> FLUSH PRIVILEGES;
mysql> SELECT Host, User FROM mysql.user;

va fi afisat un tabel cu doua coloane si doua randuri. Cauta randul ce contine root in coloana User si altceva in afara de localhost in coloana Host . Acel altceva este numele gazdei MySQL (host_name)

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('parola_noua');
mysql> SET PASSWORD FOR 'root'@'acel_altceva' = PASSWORD('parola noua');

Acesta este super-utilizatorul ce va avea drepturi peste toate bazele de date existente sau viitoare.

Acum, ca am terminat si cu asta, sa

mysql> quit;

Urmatorul pas este reponirea serverului MySQL, modificarile necesare fiind realizate:

~> /usr/local/mysql/bin/mysqladmin -u root -p shutdown
~> /usr/local/mysql/bin/mysqld_safe --user=mysql &

La fel ca la Apache, sa-l facem sa porneasca singur la start-up. In directorul unde sunt sursele dezarhivate ruleaza:

~> cp support-files/mysql.server /etc/init.d/mysql
~> chmod 755 /etc/init.d/mysql
~> chkconfig --add mysql
~> chkconfig --level 35 mysql on

Am terminat si cu MySQL, ne-a mai ramas...
Instalare PHP 5.1.4

Vom instala PHP-ul ca modul pentru Apache, astfel fiind intializat la pornirea serverului.

Obtinem sursele serverului: php-5.1.4.tar.gz (aproximativ 7,9 MB)

Decomprimam si configuram:

~> tar -xzf php-5.1.4.tar.gz
~> cd php-5.1.4
~> ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --enable-module=so --enable-bcmath --enable-calendar --with-curl --enable-exif --enable-ftp --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local/png --with-gettext --with-pear --enable-sockets --with-ttf --with-freetype-dir=/usr/include/freetype --enable-gd-native-ttf --with-zip --with-zlib

Primii doi parametri stabilesc caile de acces, iar al treilea specifica si compilarea cu suport pentru MySQL (de vreme ce incepand cu versiunea 5 nu mai este implicit). Pentru restul de parametri ai la dispozitie ./configure --help

In continuare

~> make
~> make install

Toate schimbarile necesare in httpd.conf (fisierul de configurare al lui Apache) ar trebui sa fie facute deja, dar, pentru orice eventualitate, verifica daca urmatorele linii se regasesc acolo (Daca nu exista, adauga-le manual. ):

LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php

Urmeaza crearea fisierului php.ini , fisierul in care se configureaza modul in care ruleaza PHP. Alege din fisierele gata facute (in directorul in care se gaseste kit-ul) si copie-l in directorul /lib din directorul unde s-a instalat PHP:

~> cp php-5.1.4/php.ini-recommended /usr/local/php/lib/php.ini

iar daca ai nevoie sa editezi fisierul php.ini:

~> mcedit /usr/local/php/lib/php.ini

sau pentru "sadici":

~> vi /usr/local/php/lib/php.ini

Ne-a mai ramas sa restartam serverul Apache

~> /usr/local/apache2/bin/apachectl restart

Ca sa verifici daca totul e in regula, creeaza un fisier test.php



si acceseaza in browser http://linux/test.php sau http://localhost/test.php sau http://127.0.0.1/test.php

Asta este tot. Acum ai un server web la tine in calculator, functional in parametri.