Skip to main content

CodeIgniter 4 sobre Linux, Nginx, MySQL y PHP en WSL2 con Ubuntu 22.04

· 4 min read
Héctor Mansilla Arias
Artesano Digital

Luego de años, volví a usar PHP... Sé que no es gran cosa, pero era necesario para un proyecto y ustedes saben, Business are Business. Luego de pelear un poco con las herramientas que tenía disponible, dejo esta hoja de ruta para ahorrar algunas horas de búsqueda por si alguien más requiere utilizar un framework PHP como CodeIgniter 4 o un CMS como WordPress o Joomla! en Ubuntu sobre WSL2 de Windows.

  1. Entra a la terminal de Windows y ejecuta wsl --install
  2. Sigue los pasos de instalación y tendrás WSL2 instalado
  3. Ahora, abre la Microsoft Store y buscar Ubuntu.
  4. Seleccionar la versión deseada (Ubuntu 22.04 LTS es la más reciente al momento de escribir estás líneas).
  5. Hacer clic en Obtener e instalar.
  6. Una vez instalado y para verificar que esté WSL2 con Ubuntu correctamente instalado, abre una terminal de Windows y ejecuta wsl -l -v
  7. Si indica que Ubuntu está en la versión 2, está todo ok.
  8. Ahora, ingresa al ícono de Ubuntu en el menú de inicio y termina la configuración. Te pedirá nombre de usuario, contraseña, etc.
  9. Una vez terminada la configuración, tendrás la terminal de Ubuntu lista para su uso.
  10. Procedemos a dejar Ubuntu actualizado, para ello utilizaremos los siguientes comandos sudo apt update && sudo apt upgrade
  11. Comenzamos con la implementación del LNMP (Linux + Nginx + MySQL + PHP)
sudo apt install nginx mysql-server php-fpm php-mysql
  1. verificamos que Nginx esté operativo con el comando systemctl status nginx mysql
  2. Vamos con la configuración de MySQL. Acá la cuestión se pone un poco tricky...
  • Usa el comando mysql_secure_installation
  • Elegir la contraseña de root de MySQL
  • Prohibir todas las conexiones externas a la base de datos empleando dicha cuenta.
  • Borrar cualquier cuenta de usuario que sea anónima.
  • Remover la base de datos de prueba.
  • Aplicar los cambios.
  • Ahora, entramos a MySQL y utilizamos la siguiente query:
CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT ALL ON *.* TO 'root'@'localhost'
  • Antes que me llueva todo el hate del universo, esto está pensado para hacer pruebas y aún falta mucho por aprender y mejorar
  • Extrañamente, o no tanto, MySQL tiene restringido el acceso por contraseña, para habilitarlo, ingresamos la siguiente query
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
  • Donde password es la contraseña del usuario root de MySQL 'mysql_native_password' indica la forma de conexión hacemos flush con la siguiente query: FLUSH PRIVILEGES;
  • Y ahora, deberíamos poder utilizar una App como DBeaver u otras, para hacer las pruebas de conexión a la BD
  • Si utilizas DBeaver, junto con los datos tradicionales de conexión, hay que ajustar una opción allowPublicKeyRetrieval = TRUE
  • Ahora, ya puedes realizar la prueba de conexión.
  1. Por otra parte, SI otra parte más! jajaja, habilitaremos PHP en Nginx, vamos a la terminal de Ubuntu y abrimos el editor de textos para modificar el archivo de configuración de Nginx con el siguiente comando sudo nano /etc/nginx/sites-enabled/default En mi caso, dejé el archivo así:
server {
listen 8080;
listen [::]:8080;

server_name <ip> <ip and port>;

root /var/www/public;
index index.php index.html index.htm;

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
error_page 404 /index.php;

location ~ /\. {
deny all;
}
}
  1. La línea donde dice php8.3-fpm.sock; corresponde a la última versión estable de PHP que dispone Ubuntu al momento de escribir estas líneas
  2. Ahora, tenemos que cambiar los permisos de la carpeta /var/www para que pueda ser leída y escrita por los usuarios correspondientes, o sea, que el script que utilicemos pueda escribir en ella.
  3. Utiliza en la terminal de Ubuntu el comando sudo chmod 755 -R /var/www
  4. A continuación, transfiere el archivo ZIP de CodeIgniter 4 y descomprímelo en la carpeta /var/www SIN SUDO
  5. Finalmente accede desde tu navegador en Windows a localhost y debería verse la página de bienvenida del Framework