Laravel php web framework en Centos Linux

En nuestro acelerado mundo moderno gana el que sea mas productivo y es ahí donde llegamos a nuestro articulo de hoy, Laravel php web framework en Centos Linux.

Para este articulo paso a paso en español lo veremos en Centos Linux con una configuracion LEMP (Linux+Nginx+MariaDB+PHP)

Que es Laravel php web framework?

Laravel es un framework web para programar en PHP que nos permite ser mas productivos generando código elegante de mantener

Requerimientos instalación Laravel php web framework

Laravel php web framework en Centos Linux paso a paso

-Comenzamos instalando dependencias.

Para esto instalaremos los repositorios epel y remi, ya que muchos de los paquetes requeridos los encontraremos ahí

yum install epel-release
yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install nginx yum-utils

Instalamos PHP 7.2

-Usaremos PHP 7.2. Como ya instalamos el repositorio remi, es un paso sencillo de ejecutar

yum-config-manager --enable remi-php72
Complementos cargados:fastestmirror
======================= repo: remi-php72 ================

[remi-php72] async = True
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/7
baseurl =
cache = 0
cachedir = /var/cache/yum/x86_64/7/remi-php72
check_config_file_age = True
compare_providers_priority = 80
cost = 1000
deltarpm_metadata_percentage = 100
deltarpm_percentage =
enabled = 1
enablegroups = True
exclude =
failovermethod = priority
ftp_disable_epsv = False
gpgcadir = /var/lib/yum/repos/x86_64/7/remi-php72/gpgcadir
gpgcakey =
gpgcheck = True
gpgdir = /var/lib/yum/repos/x86_64/7/remi-php72/gpgdir
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
hdrdir = /var/cache/yum/x86_64/7/remi-php72/headers
http_caching = all
includepkgs =
ip_resolve =
keepalive = True
keepcache = False
mddownloadpolicy = sqlite
mdpolicy = group:small
mediaid =
metadata_expire = 21600
metadata_expire_filter = read-only:present
metalink =
minrate = 0
mirrorlist = http://cdn.remirepo.net/enterprise/7/php72/mirror
mirrorlist_expire = 86400
name = Remi's PHP 7.2 RPM repository for Enterprise Linux 7 - x86_64
old_base_cache_dir =
password =
persistdir = /var/lib/yum/repos/x86_64/7/remi-php72
pkgdir = /var/cache/yum/x86_64/7/remi-php72/packages
proxy = False
proxy_dict =
proxy_password =
proxy_username =
repo_gpgcheck = False
retries = 10
skip_if_unavailable = False
ssl_check_cert_permissions = True
sslcacert =
sslclientcert =
sslclientkey =
sslverify = True
throttle = 0
timeout = 30.0
ui_id = remi-php72
ui_repoid_vars = releasever,
basearch
username =

-Apenas activamos el repositorio remi con php7.2 pasamos a instalar las demás dependencias, muchas de ellas, paquetes php para nuestro framework opensource

yum install mariadb-server php-mysql php php-fpm php-common php-xml php-mbstring php-json php-zip firewalld sudo unzip less file

Activamos y ejecutamos Nginx

-Por medio de comandos activamos el servicio para su ejecución automática cada vez que haga boot el equipo, lo iniciamos y verificamos su correcto funcionamiento

systemctl enable nginx
systemctl start nginx
systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since mié 2018-09-19 19:44:48 UTC; 5s ago
Process: 741 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 740 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 739 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 742 (nginx)
CGroup: /system.slice/nginx.service
├─742 nginx: master process /usr/sbin/nginx
├─743 nginx: worker process
├─744 nginx: worker process
├─745 nginx: worker process
└─746 nginx: worker process

Reglas de firewall para Laravel php web framework

-Nuestro equipo por seguridad debe tener políticas de firewall por lo cual activamos el servicio firewalld, lo ejecutamos y verificamos su ejecución

systemctl enable firewalld
systemctl start firewalld
systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since mié 2018-09-19 19:47:22 UTC; 4s ago
Docs: man:firewalld(1)
Main PID: 843 (firewalld)
CGroup: /system.slice/firewalld.service
└─843 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

-Momento para abrir puertos. Necesitaremos el puerto 80 (http), 443 (https) y 22 (ssh).

Los agregamos a las políticas y reiniciamos firewalld para que tome los cambios

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload

-Hacemos una rápida comprobación ejecutando iptables desde linea de comandos y en la cadena public allow ya nos deben aparecer los puertos abiertos

iptables -L
Chain IN_public_allow (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW
ACCEPT tcp -- anywhere anywhere tcp dpt:http ctstate NEW
ACCEPT tcp -- anywhere anywhere tcp dpt:https ctstate NEW
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW

Configuramos el servicio MariaDB

-Activamos, ejecutamos y verificamos el servicio MariaDB

systemctl enable mariadb
systemctl start mariadb
systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since mié 2018-09-19 19:52:03 UTC; 13s ago
Process: 994 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
Process: 915 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
Main PID: 993 (mysqld_safe)
CGroup: /system.slice/mariadb.service
├─ 993 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─1154 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/...

-Por seguridad, ejecutaremos un comando para colocar contraseña a la cuenta root de mariadb ademas de asegurar algunos parámetros de su instalación por default

/usr/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we’ll need the current
password for the root user. If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] New password: Escribimos nueva contraseña para MariaDB
Re-enter new password: Volvemos a escribir la contraseña
Password updated successfully!
Reloading privilege tables..
… Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] … Success!

