GNU/Linux >> Tutoriales Linux >  >> Debian

Configure Nginx + php-FPM + apc + MariaDB en Debian 7:el servidor LEMP perfecto

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.

&lt;?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.


Debian
  1. Cómo configurar un servidor LEMP en Debian 10 Buster

  2. Actualice ISPConfig Perfect Server de Debian 10 a Debian 11

  3. La configuración perfecta - Debian Sarge (3.1)

  4. Cómo instalar LEMP (Linux, Nginx, MySQL y PHP-FPM) en un VPS Debian 8

  5. Cómo instalar la red social Elgg en Debian 9

Cómo instalar Nginx, MariaDB, PHP (LEMP Stack) en Debian 11

Cómo instalar LEMP Stack en Debian 10 Buster Server/Desktop

Cómo instalar Nginx con PHP-FPM en Debian 11

El servidor perfecto:Debian Squeeze (Debian 6.0) con BIND, Dovecot y Nginx [ISPConfig 3]

El servidor perfecto - Debian Wheezy (nginx, BIND, Dovecot, ISPConfig 3)

Cómo configurar la caché de Nginx en el servidor LEMP