Servidor WEB con PHP y MySQL en Linux Fedora

Este post, pretende mostrar la manera en la cual se levanta y configura un servidor WEB en Fedora, que contenga PHP (con librería de gráficos GD), MySQL y se pueda conectar con servidores externos MS SQL Server y Oracle.

( NOTA: Todo el levantamiento se realizo con Fedora Core 11 desde línea de comandos, pero ya estoy realizándolo con Fedora Core12, cuando esté listo cambiare esta nota. )

Disculpen la tardanza, por fin puedo corroborar que la instalacion de Fedora Core 12 es casi identica a la presentada en el presente tutorial, solo quisiera agregar un par de detalles, primero, despues de intentar la instalacion de FC12 al final marcaba un error con un complemento de audio pero solo bastaba reiniciar sacar el disco de instalación e iniciaba "normal", y la tarjeta de red no podia comunicar no conectaba a la red y mucho menos a internet, despues de mucho investigar en la red resulto que el problema fue debido a que se me ocurrio agregar 2 procesadores virtuales en lugar de 1 y ver el resultado, pues ya supe el resultado, por consiguiente una maquina virtual para linux, 1 procesador sera el maximo que les recomiendo; atro detalle fue que no me permitio crear un grupo por linea de comandos, marcaba un error de que ese nombre no era valido, pero ya no investigue mas al respecto, decidi realizarlo por medio de la interfaz grafica :S. A parte de esto todo va viento em popa, seguire trabajando el servidor y si detecto algo actualizare el mismo.

Una vez instalado el Sistema Operativo, con las opciones de servidor instaladas, se procede a levantar los servicios que se utilizaran para el sitio, un servidor FTP, un servidor MySQL y el servidor apache con PHP y los módulos de Gráficos, conexiones a MS SQL Server y conexiones a Oracle.

Para levantar todos los servicios recomiendo ampliamente realizar todos los procedimientos con root, para que no haya problemas de permisos entre lo instalado y los servicios, por consiguiente nos logueamos con algún usuario normal y en línea de comandos utilizamos el comando su para cambiarnos a root.

Servidor FTP


El servidor ftp se inicia de la siguiente manera: service vsftpd start
Se ejecuta el siguiente comando para que se inicie cuando arranque el sistema: chkconfig vsftpd on

Ahora se configura el servidor ftp, para esto se edita el archivo /etc/vsftpd/vsftpd.conf

Se deberán cambiar/agregar las siguiente opciones

Para permitir conectarse remotamente con los usuarios locales:
anonymous_enable=NO
local_enable=YES


Para permitir subir y crear archivos y directorios:
write_enable=YES

Para dar permiso especifico a los archivos creados ( 0002 xor 0777 = 0775 )
local_umask=0002
file_open_mode=0777


Para cambiar al propietario se pueden agregar/modificar estas líneas:
chown_uploads=YES
chown_username=Administrador


Agregamos excepción al puerto 21 al cortafuegos para ellos utilizamos la aplicación setup:

Configuracion del firewall -> Personalizar –> Seleccionar el puerto ftp -> Cerrar -> Aceptar -> Si -> Salir

Tabien agregaremos excepciones al selinux, para que permita pasar las reglas del ftp:

setsebool –P ftp_home_dir=1
setsebool -P allow_ftpd_full_access 1


Para aceptar los cambios será necesario reiniciar el servidor ftp, esto se hace con el siguiente comando:
service vsftpd restart



Servidor Apache


El servidor Apache se inicia de la siguiente manera: service httpd start
Se ejecuta el siguiente comando para que se inicie cuando arranque el sistema: chkconfig httpd on

Ahora ya está listo nuestro servidor web con php, el directorio default es /var/www/html/

Será necesario dar permisos a esta carpeta y todos los archivos que aquí se escriban, para que todos los usuarios puedan leer y solo un cierto grupo pueda modificarlos.
Para crear usuarios que puedan modificar el sitio web, necesitamos que tengan como grupo principal al grupo que modifica el sitio web.
Creamos un grupo el cual tendrá privilegios para crear y modificar en el sitio web: groupadd DesarrolloWEB
Agregar un usuario al grupo DesarrolloWEB: gpasswd -a Administrador DesarrolloWEB
Cambiamos el grupo principal del usuario Administrador: usermod -gDesarrolloWEB Administrador
Quitamos al usuario Administrador de su grupo autocreado: gpasswd -d Administrador Administrador
Quitamos el grupo al que pertenecía: groupdel Administrador
Para crear un usuario que pertenezca a este grupo: useradd -N -gDesarrolloWEB -pPASSWORD USUARIO

Con este comando cambiamos al grupo al que pertenece el directorio html y con -R se hace recursivo sobre todos los directorios que estén dentro de html:
sudo chown root: DesarrolloWEB /var/www/html -R

