PHP es un lenguaje de secuencias de comandos de propósito general. Es sobre todo popular para el desarrollo web. Se puede utilizar para desarrollar sitios web dinámicos e interactivos. Fue uno de los primeros lenguajes del lado del servidor que se pudo incrustar en HTML, lo que facilitó agregar funcionalidad a las páginas web sin necesidad de llamar a archivos externos para obtener datos. PHP es uno de los lenguajes de programación más fáciles de aprender.
Está integrado con varias bases de datos populares, incluidas MySQL, PostgreSQL, Oracle, Sybase, Informix y Microsoft SQL Server. Muchos CMS y frameworks populares como WordPress, Magento y Laravel están escritos en PHP.
Al momento de escribir este artículo, los repositorios predeterminados de Ubuntu 20.04 incluyen la versión PHP 7.4.
Requisitos
Para seguir esta guía, asegúrese de tener lo siguiente:
- Servidor Ubuntu 20.04 actualizado que está conectado a Internet
- Acceso raíz al servidor o usuario con acceso sudo
- Debe sentirse cómodo con el uso de la terminal de Linux para ejecutar comandos.
Pasos para instalar y configurar PHP en Ubuntu 20.04
- Asegúrese de que el servidor esté actualizado
- Instalar php 7.4 en el servidor
- Instalación de Nginx
- Configurar Nginx para servir archivo php
1. Asegúrese de que el servidor esté actualizado
Antes de continuar, asegurémonos de que nuestro servidor esté actualizado. Use estos comandos para 1. Actualizar los repositorios del servidor, 2. Actualizar los paquetes del servidor a las últimas versiones:
# Update repos
sudo apt update
# Upgrade packages
sudo apt -y upgrade
2. Instale php 7.4 en el servidor
Dado que los repositorios predeterminados contienen la versión 7.4 de php, vamos a instalarlo con este comando:
sudo apt install php -y
Confirme la versión instalada con el comando php -v
:
~$ php -v
PHP 7.4.3 (cli) (built: Aug 13 2021 05:39:12) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
En esta configuración, tenemos la intención de servir archivos php con Nginx. Nginx no tiene soporte integrado para procesar archivos PHP. Usaremos PHP-FPM ("administrador de procesos fastCGI") para manejar los archivos PHP.
Nginx no funcionará si Apache está instalado y en ejecución. Como usaremos Nginx, usemos este comando para eliminar apache si está instalado en nuestro sistema:
$ sudo apt remove apache2 -y
Ahora instalemos php-fpm
con este comando:
sudo apt install php-fpm -y
Una vez completada la instalación, el servicio FPM se iniciará automáticamente. El servicio se agrega a systemd como php7.4-fpm
. Para comprobar el estado del servicio, ejecute:
$ sudo systemctl status php7.4-fpm
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-09-28 16:18:41 UTC; 3min 18s ago
Docs: man:php-fpm7.4(8)
Main PID: 56092 (php-fpm7.4)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 4710)
Memory: 7.1M
CGroup: /system.slice/php7.4-fpm.service
├─56092 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
├─56113 php-fpm: pool www
└─56114 php-fpm: pool www
Sep 28 16:18:41 ip-172-26-11-229 systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
Sep 28 16:18:41 ip-172-26-11-229 systemd[1]: Started The PHP 7.4 FastCGI Process Manager.
Debería ver una salida como la de arriba.
3. Instalando Nginx
Ahora que PHP y php-fpm están instalados en el sistema, necesitamos instalar nginx. Nginx nos permitirá configurar un host virtual que podemos usar para atender el tráfico de un dominio.
Instale nginx usando este comando:
sudo apt install nginx -y
Una vez finalizada la instalación, Nginx se iniciará de forma predeterminada. Confirme que funciona como se esperaba comprobando su estado. Debería ver un resultado como este:
$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-09-28 16:28:30 UTC; 1min 2s ago
Docs: man:nginx(8)
Main PID: 56990 (nginx)
Tasks: 3 (limit: 4710)
Memory: 3.7M
CGroup: /system.slice/nginx.service
├─56990 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─56991 nginx: worker process
└─56992 nginx: worker process
Sep 28 16:28:30 ip-172-26-11-229 systemd[1]: Starting A high performance web server and a reverse pr>
Sep 28 16:28:30 ip-172-26-11-229 systemd[1]: Started A high performance web server and a reverse pro>
Para confirmar que Nginx realmente se está ejecutando y es accesible, use este comando:
curl http://server_ip/
Donde server_ip
es la ip de tu servidor. Si por alguna razón no conoce la ip pública de su servidor, use esto para verificar:
curl -4 icanhazip.com
Debería ver la página predeterminada de Nginx.
4. Configurar Nginx para servir archivo php
Ahora que tenemos Nginx configurado y ejecutándose en nuestro servidor, hagamos que sirva archivos php. En este ejemplo, configuraremos Nginx para servir la página de información de php.
Para lograr esto, debemos configurar un host virtual en Nginx que atienda el tráfico para un dominio específico (usaremos example.citizix.com
). Para que esto funcione, debe actualizar los registros DNS para ese dominio en su host dns para tener A
los registros apuntan a ese dominio o subdominio. Consulte la documentación de su proveedor de DNS para conocer los detalles de cómo hacerlo.
Confirme que el dominio puede resolverse correctamente en el servidor usando el comando dig:
❯ dig -t A example.citizix.com
; <<>> DiG 9.10.6 <<>> -t A example.citizix.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10212
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;example.citizix.com. IN A
;; ANSWER SECTION:
example.citizix.com. 300 IN A 172.67.197.11
;; Query time: 828 msec
;; SERVER: 192.168.157.227#53(192.168.157.227)
;; WHEN: Tue Sep 28 20:42:05 EAT 2021
;; MSG SIZE rcvd: 80
Ahora debemos seguir estos pasos para que nuestro sencillo script funcione:
- Cree el directorio para almacenar nuestro contenido estático (usaremos
/var/www/example.citizix.com
)sudo mkdir -p /var/www/example.citizix.com
- Asegúrese de que el usuario de Nginx pueda acceder al directorio creado
sudo chown -R www-data:www-data /var/www/example.citizix.com sudo chmod -R 755 /var/www/example.citizix.com
- Agregue un archivo de índice
/var/www/example.citizix.com/index.php
con contenido para mostrar información de php en el directorio (/var/www/example.citizix.com
)
Editar el archivo:sudo vim /var/www/example.citizix.com/index.php
Añade este contenido:
<?php phpinfo() ?>
Guarde y cierre el archivo.
- Cree la configuración de nginx en el directorio predeterminado de nginx
/etc/nginx/conf.d
. 1. Crearemos el archivo/etc/nginx/conf.d/example.citizix.com.conf
con el contenido requerido.sudo vim /etc/nginx/conf.d/example.citizix.com.conf
Añade este contenido:
server {
listen 80;
server_name example.citizix.com;
root /var/www/example.citizix.com;
index index.php;
location ~ \.php$ {
fastcgi_intercept_errors on;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
Confirme que la configuración de nginx es correcta con este comando:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Ahora necesita reiniciar nginx y php-fpm usando estos comandos:
sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm
Confirme que aparecieron los servicios:
sudo systemctl status nginx
sudo systemctl status php7.4-fpm
¡Debería ver que los servicios se reiniciaron correctamente!
Si todo va bien, debería ver la página de información de php como se muestra en la siguiente captura de pantalla:
¡Eso es todo! Hasta este punto hemos podido instalar php 7.4 en Ubuntu 20.04 y servir un archivo simple con Nginx.