Servidor web Debian
Debian es una excelente opción para configurar servidores web Linux. Según las estadísticas actuales, es el sistema operativo de servidor más popular seguido de cerca por centos.
Soy un gran admirador de los comandos apt/dpkg/gdebi, que facilitan la instalación y actualización de paquetes en el sistema.
Para configurar un servidor web php completamente funcional, debe instalar un par de cosas adicionales que incluyen un servidor web y una base de datos. En esta publicación configuraremos nginx, php, php-fpm, apc y MariaDB.
Nginx es un servidor web moderno, que ha sido diseñado para manejar grandes cantidades de tráfico utilizando la menor cantidad de recursos en términos de RAM y CPU.
Antes de nginx, el servidor web tradicional utilizado en Internet era apache. Sin embargo, a medida que Internet se volvió más poblada, creció la necesidad de un servidor web más rápido y eficiente.
Nginx frente a Apache
Apache por diseño es muy voluminoso y tiene muchas características, la mayoría de las cuales no son necesarias para los sitios web típicos. Probablemente fue diseñado para satisfacer las necesidades de todos, pero esto terminó convirtiéndolo en un servidor web grande y pesado con funciones en su mayoría sin usar.
Nginx, por otro lado, es un servidor web muy elegante y rápido que se enfoca completamente en la velocidad, la escalabilidad y la eficiencia.
Los aspectos técnicos de cómo lo hace son amplios y están más allá del alcance de esta publicación. Tal vez podamos echar un vistazo más tarde. Solo para su información, este sitio web se ejecuta en nginx.
Ahora, sin más discusión, manos a la obra.
1. Instalar Nginx en Debian
El paquete nginx está justo ahí en los repositorios de Debian para que no tenga que buscar en ningún otro lado. Inicie apt-get e instálelo.
# apt-get install nginx
Ahora inicie el servidor nginx.
# service nginx start Starting nginx: nginx.
Ahora acceda al servidor nginx desde el navegador abriendo la url
http://localhost/
y debería recibir el mensaje de bienvenida
Welcome to nginx!
Notas importantes
Hay algunas cosas que debe memorizar para administrar mejor su servidor nginx. Los archivos de configuración de nginx se encuentran en la siguiente ubicación
/etc/nginx/
[email protected]:/etc/nginx# ls conf.d koi-win naxsi.rules scgi_params uwsgi_params fastcgi_params mime.types nginx.conf sites-available win-utf koi-utf naxsi_core.rules proxy_params sites-enabled
No modificaremos el archivo nginx.conf directamente. En su lugar, creamos un archivo de configuración independiente para cada host virtual/sitio y lo guardamos en los siguientes directorios.
/etc/nginx/sites-available /etc/nginx/sites-enabled
Esto es similar a apache. El directorio de sitios habilitados contiene las configuraciones para vhosts que se van a habilitar. Contiene enlaces simbólicos a los archivos de configuración correspondientes en el directorio de sitios disponibles.
Configurar un servidor virtual
Ahora que hemos instalado nginx, es hora de configurar un host virtual. Esto es lo que estaría haciendo en un servidor web real para configurar su sitio.
Dentro de /etc/nginx/sites-disponible, verá un archivo llamado predeterminado. Es un archivo de plantilla para crear sus propios archivos de configuración. Simplemente cópielo y asígnele un nombre a su sitio.
# cp default binarytides.com [email protected]:/etc/nginx/sites-available# ls binarytides.com default
Elegimos nombrar los archivos de configuración con el nombre del sitio, para que sea más fácil de recordar y mantener.
Ahora abra binarytides.com y edite las cosas según sus necesidades.
Verá un servidor bloque similar a este
server { #listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default_server ipv6only=on; ## listen for ipv6 root /usr/share/nginx/www; index index.html index.htm; # Make site accessible from http://localhost/ server_name localhost;
Lo primero que hay que configurar aquí es server_name. Ponle un nombre a tu sitio. Por ejemplo
server_name binarytides.com or server_name binarytides.com www.binarytides.com
Cuando alguien abre binarytides.com en su navegador, el encabezado http contiene este nombre de host que nginx recogería y buscaría un bloque de servidor coincidente. Cuando se encuentra un bloque de servidor coincidente, usaría la configuración de ese bloque de servidor en particular.
Otra cosa a configurar es el directorio raíz web para este sitio/vhost. Tenga en cuenta que esto es por defecto /usr/share/nginx/www que es posible que desee cambiar a otra cosa.
La convención general es tener un directorio separado para cada host virtual. Por ejemplo
/usr/share/nginx/www/binarytides.com/ /usr/share/nginx/www/google.com/
Así que cree un directorio apropiado y apunte la configuración raíz en el archivo de configuración al directorio.
... root /usr/share/nginx/www/binarytides.com; ...
Después de hacer estos cambios, guarde el archivo de configuración y cree un enlace simbólico en el directorio /etc/nginx/sites-enabled.
[email protected]:/etc/nginx/sites-available# ls binarytides.com default [email protected]:/etc/nginx/sites-available# cd .. [email protected]:/etc/nginx# cd sites-enabled/ [email protected]:/etc/nginx/sites-enabled# ln -s ../sites-available/binarytides.com [email protected]:/etc/nginx/sites-enabled# ls binarytides.com default [email protected]:/etc/nginx/sites-enabled#
Ahora pruebe su nueva configuración
# nginx -t nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
La última línea de la salida debe decir exitosa, o se mostrará algún error. Puede mostrar algunas advertencias que pueden corregirse más adelante.
Finalmente reinicie nginx para que la nueva configuración surta efecto
# service nginx restart Restarting nginx: nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored nginx. [email protected]:/etc/nginx/sites-enabled#
Así que la nueva configuración ha entrado en vigor. Ahora cree un nuevo archivo index.html en la nueva raíz web de este host virtual y ábralo desde el navegador y debería funcionar.
2. Instalar php y php-fpm
Lo siguiente a instalar es el intérprete de php y php-fpm. Php-FPM es un administrador de procesos fastcgi dedicado para php que puede interactuar o conectarse con cualquier servidor web compatible y administrar procesos de php para procesar solicitudes de php.
Nginx <== communicates ==> Php-FPM <== manages ==> php child process
Instale primero los paquetes necesarios.
# apt-get install php5 php5-fpm
Instalará automáticamente las dependencias necesarias. También puede instalar el paquete php5-cli si necesita el comando php para ejecutar scripts php.
Php-fpm runs as a separate server and nginx communicates with it over a socket. Hence the php execution is totally outside the server. Also since fpm keeps php process persistent, it fully supports APC.
Ahora ubique los archivos de configuración de php fpm. Los archivos en ubicados en
/etc/php5/fpm/
Un grupo es un conjunto de procesos php que se ejecutan con el mismo usuario/grupo. Entonces, si desea que los archivos php de cada sitio se ejecuten con un permiso de usuario diferente, debe crear grupos separados de fpm. En aras de la simplicidad, solo mostramos un grupo único aquí.
Los archivos de configuración del grupo están dentro del directorio pool.d. Navegar en
[email protected]:/etc/php5/fpm/pool.d# ls www.conf
Abra el archivo www.conf que nuevamente es una plantilla para que la use y cree archivos de configuración separados para cada grupo.
Se parece a esto
; Start a new pool named 'www'. ; the variable $pool can we used in any directive and will be replaced by the ; pool name ('www' here) [www] ; Per pool prefix ; It only applies on the following directives: ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' ; - 'chdir' ; - 'php_values' ; - 'php_admin_values' ; When not set, the global prefix (or /usr) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none ;prefix = /path/to/pools/$pool ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = www-data group = www-data ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = /var/run/php5-fpm.sock ; Set listen(2) backlog. ; Default Value: 128 (-1 on FreeBSD and OpenBSD) ;listen.backlog = 128
Lo anterior consiste principalmente en comentarios y las 4 líneas más importantes son
1. [www] this is the pool name 2. user = www-data this is the user with whose permissions the php script would be run 3. group = www-data this is the group 4. listen = /var/run/php5-fpm.sock this is the socket for communicating with this pool. This socket must be given to nginx for nginx to be able to talk to fpm
Conectar fpm con nginx
No vamos a cambiar mucho aquí. Solo anote la ruta del socket. Tenemos que poner esto en el archivo de configuración de nginx. Vuelve a tu configuración de nginx y ábrelo de nuevo.
Contiene una sección para la configuración de php fpm que se ve así
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # fastcgi_pass unix:/var/run/php5-fpm.sock; # fastcgi_index index.php; # include fastcgi_params; #}
Descoméntalo y haz que se vea así
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
Prueba PHP
Ahora coloque un archivo en la raíz web con la llamada phpinfo.
<?php phpinfo();
Y luego abra el archivo en el navegador y debería aparecer el bloque de información de php, diciendo que php está configurado y funcionando correctamente.
Otra cosa que puede hacer es agregar index.php a la lista de archivos de índice. De modo que al acceder a un directorio, si no se especifica ningún archivo, se llama a index.php.
root /usr/share/nginx/www/binarytides.com; index index.html index.htm index.php;
Configurar apc - caché php alternativa
APC es una excelente manera de acelerar la ejecución de scripts php. Apc compila el código php y mantiene el código de operación en la memoria y lo usa la próxima vez sin compilar el mismo código php nuevamente desde el archivo. Esto acelera drásticamente la ejecución. Además del caché de código de operación, apc también ofrece un caché de usuario para almacenar datos sin procesar para la aplicación php en la memoria.
Php a partir de la versión 5.5 tiene una nueva característica llamada OPcache que hace lo mismo que el caché de código de operación de apc, por lo que desaprueba apc.
Configurar apc es muy simple y rápido. Simplemente instale el paquete apc para php
# apt-get install php-apc
Luego reinicie php fpm
# service php5-fpm restart
Ahora revise la página de phpinfo nuevamente y también debería tener los detalles de apc. El archivo de configuración de apc se encuentra en
/etc/php5/fpm/conf.d/20-apc.ini
La configuración se puede ajustar un poco para un rendimiento óptimo para sus necesidades. Este es el tipo de configuración que uso
extension=apc.so apc.enabled=1 apc.shm_size=128M apc.ttl=3600 apc.user_ttl=7200 apc.gc_ttl=3600 apc.max_file_size=1M
Consulte la lista de parámetros de configuración de apc para obtener más información.
3. Instalar MariaDB en Debian
Ahora viene el último y último componente de la pila LEMP. Esa es la base de datos MariaDB y no mysql. Bueno, a estas alturas ya debería saber que mysql está en manos de Oracle y ya no pertenece a una comunidad. Entonces, los cuerpos principales han comenzado a cambiar a mariadb. Lo bueno es que mariadb es compatible binariamente con mysql con muchas funciones adicionales. Entonces, si ya está usando mysql para sus aplicaciones php, cambiar a mariadb sería absolutamente sencillo.
MariaDB no está presente en debian repositorios Para obtener los repositorios visite la siguiente página
https://downloads.mariadb.org/mariadb/repositories/Seleccione Debian como distribución, Wheezy como lanzamiento y la versión 10.0 de mariadb. Luego seleccione un espejo en el lado derecho. Ahora desplácese hacia abajo hasta la parte inferior de la página para encontrar los detalles del repositorio.
Aquí están los comandos que obtuve
sudo apt-get install python-software-properties sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db sudo add-apt-repository 'deb http://mirrors.fe.up.pt/pub/mariadb/repo/10.0/debian wheezy main'
Ahora actualice el caché apt e instale los paquetes mariadb
sudo apt-get update sudo apt-get install mariadb-server mariadb-client
Mientras que la instalación de mariadb solicitaría la contraseña del usuario root. Ingrese la contraseña y asegúrese de no olvidarla.
Después de que finalice la instalación, verifique su versión de mariadb
# mysql -V mysql Ver 15.1 Distrib 10.0.3-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
Tenga en cuenta que el nombre del comando es el mismo que con mysql. Pero el nombre mariadb está en la información de la versión.
El servidor web está listo
Así que ahora el servidor web LEMP está listo para usar. Es posible que desee instalar un par de extras como phpmyadmin para administrar mejor su base de datos. Phpmyadmin está en el repositorio de Debian, así que instálelo desde allí.
Tiene alguna pregunta ? Siéntase libre de comentar a continuación.