Ahora este comando para cambiar los permisos y que todo el grupo DesarrolloWEB pueda escribir en el directorio:
chmod 775 /var/www/html -R

el permiso 775 implica Leer, Modificar para usuario root y todos los miembros del grupo DesarrolloWEB y leer/ejecutar para el resto de los usuarios.

En caso de ser migración de otro sitio web a este, será necesario ejecutar ese último comando cuando se copien los archivos del servidor anterior para reemplazar los permisos anteriores por los del nuevo Usuario/grupo (no aplica si se suben por FTP, ya que los permisos ya se especificaron en la configuración de VSFTPD).

Agregamos excepción al puerto 80 al cortafuegos para ellos utilizamos la aplicación setup:

Configuración del firewall -> Personalizar –> Seleccionar el puerto http -> Cerrar -> Aceptar -> Si -> Salir

Para poder subir archivos via POST, será necesario agregar esta excepción al SELINUX:

setsebool –P httpd_can_network_connect=1



Servidor MySQL


El servidor MySQL se inicia de la siguiente manera: service mysqld start
Se ejecuta el siguiente comando para que se inicie cuando arranque el sistema: chkconfig mysqld on

Ahora se asigna la contraseña de root, para ello utilizaremos el siguiente comando

[root@www Instalar]# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('mypass') WHERE User='root';

Iniciamos sesión con root:

[root@www Instalar]# mysql -u root

Probamos creando una base de datos
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.22 sec)

Ahora damos permiso a nuestro usuario de MySQL que se conectara desde nuestro sitio web:
mysql> GRANT ALL PRIVILEGES ON test.* TO 'usrweb'@'localhost' IDENTIFIED BY 'mypass' WITH GRANT OPTION;
Query OK, 0 rows affected (0.19 sec)

Si se quiere administrar MySQL remotamente sera necesario darle permiso al usuario de esta forma (el % indica que será desde cualquier sitio ya sea local o remotamente):
mysql> GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%' IDENTIFIED BY 'contraseña' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

Hay que abrir el puerto 3306 para la administración remota.

En caso de que sea una migración de otro sitio, podemos exportar los datos de la siguiente manera:

Iniciamos sesión con root:

[root@www Instalar]# mysql -u root

En este ejemplo se importara una base de otro sitio, así que después de crear la base, las tablas se importaran de un dump.

Hacemos el respaldo de la base anterior:

mysqldump --opt -h SERVIDOR -u USER -p test | gzip -9 > FILENAME.sql.gz

Movemos el archivo al nuevo servidor y desempaquetamos.

gzip -d 2009_10_15_test.sql.gz

nos logueamos a mysql con root y nos cambiamos al a base donde se importaran las tablas
mysql> use test;
y ejecutamos el siguiente comando
. 2009_10_15_test.sql

El . Indica que se inicio mysql en el mismo directorio donde está el dump de no ser así se tendrá que indicar la ruta completa.



Librerias adicionales para PHP


Si se requieren librerías adicionales, será necesario instalarlas, para saber que opciones se tienen instaladas, se puede crear una pagina php con la siguiente función php_info();

En este vaso se muestran las librerías que son agregadas adicionalmente a las que fueron compiladas con el sistema
“Aditional .ini files parsed”

Para nuestro servidor requeriremos de las librerías de: graficos “GD”, MS SQL Server “mssql”, y Oracle “oci8”.

La librería de graficos se instala de la siguiente manera:

yum -y install php-gd


Conectando a MS SQL Server


Como conectar a un servidor MS SQL Server desde PHP.

Ahora nos conectaremos a un servidor Microsoft SQL Server.

Instalamos la siguiente librería php: yum -y install php-mssql

La cual nos instalara la librería php para conectarse por medio de FreeTDS y este ultimo si no está instalado.

Ahora configuraremos FreeTDS para que pueda ver nuestro servidor, el archivo de configuración de FreeTDS esta ubicado en /etc/freetds.conf

Descomentaremos el archivo dump del archivo de configuración y agregaremos nuestro servidor a la lista de servidores de FreeTDS:

#ServidorMSSQL
[ServerMSSQL]
host = “IP DEL SERVIDOR MSSQL”
port = 1433
tds version = 7.0


Ahora verificaremos que php pueda conectarse, para esto realizamos un documento php y lo visualizamos desde el navegador:

<?php
$enlace = mssql_connect('MiServidor', 'usuarioSQL', 'contraseña');
if(!$enlace)
echo "<br>Fallo el enlace con MSSQL";
else
echo "<br>OK el enlace con MSSQL";
?>


En caso de que no conecte se pueden hacer las siguientes pruebas:

Conectar con el servidor MS SQL Server por medio de línea de comandos de FreeTDS:

