3
Índice
1. Infraestructura PHP2. Instalar PHP en Ubuntu3. Ejecutar PHP en Ubuntu4. Configurar phpStorm en Ubuntu5. Instalar PHP y configurar phpStorm en
Windows6. Instalar PHP y configurar phpStorm en Mac7. Entorno virtualizado del DIT8. Entorno en la nube9. Conclusiones
Entornos para ejecutar PHP
Servidor Web Interno
▣ Instalamos el intérprete de php (php5-cli)
▣ Nos proporciona un servidor web propio
Servidor Web Externo
▣ Instalamos un servidor web (ej. Apache2)
▣ Instalamos un módulo (php5-cgi) para procesar PHP
En la Nube
▣ Usamos un entorno con entorno LAMP instado
5
Entorno LAMP
Navegador Servidor Web Apache2+ extensión CGI PHP
o
Servidor Web Interno que viene en el intérprete PHP (sólo para desarrollo)
Servidor mySQL
puerto 80 puerto 3306
6
Servidor web
▣ Escucha en un puerto, en el que acepta conexiones http
▣ Normalmente, ese puerto es el puerto 80 □ Ej. http://localhost o http://localhost:80
▣ Si es otro puerto, debo indicarlo□ Ej. http://localhost:8080
8
Servidores Web: Alternativas
▣ Apache2 http://httpd.apache.org/ ▣ Nginx http://nginx.org/en/ ▣ Zend http://www.zend.
com/en/products/server▣ Appserver.io http://appserver.io/
9
Sistema Operativo del curso: Linux
▣ PHP puede utilizarse en cualquier entorno: Linux, MS-Windows, MacOS....□ Windows: http://www.wampserver.com □ Mac: ya instalado. Ejecutar php en terminal. Para
mySQL, http://www.mamp.info ▣ En este curso las instrucciones serán para
Linux en la distribución Ubuntu▣ Se puede instalar en Ubuntu/Mac/Windows
con un único paquete:□ https://www.apachefriends.org/download.html □ https://confluence.jetbrains.
com/display/PhpStorm/Installing+and+Configuring+XAMPP+with+PhpStorm+IDE#InstallingandConfiguringXAMPPwithPhpStormIDE-ChoosingtherightXAMPPedition
11
Paquete LAMP
▣ LAMP = Linux + Apache Web Server + MySQL/MariaDB + PHP/Perl/Python
▣ En Mac: MAMP, Windows: WAMP, en cualquier sistema operativo X: XAMP.
▣ En linux, puedes instalarlo con el paquete tasksel, lanzarlo y seleccionar LAMP server. Luego conéctate en un navegador a http://localhost:80 y verás el mensaje 'It works'
12
Instalar PHP
>sudo apt-get install tasksel>sudo tasksel
Seleccionar con cursores y espacio, y tabuladores para el botón Aceptar
Nos pide contraseña de mysql (apuntarla!)
13
Comprobar puertos de servidores
> sudo netstat -pluntConexiones activas de Internet (solo servidores)Proto Recib Enviad Dirección local Dirección remota Estado PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* ESCUCHAR 9620/mysqld tcp6 0 0 :::80 :::* ESCUCHAR 11926/apache2
15
Iniciar / reiniciar /parar servicios
▣ Sintaxis general
▣ Ej. Servidor web apache2 y mysql
> sudo service <servicio> start|restart|shutdown
> sudo service apache2 start
> sudo service apache2 restart
> sudo service apache2 stop
> sudo service mysql start
> sudo service mysql stop16
Configurar apache2
▣ Ficheros de configuración /etc/apache2□ apache2.conf: configuración global□ ports.conf: puertos de escucha□ ficheros de configuración en mods-enabled, conf-
enabled y sites-enabled: configuraciones para gestionar módulos, fragmentos de la configuración global y hosts virtuales, respectivamente
□ Los directorios x-enabled contienen enlaces simbólicos a configuraciones de x-available: mods-available, conf-available, sites-available
17
apache2.conf
▣ /etc/apache2/apache2.conf incluye el resto de ficheros
> sudo service <servicio> start|restart|shutdown
▣ Define directivas globales y se carga al lanzar apache. Podemos recargarlo con:
> sudo service apache2 start▣ Si una directiva la ponemos dos veces, se
sobreescribe
IncludeOptional mods-enabled/*.loadIncludeOptional mods-enabled/*.confInclude ports.confIncludeOptional conf-enabled/*.confIncludeOptional sites-enabled/*.conf
> sudo service apache2 reload
18
Administración básica
▣ El servidor por defecto está configurado en□ /etc/apache2/sites-enabled/000-default.conf
▣ Ejemplo de configuración□ cambiar la carpeta donde tenemos las páginas web □ poner el nombre del servidor (o IP)
DocumentRoot /var/www/htmlServerName localhost
En esta carpeta necesitamos permisos de root (sudo), podemos cambiarlo a otra carpeta en nuestra cuenta
19
Administración básica: cambiar puerto
▣ 1. Cambio ports.conf
▣ 2. Cambio el sitio (ej. 000-default.conf)
Listen 80<IfModule ssl_module> Listen 443</IfModule><IfModule mod_gnutls.c> Listen 443</IfModule>
Listen 80
Listen 80Listen 8080Listen 192.168.0.54:8081
<VirtualHost *:80>…</VirtualHost>
20
Activar / desactivar configuraciones
▣ Para activar / desactivar módulos, configuraciones o sitios, se pueden usar a2enmod a2dismod a2ensite a2dissite a2enconf a2disconf
> cd /etc/apache2> ls mods-available/userdir*mods-available/userdir.conf mods-available/userdir.load> ls mods-enabled/userdir*ls: cannot access mods-enabled/userdir*: No existe el archivo o directorio> sudo a2enmod userdirEnabling module userdir.To activate the new configuration, you need to run: service apache2 restart> ls mods-enabled/userdir*mods-enabled/userdir.conf mods-enabled/userdir.load
21
Logs
▣ Se configuran en □ envvars → APACHE_LOG_DIR□ 000-default.conf → ErrorLog y CustomLog
▣ La ruta por defecto es /var/log/apache2 donde tenemos access.log y error.log
> tail -f /var/log/apache2/access.log127.0.0.1 - - [17/Mar/2015:16:07:58 +0100] "GET / HTTP/1.1" 200 3594 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36"127.0.0.1 - - [01/Mar/2015:16:07:59 +0100] "GET /icons/ubuntu-logo.png HTTP/1.1" 200 3688 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36
22
Virtual host (I)
▣ Nos permiten servir más de un sitio web en un mismo servidor web
▣ Vamos a simular un host ▣ Añado (con sudo) en /etc/hosts
#virtual host127.0.0.1 www.tewc.upm.edu
http://www.tewc.upm.edu
23
Virtual host (II)
▣ Quiero ahora escuchar en *:80 y www.tewc.upm.edu:8080
▣ Añado □ en ports.conf Listen 8080□ en 000-default.conf (misma configuración que
<VirtualHost *:80> <VirtualHost www.tewc.upm.edu:8080>...</VirtualHost>
http://www.tewc.upm.edu:8080
24
Ejemplo de directivas
▣ Dar permisos de acceso a directorios con la directiva Directory
▣ Definir el número máximo de procesos hijos con MaxRequestWorkers o número máximo de peticiones por proceso hijo MaxConnectionsPerChild. Si lo superamos, pondrá, servidor ocupado.
25
Ejemplo de módulos
▣ libapache2-mod-auth-mysql - Apache 2 module for MySQL authentication
▣ libapache2-mod-php5 - lado servidor, lenguaje de guionización HTML-embebido (módulo Apache 2)
▣ libapache2-mod-python - módulo integrado Python para Apache 2
▣ Ver más con
> sudo apt-cache search libapache2-mod |more
26
Puertos privilegiados
▣ Los puertos TCP/IP menores de 1024 están reservados para usuarios privilegiados
▣ Si ejecutamos un servidor web como usuario normal, lo habitual son los puertos 2784, 5000, 8001, 8080
Fuente_ http://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html
27
Fallos habituales
▣ Intentamos lanzar un servidor web, y ya hay un proceso escuchando en el puerto 80
▣ Solución: 'acabar' con el proceso
28
Ejecutar como servidor web interno
▣ Con php5-cli instalado▣ Puedo indicar puerto y DocumentRoot
35
Usar un puerto diferente de 80 (p.ej. 81) si tenemos ya lanzado un apache
Ejecutar en Apache
▣ Debemos copiar los ficheros php al document root /var/www/html
▣ Y ya estará visible
36
Problemas de permisos
▣ Problema□ /var/www/html pertenece a root□ No podemos editar con nuestro usuario
directamente los ficheros ‘desplegados’▣ Soluciones
□ Cambiar el document root de apache 2 a un directorio nuestro■ Debemos añadir el directorio con Directory y
cambiar DocumentRoot□ Hacer un enlace simbólico desde /var/www a
nuestro directorio□ Crear un grupo en el que estemos root, apache2 y
nosotros y dar permisos al grupo
37
Crear grupo y asignarle document root
▣ Crear grupo y añadir a tu usuario (ej. tu-login) y a apache2 (www-data)
▣ Cambiar propietario de /var/www
38
> sudo groupadd www-pub> sudo usermod -a -G www-pub tu-login> sudo usermod -a -G www-pub www-data
> sudo chown -R root:www-pub /var/www
Cambiar permisos
▣ Dar permiso de lectura a todos, a los del grupo de escritura y añade setguid para que retengan el grupo
▣ Nos tenemos que salir de la sesión, entramos, y ya podremos crear ficheros en /var/www
39
> sudo chmod -R o+r /var/www> sudo chmod -R g+w /var/www> sudo find /var/www -type d -exec chmod g+s {} +
> cd /var/www> echo hola > hola.txt> ls -aldrwxrwsr-x 2 root www-pub 4096 mar 1 08:19 .drwxrwsr-x 3 root www-pub 4096 mar 1 08:54 ..-rw-rw-r-- 1 cif www-pub 1 mar 18 01:19 hola.txt-rw-rw-r-- 1 root www-pub 11510 mar 1 08:55 index.html
Integrar con phpStorm
45
▣ Mirar documentación en https://confluence.jetbrains.com/display/PhpStorm/Installing+and+Configuring+MAMP+with+PhpStorm+IDE#InstallingandConfiguringMAMPwithPhpStormIDE-IntegratingMAMPwiththeIDE
Paso 2. Configurar Despliegue
52
▣ Tenemos varias opciones, todas soportadas▣ Servidor en lugar (server in place):
□ servidor local con document root la carpeta madre del raíz del proyecto
□ tenemos permisos para escribir en el document root y desarrollamos directamente en esa carpeta
▣ Servidor local:□ servidor local□ la carpeta del proyecto no es el document root
▣ Servidor remoto:□ servidor remoto y carpeta remota
Fuente https://www.jetbrains.com/phpstorm/help/configuring-synchronization-with-a-web-server.html
Paso 3. Configurar Run Configuration
56
Desplegamos el menú de Run (botón verde play) y seleccionamos Edit Configurations
Instalar PHP en Windows
60
▣ Instalar WAMP□ http://www.wampserver.com/en/
▣ Te instala apache, mySQL, etc.▣ Verás una aplicación para lanzar / parar
Apache, etc.▣ Normalmente, será
□ $DIRECTORIO_WAMP\bin\php.exe (intérprete PHP)
□ $DIRECTORIO_WAMP\wamp (carpeta DocumentRoot donde poner tus páginas)
Configurar PHPStorm en Windows
▣ Sigue los pasos mostrados en la sección de windows
▣ La diferencia está en:□ cómo localizar php.exe (paso 1)□ cómo configurar el despliegue (paso 2)
61
Paso 2. Configurar Despliegue
68
▣ Hay dos opciones□ Usar ‘Server in place’ y crear los proyectos
phpStorm DENTRO de la carpeta $DIRECTORIO_WAMP/wamp
□ Usar ‘Server local’■ Sigue los pasos descritos en la sección de
Ubuntu
Laboratorio. Acceso máquina virtual
▣ Tienes que estar en el laboratorio▣ Paso 1. Copiar el escenario de prueba:
▣ Paso 2. Arrancar máquina virtual
▣ Paso 3. Acceder a la máquina virtual via ssh con X-forwarding
> cp/mnt/vnx/repo/labo-cif/labo-cif.xml .
> sudo vnx -f labo-cif.xml -v -t
> slogin -X <cuenta_alumno>@10.1.0.4
79
Laboratorio. Realizar acciones en VM
▣ El home del alumno queda montado en la máquina virtual. Todos los archivos están accesibles y los cambios son persistentes.
▣ Se pueden ejecutar órdenes con sudo y contraseña del alumno o como ‘root’ y contraseña ‘xxxx’
▣ Acciones. Arrancar phpStorm en la máquina virtual (terminal con login en @ubuntu) o firefox
▣ Acciones. Instalar algo: con sudo apt-get <paquete>
> /opt/JetBrains/PhpStorm-139.732/bin/phpstorm.sh &
80
Gestionar VM
▣ Ejecutar en un terminal de la máquina (no el el del login ubuntu, que es el virtual)
▣ Acciones. Parar escenario conservando cambios
▣ Acciones. Volver a arrancar la VM
▣ Acciones. Parar escenario destruyendo cambios
> sudo vnx -f labo-cif.xml -v --shutdown
> sudo vnx -f labo-cif.xml -v --shutdown
> sudo vnx -f labo-cif.xml -v --start
> sudo vnx -f labo-cif.xml -v --destroy
81
Conclusiones
▣ La primera tarea para aprender PHP es instalar PHP y comprobar que somos capaces de ejecutar un ejemplo en el navegador
▣ Un entorno IDE como phpStorm nos va a permitir desarrollar, ejecutar y depurar tanto PHP como HTML, CSS y JavaScript
88
Es importante conocer y saber administrar nuestro entorno. La tendencia es automatizar entornos IT con herramientas como Docker, Puppet, Vagrant, ...
89
Referencias
▣ Tasksel□ https://help.ubuntu.com/community/Tasksel
▣ Adminstración Ubuntu□ http://proquest.safaribooksonline.
com/book/operating-systems-and-server-administration/linux/9780133927368
▣ Configuración phpStorm con PHP□ https://confluence.jetbrains.
com/display/PhpStorm/Installing+and+Configuring+MAMP+with+PhpStorm+IDE#InstallingandConfiguringMAMPwithPhpStormIDE-IntegratingMAMPwiththeIDE
91
Créditos
Gracias a todos los que han publicado estos recursos de forma gratuita:▣ Minicons de Webalys▣ Plantilla de la presentación de SlidesCarnival▣ Fotos de Unsplash y Wix
92