Normally, root should only be allowed to connect from ‘localhost’. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] … Success!

By default, MariaDB comes with a database named ‘test’ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] – Dropping test database…
… Success!
– Removing privileges on test database…
… Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] … Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

PHP-fpm

-Momento para activar, ejecutar y verificar el servicio php-fpm

systemctl enable php-fpm
systemctl start php-fpm
systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since mié 2018-09-19 19:54:53 UTC; 13s ago
Main PID: 1257 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/php-fpm.service
├─1257 php-fpm: master process (/etc/php-fpm.conf)
├─1258 php-fpm: pool www
├─1259 php-fpm: pool www
├─1260 php-fpm: pool www
├─1261 php-fpm: pool www
└─1262 php-fpm: pool www

Composer y Laravel php web framework

-Instalamos composer para con el después instalar nuestro framework opensource

curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer (version 1.7.2) successfully installed to: /root/composer.phar
Use it: php composer.phar

-Copiamos composer y le damos atributos de ejecución

mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

-Entramos al directorio home de paginas web de nginx.

Comenzamos la instalación de Laravel php web framework el cual descargara una buena cantidad de paquetes (creamos un proyecto sitiopruebas, haz el cambio a tu nombre de proyecto).

Tiempo de ir por un café 😉

cd /var/www/html/
sudo /usr/local/bin/composer create-project --prefer-dist laravel/laravel sitiopruebas
Installing laravel/laravel (v5.7.0)
- Installing laravel/laravel (v5.7.0): Loading from cache
Created project in sitiopruebas
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 71 installs, 0 updates, 0 removals
- Installing vlucas/phpdotenv (v2.5.1): Downloading (100%)
- Installing symfony/css-selector (v4.1.4): Downloading (100%)
- Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (100%)
- Installing symfony/polyfill-php72 (v1.9.0): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.9.0): Downloading (100%)
- Installing symfony/var-dumper (v4.1.4): Downloading (100%)
- Installing symfony/routing (v4.1.4): Downloading (100%)
- Installing symfony/process (v4.1.4): Downloading (100%)
- Installing symfony/polyfill-ctype (v1.9.0): Downloading (100%)
..
..

Package manifest generated successfully.
> @php artisan key:generate
Application key [base64:+7O0Oly8LQLP4qxaz9zyC5cEIug40+xTa3Ncv7gYLik=] set successfully.

-Al terminar modificamos los permisos, dueño, grupo ademas de dar permisos totales al directorio storage.

Estos tres comandos se harán de forma recursiva a todo el árbol de directorios bajo ellos

chmod -R 775 sitiopruebas/
chown -R nginx.nginx sitiopruebas/
chmod -R 777 sitiopruebas/storage

-Entramos al directorio y generamos una llave para encriptado de sesiones y datos

cd sitiopruebas/
php artisan key:generate

Mas cambios para php-fpm

-Este servicio crea sus files pid y sock como root, por lo cual debemos hacer la corrección para que los cree como nginx y este ultimo pueda leerlos

vi /etc/php-fpm.d/www.conf
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php7.2-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

-Reiniciamos el servicio y verificamos se hayan creado los ficheros, especialmente el .sock

systemctl restart php-fpm
ls -la /var/run/php-fpm/
total 4
drwxr-xr-x 2 root root 80 sep 19 22:39 .
drwxr-xr-x 17 root root 520 sep 19 22:42 ..
srw-rw---- 1 nginx nginx 0 sep 19 22:39 php7.2-fpm.sock
-rw-r--r-- 1 root root 4 sep 19 22:39 php-fpm.pid

-Verificamos el .sock

file /var/run/php-fpm/php7.2-fpm.sock
/var/run/php-fpm/php7.2-fpm.sock: socket

Creación de sitio web bajo nginx

-Primero cambiamos el usuario de ejecución del servicio nginx

vi /etc/nginx/nginx.conf
user nginx;

-Creamos el sitio web para nuestro proyecto Laravel (haz el cambio del server name según tu caso). OJO, si tu server name no esta declarado en un DNS, deberás configurarlo en tu /etc/hosts (en el servidor Linux Centos y en tu estación de trabajo desde donde lo accederás)

vi /etc/nginx/conf.d/sitiopruebas.conf
server {
listen 80;
server_name pruebas;
root /var/www/html/sitiopruebas/public;
index index.php;
charset utf-8;
gzip on;
gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php {
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}

-Reiniciamos el servicio nginx para que tome los cambios

systemctl restart nginx

-Abrimos un navegador en otro pc (nuestra estación opensource de trabajo, podría ser Ubuntu Budgie) y navegamos al URL http://pruebas (haz el cambio a tu dominio)

Seguramente desarrollando tus proyectos web con PHP hay muchas tareas que te gustaría mejorar.

Eso lo puedes hacer con el uso de Laravel php web framework en un servidor Linux Centos como he mostrado en este articulo.

Ya lo usas, usas otro framework, cual, cuéntame en los comentarios.

Satisfech@ con el articulo, hazme una donación, no importa la cantidad, la intención es lo que vale, dale click a este botón

Comparte este articulo opensource en tus redes sociales (compartir es sexy) por medio de los botones de redes sociales para que otros lo conozcan y apoyes mi blog.

Ademas, no olvides escribirme en los comentarios aquí debajo y pasa la voz compartiendo el tweet.