3. 3
Índice
1. Infraestructura PHP
2. Instalar PHP en Ubuntu
3. Ejecutar PHP en Ubuntu
4. Configurar phpStorm en Ubuntu
5. Instalar PHP y configurar phpStorm en
Windows
6. Instalar PHP y configurar phpStorm en Mac
7. Entorno virtualizado del DIT
8. Entorno en la nube
9. Conclusiones
5. 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
6. 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
8. 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
11. 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#InstallingandConfig
uringXAMPPwithPhpStormIDE-
11
12. 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
13. 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
15. Comprobar puertos de servidores
> sudo netstat -plunt
Conexiones 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
16. 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 stop 16
17. 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
18. 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/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
> sudo service apache2 reload
18
19. 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/html
ServerName localhost
En esta carpeta necesitamos permisos de root (sudo), podemos
cambiarlo a otra carpeta en nuestra cuenta
19
21. 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 userdir
Enabling 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
22. 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.log
127.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
23. 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 host
127.0.0.1 www.tewc.upm.edu
http://www.tewc.upm.edu
23
24. 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
25. 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
26. 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
27. 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
28. Fallos habituales
▣ Intentamos lanzar un servidor web, y ya hay
un proceso escuchando en el puerto 80
▣ Solución: 'acabar' con el proceso
28
29. ¿Cómo acabo con el proceso?
▣ Si sospechas que está lanzado apache2
> sudo service apache2 stop
29
35. 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
36. Ejecutar en Apache
▣ Debemos copiar los ficheros php al document
root /var/www/html
▣ Y ya estará visible
36
37. 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
38. 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
39. 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 -al
drwxrwsr-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
52. 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
60. 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_WAMPbinphp.exe (intérprete
PHP)
□ $DIRECTORIO_WAMPwamp (carpeta
DocumentRoot donde poner tus páginas)
61. 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
68. 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
79. 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
80. 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
81. 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
88. 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
89. Es importante conocer y saber administrar nuestro
entorno. La tendencia es automatizar entornos IT con
herramientas como Docker, Puppet, Vagrant, ...
89
92. 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