viernes, 13 de octubre de 2023

Configurar CodeIgniter 4 con Nginx en mi vps Ubuntu 20

 


Hace unos días termine un proyecto simple en codeigniter4 pero al momento de subir a mi vps en ubuntu 20 me dio varios errores. Aquí muestro los errores que me figuraban y como lo solucioné esperando que sea de mucha ayuda para ustedes también.





Para desplegar el proyecto y configurarlo con un dominio en nginx el proyecto la dirección root debe ir a la carpeta public

server {
        root   /var/www/html/ciproyecto/public;
  

Este sería un ejemplo para usar php-fpm, las direcciones e instalación de versión varía.
server{
        root /srv/www/midominio.com;
        index index.html index.htm index.php;
        server_name midominio.com www.midominio.com;
 location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    include fastcgi_params;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}

}


 Mostrar Errores

Es posible que esté en modo producción por tanto a mí me empezó a mostrar errores como este:


Así que el proyecto tiene que estar en modo desarrollo y esto está por configurar en el archivo .env en la lína que pone "CI_ENVIRONMENT = development"
No obstante no me reconocía este archivo por tanto no podía cambiarlo a modo desarrollo o modo producción, no se el motivo ya que no trabajo constantemente con codeigniter4. Así que me fuí a la manera no recomendable pero más sencilla. ir directamente al archivo de producción el cual tiene la siguiente ruta:
      /app/Config/Boot/production.php

y cambiar a 1 para mostrar los errores de esta forma:

ini_set('display_errors', '1');

 Librerías php para: intl, mbstring y postgres

 De esta forma pude visualizar los errores los cuales mostraba que me faltaban instalar las librerías intl y mbstring , Luego de instalar esas dos me salio el error pg_connect() . Uso postgres cambiar a mysql si es tu caso. Al tener un vps solo instalo lo necesario y solo había instalado php y php-fpm en sus versiones 8.1. así que toca instalar manualmente estas librerías de la siguiente forma (No olvidar primero hacer update):

UBUNTU: sudo apt-get install php-intl php-mbstring

                    UBUNTU POSTGRES PHP: sudo apt-get install php-pgsql

 RED HAT/CENTOS: sudo yum install php-intl php-mbstring


Luego ir al php.ini etc/php/8.1/fpm/php.ini y quitar el ; que está adelante de las siguientes extensiones:
extension=intl
extension=mbstring 

extension=pgsql

extension=pdo_pgsql

 

 

Luego reiniciamos nginx:

 UBUNTU: sudo service nginx restart

 RED HAT/CENTOS: buscar comando ;)

Luego reiniciamos PHP-FPM

sudo service php8.1-fpm restart   # Ajusta la versión según la que estés utilizando

Si tienes algún error de conexión a tu base de datos verifica el archivo
app/Config/Database.php

Con esto debería ser suficiente. No obstante a mí me cargaba el index pero no podía navegar en las demás rutas. Hay que asegurarnos que pase por el index.php todos los archivos. Y esto es agregando a la configuración nginx try_files con index.php como el siguiente ejemplo:
server {
    server_name example.com;
    root /var/www/html/myapp/public;
    location / {
        try_files $uri $uri/ /index.php;
    }
    # ...
}

Más arriba puse todo lo necesario para este archivo de nginx. Espero te sea de utilidad, suscribete a mi canal de youtube 

Lorem ipsum is simply dummy text of the printing and typesetting industry.