tsql -S ServerMSSQL -U USUARIO -P CONTRASEÑA

Si lo anterior falla, verificar la conexión con el servidor MS SQL Server, para saber si se tiene acceso al puerto del servidor se utilizara el siguiente comando:

telnet IP_DEL_SERVIDOR_SQL PUERTO

En caso de no tener respuesta, el problema podría ser de que el puerto 1433 este bloqueado en el firewall del servidor SQL Server.

Si hay respuesta en el comando anterior, verificamos si la conexión no se realiza por algún error en el archivo de configuración o problemas de permisos entre httpd y los archivos de configuracion FreeTDS :

tsql -H hostmachine -p port -U username -P password

Si este comando se conecta de manera satisfactoria, será necesario revisar los archivos de configuración de FreeTDS y los permisos entre el usuario que gestiona http y las librerías de FreeTDS.



Conectando a ORACLE


Como conectar a un servidor Oracle desde PHP.

Ahora nos conectaremos a un servidor Oracle.

Primero será necesario instalar 2 paquetes de Oracle (instantclient basic é instantclient devel) que nos servirán como clientes para accesar a la base de datos, estos se descargan de la siguiente página:

http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html

Ahora se instalan de la siguiente manera (en este caso la versión puede variar así que se instala la versión que se haya descargado de la pagina):

rpm -Uvh oracle-instantclient11.2-basic-11.2.0.1.0-1.i386.rpm
rpm -Uvh oracle-instantclient11.2-devel-11.2.0.1.0-1.i386.rpm


Ahora instalamos las librerías para enlazar php con Oracle, el que utilizaremos será el módulo OCI8 pero para poderlo instalar necesitamos instalar antes PEAR, este lo instalaremos de la siguiente manera:

Dirigirse a la siguiente pagina:
http://pear.php.net/go-pear

Y guardar la pagina como “go-pear.php

Ejecutar el comando “php go-pear.php” lo cual iniciara la instalación de pear:

[root@www Instalar]# php go-pear.php
Welcome to go-pear!

If you wish to abort, press Control-C now, or press Enter to continue:
HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none:

Presionar enter en ambas preguntas (o si tiene proxy especificarlo) y en cierto punto aparecerá un menú parecido al siguiente, es importante tomar en cuenta esto, ya que esto decidirá donde queda instalado el comando pecl el cual instalara el modulo OCI8 (en este ejemplo se especifico /etc/PEAR para la variable 1).

1. Installation prefix ($prefix) : /etc/PEAR
2. Temporary files directory : $prefix/temp
3. Binaries directory : $prefix/bin
4. PHP code directory ($php_dir) : $prefix/PEAR
5. Documentation base directory : $php_dir/docs
6. Data base directory : $php_dir/data
7. Tests base directory : $php_dir/tests

Enter para confirmar y preguntara si acepta instalar modulos adicionales se acepta.

Would you like to alter php.ini </etc/php.ini>? [Y/n] :

Si se desea agregar automáticamente la ruta de la librería dinámica al php.ini se acepta. Con esto deberá haber instalado PEAR.

Ahora que está instalado PEAR, ya podemos instalar el modulo OCI8,
Previamente será necesario instalar el modulo devel de php:

yum -y install php-devel

Ejecutamos el comando pecl, como aun no hemos agregado el directorio bin de PEAR a la variable de entorno será necesario usar la ruta completa del binario donde decidimos instalar PEAR:

/etc/PEAR/bin/pecl install oci8

En cierto punto pedirá especificar el directorio de librerías de Oracle, en esta versión que se está instalando aparece en el directorio /usr/lib/oracle/11.2/client/lib, como es un instant client, le especificamos ambos datos:

Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :

instantclient,/usr/lib/oracle/11.2/client/lib


Al finalizar aparecerá algo parecido a esto:

Build process completed successfully
Installing '/usr/lib/php/modules/oci8.so'
install ok: channel://pecl.php.net/oci8-1.3.5
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini

Agregamos la extensión dinámica al archivo de configuración php.ini en el bloque Dynamic Extensions:

extensión=oci8.so



Realizamos una pagina php de prueba para conectar a Oracle:

<?php
$conn = oci_connect('USER', 'PASS', 'IP/BASE_DE_DATOS');
if(!$conn)
echo "<br>Fallo el enlace con Oracle";
else
echo "<br>Enlace con Oracle OK<br>";
$consulta = "SELECT 1 AS UNO, 2 AS dos FROM DUAL";
$resultado = OCIParse($conn, $consulta);
oci_execute ($resultado);
while ($row = oci_fetch_assoc($resultado))
echo $row['UNO'] . "|||" . $row['DOS'] ."<br>";
?>

Última modificación: jueves, 7 de junio de 2018, 07:39