Qué vamos a ver aquí
- En esta parte del tema vamos a empezar a realizar instalaciones en nuestro equipo
- Vamos a instalar una serie de programas para realizar programación web en el servidor
- Seguramente volveremos a realizar instalaciones de nuevo, por lo que aunque es básico, conviene no olvidarlo.
|
Herramientas a instalar
- Servidores
- Módulos
- Agregar a apache mn módulo de php para que apache sepa interpretar el código php
- Agregar a php un módulo de mysql para que php sepa acceder a mysql.
- Más módulos que iremos instalando según vayamos necesitando
|
Herramientas a instalar
- Java: Lenguaje de programación seudocompilado que corre en máquinas virtuales de java. https://www.java.com/es/
- Netbeans : EDI (Entorno de Desarrollo Integrado), entorno para desarrollar aplicaciones usando diferentes lenguajes de programación. https://netbeans.org/
- PHPStorm : EDI (Entorno de Desarrollo Integrado), entorno para desarrollar aplicaciones usando diferentes lenguajes de programación. El entorno no es gratuito, pero se puede conseguir una licencia gratuita de estudiante *https://www.jetbrains.com/estore/students/
- XDebug: Es una extensión de PHP para hacer debug con herramientas de depuración tradicionales. https://xdebug.org/
|
Herramientas a utilizar
- Para descargar php storm, podemos usar 'snap'.
- snap es un nuevo concepto que aparece en ubuntu 16.0 y trata de realizar instalaciones resolviendo todos los posibles problemas de dependencias, haciendo que sea más sencillo instalar.
- Para ello ejecutamos:
sudo snap install phpstorm --classic
- En cualquier caso se puede visitar la página donde tendremos también disponible este IDE para windows.
https://www.jetbrains.com/es-es/phpstorm/download/
- Tambien podemos descargar el fichero de configuración, descomprimirlo y ejecutar el instalador
- Para ello vamos a la página oficial, o bien lo bajamos directamente
$ wget https://download.jetbrains.com/webide/PhpStorm-2020.2.2.tar.gz
- El direcotorio de instalacion recomendado es /opt, para instalar PhpStorm
$ sudo tar xvfz PhpStorm-2020.2.2.tar.gz -C /opt/
- x indica que vamos a extraer.
- f indica que use un archivo.
- z indica que debe operar sobre un archivo gzip.
- v indica que lo haga de forma recursiva(vervose) cambie el directorio antes de ejecutar cualquier acción.
$ cd opt/PhpStorm-181.5281.19/bin
Ejecutamos el script de instalación:
$ ./phpstorm.sh
- Activar la licencia de php a través del insitituto
- Abrimos el EDI PhpStrorm. Si es la primera vez, ya nos pedirá que aportemos la licencia o que iniciemos la versión de 30 días gratis, si no podemos acceder a registrarnos desde el menú de help
- Entonces se visualizará una página y establecemos que queremos se se active la licencia a través de un servidor de licencias. El servidor tiene la url https://cpilosenlaces.fls.jetbrains.com
- Entonces presionamos la opción de Activate
- Tendremos que registrarnos con una cuentan el la página de jetbrains, a la que nos redirige
- La cuenta tiene que ser de gmail para poder validar la licencia
Apache
- Necesitamos tener un servidor Web
- Apache va a ser nuestra opción iActualmente estamos en la versión 2.4
- Proyecto de código abierto, mirar la web
- Importante conocer un poco de la configuración
|
- En caso de instalar en windows, se debe instalar XAMP o WAMP. Se recomienda usarlo en ubuntu
- Mis apuntes están basados en ubunut para la instalación y funcionamiento del servidor, si bien es cierto que este módulo es de programación, en varias ocasiones tenemos que acutuar con el servidor
- Instalamos apache
- Se instala directamente del repositorio de ubuntu
sudo apt-get install apache2
- Para verificar su instalación abrimos un navegador e invocamos al servidor, que en este momento será localhost, 127.0.0.1 o la ip que tengamos en nuestro equipo
Actividad
- Probamos a ver si responde nuestro servidor web (En nuestro caso localhost
- Vemos el fichero de configuración
|
- Podemos ver el estado del servicio, así como pararlo, arrancarlo recargarlo, ...
- Buscamos el directorio donde están los ficheros de configuración
- Aquí un listado del contenido del directorio donde está toda la configuración
Directorio de configuración
|
- Directivas de configuración
- El servidio (como todos el linux), se configura con directivas de configuración
- Son variables que tengo en un fichero y especifican el comportamiento de este programa
- Por ejemplo cuál es el directorio dónde apache va a buscar los recursos solicitados
Modificar el document root
- Edita el fichero de configuración 000-default.conf ubicado en /etc/apache2/sites-enabled con privilegios de root
sudo gedit /etc/apache2/sites-enabled/000-default.conf
- Modifica la direciva DocumentRoot
sudo service apache2 restart
|
- Listado de los ficheros log para conocer incidencias y notificiones
- No es objetivo profundizar en estos ficheros, pero sí es importante conocer
- apache.conf
fichero de configuración general.
en él se incorporar muchos otros ficheros de configuración.
Servidor Web
- Proceso de comunición tcp/ip
- Es importante entender el concepto de protocolo.
Protocolo
- Un programa que implementa una serie de reglas y normas para que dos partes diferentes se puedan comunicar.
|
- Un protocolo es un programa, pero solo el programa de nivel de aplicación vamos a gestinar (instalar, eliminar, configurar), el resto de software (protocolos de otros niveles), son parte del kernel del sistema operativo, a los que no tenemos acceso de gestionar, pero sí, a veces, de configurar, como estalbecer el número ip' dentro del protocolo ip o protocolo de internet.
- El Servidor
- La imagen anterior, muestra el proceso de comunicación tcp/ip entre dos dispositivos.
- El equipo que recibe la comunicación se conoce como servidor, por el hecho de que están ejecutándose en él diferentes programas servidores.
- Cada programa está escuchando por un puerto, que es quién le identifica, de modo que cuando la tarjeta de red recibe un paquete, datagrama o fragmento (un grupo de bits), si el nivel de red, decide que es él el destinatario, desde el nivel de transporte sabe a qué aplicación entregarlo.
Permisos de ficheros
Parar poder acceder a un fichero necesitamos tener una referencia a él (Tanto para escribir como para leer).
- Temas de permisos de apache
A pesar de que no somos administradores/as debemos tener conocimientos para ciertos temas.
Lo primero debemos tener claro es que cuando php le dice en el script a apache que actúe sobre el sistema de ficheros, es en última instancia el usuario apache quién quiere hacer la acciones
- Lee atentamente el siguiente cuadro y asegúrate de tener claro cada punto, si no, pregunta.
Puntos fundamentales sobre permisos
1.- En linux todo fichero tiene un propietario, y también todo proceso.
- El propietario del proceso es el usuario que lazó dicho proceso.
- Cuando un proceso quiere hacer algo sobre un fichero, el usuario que lanzó el proceso, debe tener permisos sobre el fichero para hacerlo.
- El usuario que lanza apache es www-data
- Para hacer a un usuario propietario de un fichero o a su grupo usamos la sentencia
sudo chown usuario:grupo fichero (-R) }}
(: *-R parámetro opcional que actuaría de forma recursiva.
- En php un directorio es igual que un fichero cuyo contenido son los ficheros y directorios que contiene.)
- Para dar permisos sobre un fichero a un usuario usamos la sentencia
sudo chmod permisos fichero (-R) }}
(:
- permisos' es un número de tres dígitos en octal, ver tabla de abajo.
- fichero al cual le queremos dar permisos, se puede usar * para especificar todos.
- -R parámetro opcional que actuaría de forma recursiva.
)
|
Número
|
Binario
|
Lectura (r)
|
Escritura (w)
|
Ejecución (x)
|
0
|
000
|
|
|
|
1
|
001
|
|
|
|
2
|
010
|
|
|
|
3
|
011
|
|
|
|
4
|
100
|
|
|
|
5
|
101
|
|
|
|
6
|
110
|
|
|
|
7
|
111
|
|
|
|
Por ejemplo:
chmod 766 file.txt # brinda acceso total al dueño
# y lectura y escritura a los demás
chmod 770 file.txt # brinda acceso total al dueño y al grupo
# y elimina todos los permisos a los demás usuarios
chmod 635 file.txt # Permite lectura y escritura al dueño,
# escritura y ejecución al grupo,
# y lectura y ejecución al resto
(: Recuerda que es el usuario apache el que ha de tener los permisos necesarios (leer(r),escribir (w), ejecutar (x))
Configuración de un servidor web
La configuración se basa en un VirtualHost.
VirtualHost
- Forma de configurar en una única máquina (una ip) Apache.
conjunto sitios web (1 o más)
basados en nombres de dominio (cada uno un nombre)
cada dominio su configuración independiente (directivas de apache)
|
- VirtualHost
- Una única ip, varios dominios
- Cada dominio configurado en el Virtualhost
- Cada VirtualHost su propia configuración
- Se configura a través de directivas de apache
- Mejor en fichero independiente en el directorio
- VirtualHost
- sites_enabled vs sites_available
Organización de los ficheros de configuración
- Tener todos los posibles sitios virtuales en el directorio sites-available
- Solo aquellos que quiero que estén activos establezco un enlace simbólico en el directorio sites-enabled
Tip: Solo los ficheros que haya en el directorio sites-enabled estarán activos
|
- VirtualHost
- Para crear un enlace simbólico
ln -s directorio/fichero_fisico directorio/fichero_enlace
- Podemos usar comando de apache
a2ensite <site>
a2dissite <site>
Algunas directivas importantes
- ServerName
Directiva que especifica el directorio base para buscar ficheros
- DocumentRoot
Directiva que especifica el directorio base para buscar ficheros
- DirectoryIndex
Nombre de fichero/s que se entregan por defecto al solicitar recurso
- <Directory ./../..> </Directory>
Para configurar de forma particular algún directorio dentr del sitio web de esta configuración
Ejemplo Confituracion virutalHost
- VirtualHost
- Los valores principales serían
#DocumentRoot Que es la ruta base de nuestro servidor web
#ServerName . Que es el nombre del host donde está nuestro servidor web
Cliente: varios nombres .. una ip
- Especificando varios nombres de host
- Un mismo host (ip), puede ser especificado con diferentes dominios (esto no puede ser al contrario).
- Como no vamos a entrar en configurar bind (DNS), modificaremos el fichero hosts
Debemos recordar que cuando queremos encontrar la ip de un dominio se siguen unos pasos
1.-Primero miramos en el fichero /etc/hosts
a ver si hay una traducción directo.
2.-Se mira en la caché.
3.-Se busca o pregunta a nuestro servidor dns que nos lo resuelva.
|
Pasos a realizar |
---|
- 1º Agregamos en la configuracion de apache los nuevos VirtualHost
- Creamos los ficheros de configuración en la carpeta correspondiente
/etc/apache2/sites-available/informatica.conf
/etc/apache2/sites-available/manuel.conf
/etc/apache2/sites-available/musica.conf
- En su contenido, especificamos los valores para DocumentRoot y para ServerName (comenta su significado).
Contenido de informatica.conf sin comentarios |
---|
<VirtualHost *:80>
ServerName www.informatica.com
DocumentRoot /var/www/informatica
</VirtualHost>
|
- Rebotamos el servicio (al haber cambiado el fichero de configuración)
sudo service apache2 restart
- 2º Creo los recursos en la web
- Hemos establecido que cuando se acceda a este servidor web con el nombre informatica.com se ha de ir a buscar los recursos a /var/www/informatica. Ahora debemos de crear esa estructura de carpetas, y ubicar ahí algún recurso (página html).
- Para realizar esta acción, debes de asegurarte de tener premisos de escritura en esta carpeta.
- 3º Modificamos el fichero /etc/hosts para la resolución de direcciones ip, aportando un nombre
</div>
- Agregamos las ip de los nombres, observa que la ip que pongo es la de loopback (127.0.0.1), o bien la ip que tenga asignada mi equipo
127.0.0.1 manuel.com
127.0.0.1 informatica.com
#127.0.0.1 musica.com
172.30.1.120 musica.com
Pregunta
- ¿Cómo puedo comprobar que está bien esta configuracioń de ip-nombres?
|
| </table>
}}
Crea 3 sitios web
- Crea 3 sitios web con los siguiente nombres
#www.informatica.dwes.es
#www.tuNombre.es
#www.musica.es
- Que cada uno de ellos vaya a buscar su fichero index.html a las carpetas respectivas
#/var/www/informatica
#/var/www/tuNombre
#/var/www/musica
|
(: Mira la sección de ejercicios donde verás una posible solución)
- Arrancar y parar el servido
- para parar y arrancar el servicio
sudo /etc/init.d/apache2 stop|start
- Siempre que modifiquemos la configuración, tenemos que rearmar el servicio
- Localizar el fichero de errores
- Muy importante, el servidor generará errores cuando no pueda procesar algo (incluido php)
Fichero de errores de apache
- /var/log/apache2/error.log
|
- Usa el comando tail -f para tenerlo abierto en caliente con las últimas líneas añadidas
tail -f /var/log/apache2/error.log
|
- Si quieres puedes crear un alias para no tener que escribir el comando completo
- Se recomienda, ya que con bastante frecuencia consultaremos los errores cuando no funcionen la aplicación
Crea un alias
- Edita el fichero oculto .basrc
- Añade el la última línea el comando
alias e="tail -f /var/log/apahce2/error.log"
- Vuelve a cargar el fichero (esto no hará falta cuando vuelvas a cargar el sistema)
- Ahora si escribes el alias e, se ejecutará el comando asignado
|
Instalar php y el módulo de php para apache2
- Ahora instalamos php como un módulo de apache2.
apt-get -y install php libapache2-mod-php
(: -y es para que no pregunte, un yes por defecto. Se pueden poner varios paquetes seguidos (en este caso 2: php y 'libapache2-mod-php)
- Posteriormente y según necesitemos otros módulos que los podemos dejar instalados ya
sudo apt-get install php-mcrypt php-soap php-mbstring
php-intl php-xml php-curl php-gd php-mysql
Breve Historia de php
- Rasmus Lerdorf
- Diseñó un CGI intérprete de scripts incrustados en las páginas web.
- Evita la compilación
- Evita la instalación
- Logra compatibilidad entre plataformas
- 1995 – PHP (Personal Home Page Tools)
- Zeev Suraski y Andi Gutmans
- 1998: PHP 3. PHP Hypertext Preprocessor
- Zend
- Motor Zend (núcleo de PHP reescrito)
- 2000: PHP 4
- Abstracción respecto al servidor
- Puede funcionar sobre cualquier servidor
- 2004
- Motor Zend 2
- PHP 5: OOP y MySQL: Un punto de inflexión real
- ¿Qué pasó con PHP 6?
- 2005: Se anuncia PHP 6
- Codificación Unicode
- Más complejo de lo esperado
- Tensión entre los desarrolladores por los retrasos
- 2010: Se lanza PHP 5.3 y se separa la codificación Unicode a otra rama
- PHP 5.3 es PHP 6 salvo por la codificación Unicode
- 2012: La mayoría de las mejoras en PHP 5.4.x no tienen ningún impacto sobre el código existente
- 2013: La extensión original MySQL está obsoleta en
- PHP 5.0. En su lugar, usar la extension MySQLi o PDO_MySQL.
- PHP 7.0.
- PHP 6 nunca llegó a lanzarse como una versión oficial
- 10/2015: Lanzamiento de la versión 7
- Para ver la historia http://php.net/manual/es/history.php
- Tenemos nuevas funcionalidades y pocas incompatibilidades
- Operador nave espacial <=>
- Operador ternario ??
- Clases anónimas
- Declaración en tipos de los parámetros y tipo de valor de retorno en funciones
- Restaurar el servicio
- Debemos restaurar el servicio para que los cambios tengan efecto en el servidor web
/etc/init.d/apache2 restart
Actividad
- Localiza el fichero de configuracion de php: php.ini
- Analiza el valor y significado de las siguientes directivas
- short_open_tags
- max_execution_time
- error_reporting
- file_upload
- upload_max_filesize
|
Herramientas a utilizar
Instalar mysql (cliente y servidor
</div>
- Debemos instalar mysql cliente y servidor
sudo apt-get install mysql-client mysql-server
- mysql
- Alternativamente podemos instalar maria
apt-get -y install mariadb-server mariadb-client
Actividad
- Qué diferencias hay entre los gestores de bases de datos mysql y maria
|
- Durante la instalación nos pedirá la contraseña de root
- Es importante recordarla, en caso de perderla probamos a intentar reestablecerla
- 1.- Primero entramos en el gestor sin passord
mysql --defaults-file=/etc/mysql/debian.cnf
- Recuperar contraseña root
- 2.- Reiniciar pass del "root" de MySQL (si lo hemos perdido)
-
mysql --defaults-file=/etc/mysql/debian.cnf mysql
mysql> update user set Password=password('password_nuevo') where User='root';
mysql> flush privileges;
- Probamos que todo ok.
- Ahora ya podríamos entrar y comprobarlo
probando mysql
- Prueba a entrar en la base de datos
- Crea una base de datos
- Crea una tabla con dos campos y añade un fila
- Comprueba que las filas se han creado correctamente
|
- Probrando el ejercicio
mysql -u root -p
'''insertamos la password'''
show databases:
create database NombreBD
show databases:
use NombreBD;
create table usuarios (nombre varchar(20), apellido varchar(20));
insert into usuarios values ("Manuel","Romero");
select * from usuarios
Instalar Xdebug
Abrimos con nuestro editor el fichero
sudo vim /etc/php5/apache2/php.ini
Añadimos el módulo de xdebug a la variable zend_extenxion de php
Actuliza los valores y verifica la ubicación del fichero
zend_extension=/usr/lib/php/7.2/<DATE+lfs>/xdebug.so
xdebug.remote_enable=on
- Con cuidado el nombre
- Recordad que <DATE+ĺfs> es un nombre de directorio que se habrá creado al instalar esta extensión.
- En el momento de la instalación en mi caso fue 20121212, no es una fecha, tiene que ver con la marca de la versión
- Si no funciona correctamente visita la página de referencia http://xdebug.org/wizard.php'
- Copia en el cuadro de texto la salida de phpinfo() o bien en línea de comandos php -i
Después sigue las instrucciones que te van indicando (Te prepara la instalación dependiente de versiones).
|
- Para terminar, vamos a completar la instalación.
- Esto es por si queremos ampliar nuestro desarrollo usando otras herramientos o ampliar las opciones de ver páginas.
- En este curso NO lo vamos a utilizar, de hecho, con html5 algunas de estas herramientas ya no se utilizan.
- Ubuntu restricted extras
Instalación de ubuntu
- Una instalación limpia de Ubuntu no permite ver Flash, QuickTime, WMV, aplicaciones Java, etc. *Ubuntu Restricted Extras es un paquete que incluye todo este software
- Este, por las siguientes razones:
- de patentes
- conflictos con la legislación de ciertos países
- Canonical
- la empresa madre de Ubuntu, no puede incluir por defecto en la distribución.
sudo apt-get install ubuntu-restricted-extras
|
Actividad
- Realiza la instalación en tu sistema
- Verifica que todo funciona correctamente
|
|