¿Cómo implementar una aplicación PHP?

Back4app PHP Cover

Este artículo discutirá PHP, uno de los lenguajes de secuencias de comandos más populares que impulsan la red mundial. Exploraremos sus ventajas, desventajas y opciones de implementación.

Al final de este artículo, podrá iniciar una aplicación PHP simple, dockerizarla e implementarla en Back4app Containers.

Descripción general de PHP

PHP (abreviatura de “PHP: Procesador de Hipertexto”) es un popular lenguaje gratuito de secuencias de comandos de propósito general. Fue creado en 1993 por Rasmus Lerdorf y luego lanzado en 1995.

PHP se diseñó inicialmente para el desarrollo web, pero ahora también se usa para secuencias de comandos del lado del servidor, secuencias de comandos de línea de comandos y escritura de aplicaciones de escritorio.

Lo mejor de PHP es que se puede incrustar directamente en HTML. No hay necesidad de usar comandos largos para generar HTML (como se ve en C o Perl). Aquí podrá ver un ejemplo rápido:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>My first PHP website</title>
    </head>
    <body>
        <?php
            $cool_scripting_language = "PHP";
            echo "$cool_scripting_language is a cool scripting language!";
        ?>
    </body>
</html>

PHP se ejecutará cuando un usuario solicite este sitio, y solo se devolverá la salida HTML procesada. En nuestro caso, un mensaje que dice: “¡PHP es un lenguaje de secuencias de comandos genial!”. El PHP se ejecuta en el lado del servidor en lugar de en el navegador (como JavaScript).

Es discutible si PHP es un lenguaje totalmente orientado a objetos. Sin embargo, admite funciones estándar orientadas a objetos, como espacios de nombres, clases y objetos.

En el momento de escribir este artículo, la versión estable más reciente de PHP es la 8.2, pero muchas aplicaciones de PHP se quedan en versiones anteriores.

Algunos desarrolladores afirman que PHP está muriendo, pero ese no es el caso. Según la encuesta de W3Techs, PHP actualmente impulsa el 77,4% de todos los sitios web cuyo lenguaje de programación del lado del servidor es conocido.

El lenguaje de secuencias de comandos también es utilizado por sitios web de alto tráfico como Facebook, Wikipedia, MailChimp, varios software CMS e incluso fue utilizado por YouTube en el pasado.

Beneficios de PHP

Buen rendimiento

PHP tiene más rendimiento que otros lenguajes de secuencias de comandos del lado del servidor, como ASP.NETJSP, y Python. Algunos puntos de referencia muestran que PHP es hasta tres veces más rápido que Python.

PHP es mejor para manejar tareas relacionadas con la web, como generar páginas HTML, manejar envíos de formularios e interactuar con la base de datos.

Por el contrario, hay opciones más óptimas que PHP para tareas de computación pesadas o algoritmos complejos.

Multiplataforma

PHP es independiente de la plataforma. Se ejecuta en varias plataformas, incluidas Windows, Linux, Unix y Mac. Además, es compatible con casi todos los servidores web populares, como Apache HTTPCaddyNginxLiteSpeed, etc.

El popular lenguaje de secuencias de comandos también se puede utilizar para desarrollar aplicaciones de escritorio gracias a phpdesktop de Czarek Tomczak. Puede pensar en esta biblioteca como Electron pero para PHP. Las aplicaciones Phpdesktop pueden ejecutarse en Windows y Linux, pero no en Mac OS X (todavía).

Soporte de base de datos

El lenguaje de secuencias de comandos admite una variedad de bases de datos, incluidas las bases de datos SQL y NoSQL. La base de datos más popular para usar con PHP es MySQL (pila LAMP), pero nada le impide usar PostgreSQL o cualquier otro tipo de base de datos.

Puede ver todas las capas de abstracción de PHP y las extensiones de base de datos específicas del proveedor en su sitio web oficial.

Ecosistema vivo

PHP es así de popular gracias a su ecosistema vivo. Muchos marcos PHP increíbles aceleran significativamente el proceso de desarrollo, simplifican la base de código y lo guían para escribir un código más limpio y estandarizado.

Los marcos PHP más populares en el momento de escribir este artículo son:

Para obtener marcos y recursos más increíbles, consulte Awesome-php en GitHub.

También hay muchos CMS que utilizan PHP, como WordPressJoomlaDrupal, y Magento.

Fácil de aprender

PHP es un lenguaje amigable para principiantes con una sintaxis simple. Es relativamente fácil de aprender si está familiarizado con los conceptos básicos de la World Wide Web (WWW), HTML, CSS y JavaScript. Muchos desarrolladores pueden escribir PHP, pero solo unos pocos pueden escribir PHP mantenible que siga convenciones de código limpio.

Limitaciones de PHP

Herramientas de depuración limitadas

PHP es malo para manejar errores y carece de herramientas de depuración en comparación con otros lenguajes de programación populares. Si su proyecto requiere una depuración avanzada, lo más probable es que tenga que usar software de terceros, como XdebugKrumo, o Kint.

Algunos IDE populares, como PhpStorm y Visual Studio, también tienen herramientas de depuración de PHP integradas.

Débilmente tipado

Como se mencionó anteriormente, PHP es un lenguaje de secuencias de comandos, no un lenguaje de programación. Una de las características más comunes de los lenguajes de secuencias de comandos es que son débilmente tipados.

Eso significa que el tipo de variable no tiene que declararse explícitamente antes de usarlo. Además de eso, también puede cambiar en cualquier momento durante el tiempo de ejecución.

Esto da como resultado que las aplicaciones PHP sean más propensas a errores y difíciles de depurar.

Fallas de seguridad

A lo largo de los años, las aplicaciones PHP han sido objeto de varios ataques de piratas informáticos. Esto se debe principalmente a la naturaleza de código abierto de PHP y al bajo costo de entrada para los nuevos desarrolladores.

Algunas de las vulnerabilidades de PHP más conocidas incluyen inyecciones de SQL, secuencias de comandos entre sitios (XSS), falsificación de solicitudes entre sitios (CSRF) y ejecución remota de código (RCE).

Recuerde que estas vulnerabilidades se pueden prevenir siguiendo prácticas de codificación seguras. Asegúrese de desinfectar siempre la entrada y nunca ejecutar la entrada proporcionada por el usuario.

Vanilla PHP está desactualizado

Vanilla PHP (que significa PHP sin bibliotecas ni marcos) puede estar bastante desactualizado para crear aplicaciones modernas. Para crear aplicaciones seguras rápidamente, deberá utilizar un marco.

Opciones de implementación de PHP

Las aplicaciones PHP se pueden implementar en diferentes plataformas. Los modelos de nube más comunes para implementar aplicaciones PHP son:

  1. Infraestructura como servicio (IaaS),
  2. Plataforma como servicio (PaaS),
  3. Contenedores como servicio (CaaS).

No existe el mejor modelo de nube para implementar aplicaciones PHP. En última instancia, la elección depende de los requisitos de su proyecto, el presupuesto y el nivel de abstracción deseado.

Por lo general, los equipos de desarrolladores optan por PaaS o CaaS, ya que son más fáciles de administrar y no mucho más costosos que IaaS. Veamos algunos de los mejores proveedores de alojamiento PHP.

Back4app Containers

Back4app Containers es una excelente oferta de Contenedores como servicio (CaaS) de Back4app. La plataforma permite a los desarrolladores crear, escalar e implementar rápidamente aplicaciones dockerizadas.

Implementar una aplicación en Back4app Containers es tan fácil como importar su repositorio de GitHub y hacer clic en un botón. ¡La plataforma tiene un excelente sistema de implementación e integración continua, admite implementaciones sin tiempo de inactividad, seguimiento de implementación en tiempo real y más!

Otro beneficio de Back4app Containers es su nivel gratuito, que es excelente para alojar pequeñas aplicaciones. A medida que su aplicación escala, puede actualizar a niveles premium siguiendo un plan de precios simple y predecible.

Google Cloud Run

Google Cloud Run es una plataforma de contenedores como servicio (CaaS) completamente automatizada para implementar y escalar aplicaciones en contenedores. Estuvo disponible públicamente en 2019 y desde entonces ha ganado mucha popularidad.

Cloud Run es relativamente fácil de usar, especialmente si está familiarizado con otros productos de GCP. Algunos beneficios de Cloud Run incluyen certificados SSL gratuitos, buena integración con otras soluciones de GCP y escalado a cero.

En el momento de escribir este artículo, Google ofrece créditos gratuitos de $300 para nuevos usuarios.

Heroku

Heroku es una de las soluciones pioneras de plataforma como servicio (PaaS). Fue establecido en 2007 y sigue siendo muy popular hoy en día.

Ofrece un amplio soporte para varios lenguajes de programación, incluidos PHP, Java, Node.js, Go, Scala y Python. La plataforma tiene una interfaz de usuario elegante y fácil de usar, permite una gran escalabilidad y proporciona una amplia selección de complementos.

Heroku solía proporcionar un plan gratuito e instancias gratuitas de PostgreSQL y Redis, pero decidieron cancelarlas en 2022 debido a preocupaciones relacionadas con el fraude y los bots. Sin embargo, Heroku sigue siendo una excelente plataforma para implementar aplicaciones.

AWS Elastic Beanstalk

AWS Elastic Beanstalk (EB) es una excelente solución de plataforma como servicio (PaaS). Es una plataforma madura y bien probada que se estableció en 2011. EB es compatible de forma nativa con Go, Java, Node.js, PHP, Python, Ruby y permite implementar aplicaciones dockerizadas.

Lo mejor de Elastic Beanstalk es que puede combinarlo con otras soluciones de AWS, como AWS S3AWS RDSAWS CloudFront, etc. AWS ofrece un nivel gratuito a los nuevos clientes.

Proceso de implementación de PHP

En esta sección, veremos cómo iniciar e implementar una aplicación web Laravel simple en Back4app Containers.

Requisitos previos

  • Comprensión básica de PHP.
  • Comprensión básica de Docker y la tecnología de contenerización.
  • Composer junto con Node.js y Docker instalados en su máquina local.

Si no está familiarizado con la tecnología de contenedorización, consulte ¿Qué son los contenedores?

¿Qué es Laravel?

Laravel Logo

Laravel es un excelente marco PHP que le permite crear aplicaciones utilizando una sintaxis expresiva y elegante rápidamente. Como resultado, termina con un código limpio y conciso.

El marco se basa en el patrón arquitectónico modelo-vista-controlador (MVC). Lo mejor de todo es que Laravel es completamente gratuito y de código abierto.

Fue lanzado inicialmente en 2011 y actualmente es uno de los marcos PHP más populares. Debido a su flexibilidad, se puede utilizar para construir cualquier tipo de aplicación web.

Ventajas de Laravel

  • Rendimiento y flexibilidad.
  • Simplifica el trabajo con la base de datos (a través de Eloquent ORM).
  • Autenticación y autorización incorporadas.
  • Medidas de seguridad integradas (CSRF, XSS).

Algunas alternativas de Laravel incluyen SymfonyCodeIgniterCakePHP, y Laminas Project.

Crear aplicación

Los siguientes pasos requerirán que tenga instalado Composer. Si no lo tiene, descárguelo del sitio web oficial.

Comience creando un nuevo proyecto de Laravel a través de la interfaz de línea de comandos de Composer:

$ composer create-project laravel/laravel sample-app

Siéntase libre de reemplazar sample-app con un nombre personalizado.

Este comando creará un nuevo proyecto Laravel y la estructura de directorios predeterminada. Además de eso, instalará todas las dependencias a través de  composer install. El comando debe tomar como máximo tres minutos

Una vez hecho esto, notará la siguiente estructura de directorios:

sample-app/
├── app/                   contains the core code of your application
│   ├── Console
│   ├── Exceptions
│   ├── Http
│   ├── Models
│   └── Providers
├── bootstrap              is used to bootstrap the framework
├── config                 contains all your configuration files
├── database               contains database factories, migrations, seeders
├── public                 contains your index.php and static assets (JS, images, CSS)
├── resources              contains all your views and templates (along with raw assets)
├── routes                 is used to define all your application endpoints
├── storage                contains logs and other auto-generated stuff
├── tests                  can be utilized for automatic testing
└── vendor                 contains your Composer dependencies

A continuación, ejecute el servidor de desarrollo mediante el siguiente comando:

$ php artisan serve

INFO  Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server.

Por último, abra su navegador web favorito y vaya a http://localhost:8000/. Debería ver la página de índice predeterminada de Laravel.

Laravel Index Page

Modificar aplicación

En esta sección, modificaremos ligeramente la aplicación registrando un nuevo punto final de API.

Como se mencionó en la sección anterior, todas las rutas se definen en la carpeta de rutas. La carpeta de rutas contiene los siguientes archivos:

routes/
├── api
├── channels
├── console
└── web

El directorio web define las rutas de los usuarios finales, la API para las rutas de la API, la consola para definir los comandos de la consola y, finalmente, los canales para los canales de transmisión de eventos.

Antes de Laravel 5.3, solo había un archivo de rutas ubicado en app/Http/routes.php.

Navegue a route/api.php y registre un nuevo punto final de API así:

<?php

// routes/api.php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

// new endpoint
Route::get('/', function () {
    return response()->json([
        'detail' => 'Back4app Containers rocks!',
    ]);
});

Genial, eso es todo.

Vuelva a iniciar el servidor de desarrollo (si aún no se está ejecutando) y vaya a http://localhost:8000/. Aún debería poder ver la página predeterminada de Laravel, pero si navega a /api/, debería ver el siguiente mensaje:

{
    "detail": "Back4app Containers rocks!"
}

Dockerizando una aplicación

En esta sección, dockerizaremos nuestra aplicación Laravel usando un Dockerfile.

Dockerfile

Un Dockerfile es un archivo de texto sin formato que contiene todas las instrucciones que el Docker Engine debe realizar para crear y ejecutar una imagen de Docker. Las instrucciones generalmente se escriben en mayúsculas y van seguidas de una cantidad personalizada de argumentos. Ejemplo:

INSTRUCTION arg1 arg2 ... argn

Continúe y cree un Dockerfile en la raíz del proyecto con los siguientes contenidos:

FROM php:8.1-apache

# Set the working directory
WORKDIR /var/www/html

# Install the necessary libraries
RUN apt-get update && apt-get install -y \
    libonig-dev \
    libzip-dev

# Install PHP extensions
RUN docker-php-ext-install \
    mbstring \
    zip

# Copy over the Laravel project
COPY . .

# Install Composer along with the dependencies
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN composer install

# Change ownership of our applications
RUN chown -R www-data:www-data /var/www/html

# Copy over the .env file and generate the app key
COPY .env .env
RUN php artisan key:generate

# Expose port 80
EXPOSE 80

# Adjusting Apache configurations
RUN a2enmod rewrite
COPY apache/apache-config.conf /etc/apache2/sites-available/000-default.conf

Este Dockerfile usa php:8.1-apache como imagen base, instala las dependencias del sistema operativo requeridas y copia el proyecto. Luego instala las dependencias de PHP a través de Composer, genera una clave Laravel, expone el puerto 80 y finalmente copia la configuración de Apache.

Para obtener más información sobre Dockerfiles, consulte la referencia de Dockerfile.

.dockerignore

Podemos usar un archivo .dockerignore para reducir el tamaño de la imagen. Este archivo funciona de manera similar a un archivo .gitignore. Nos permite omitir archivos y directorios específicos que no queremos que se incluyan en la imagen.

Cree un archivo .dockerignore en la raíz del proyecto con el siguiente contenido:

/.phpunit.cache
/node_modules
/public/build
/public/hot
/public/storage
/storage/*.key
/vendor
.phpunit.result.cache
auth.json
npm-debug.log
yarn-error.log
/.fleet
/.idea
/.vscode

No dude en modificar el archivo .dockerignore según sus necesidades.

Cree, ejecute y pruebe

Antes de intentar construir una imagen, asegúrese de tener Docker instalado:

$ docker --version

Docker version 20.10.22, build 3a2c30b

Una vez que haya verificado que puede construir la imagen:

$ docker build -t laravel-sample:1.0 .

Resumen de comandos:

  1. docker build se usa para construir la imagen.
  2. -t laravel-sample:1.0 etiqueta la imagen (los nombres de las imágenes suelen tener una estructura de name:version.
  3. . especifica el contexto de compilación. Esa es la raíz del proyecto en nuestro caso.

A continuación, use la imagen recién creada para hacer girar un contenedor:

$ docker run -p 80:80 --name laravel-sample-container -d laravel-sample:1.0

Resumen de comandos:

  1. docker run se usa para hacer girar un contenedor.
  2. -p 80:80 vincula el Puerto 80 en el host con el 80 en el contenedor.
  3. --name laravel-sample-container especifica el nombre del contenedor.
  4. -d ejecuta la imagen en modo separado, es decir, sin ocupar el terminal.
  5. laravel-sample:1.0 le dice al motor Docker qué imagen debe usarse.

Si ahora revisa los contenedores en ejecución, debería ver laravel-sample-container:

$ docker ps

CONTAINER  IMAGE               COMMAND          CREATED  PORTS              
b0bfbd     laravel-sample:1.0  "docker-php..."  2s ago   0.0.0.0:80->80/tcp  laravel

Por último, verifique si puede ver la aplicación visitando http://localhost/ en su navegador web favorito.

Subir a GitHub

Para implementar su aplicación en contenedores Back4app, primero debe cargar su código fuente en GitHub. Back4app Containers utiliza un sistema CI/CD que se implementa automáticamente cuando envía su código a una rama específica.

Los siguientes pasos requerirán que tenga una cuenta de GitHub (y Git instalado).

Comience navegando a https://github.com y creando un nuevo repositorio:

GitHub Create Repository

A continuación, elija un nombre adecuado y deje todo lo demás como predeterminado. Luego haga clic en el botón “Crear repositorio” para crear el repositorio:

GitHub Create Repository Dialog

Una vez que se crea su repositorio, tome la URL remota:

GitHub Remote URL

Ahora navegue de regreso a su proyecto local y abra la línea de comando. Para enviar el código a GitHub, primero debe inicializar un repositorio Git local a través de lo siguiente:

$ git init

A continuación, VCS todos los archivos y cree una nueva confirmación:

$ git add .
$ git commit -m "init"

Por último, inserte el código en el control remoto:

$ git push origin master

¡Eso es todo! Si actualiza la página del repositorio de GitHub, debería ver que todos los archivos se han enviado correctamente al repositorio de Git remoto.

Implementar aplicación

Para implementar una aplicación en Back4app Containers, primero debe iniciar sesión (o registrarse si aún no tiene una cuenta). A continuación, será redirigido a la página del panel de control de la aplicación cuando inicie sesión.

Luego use el botón “Crear nueva aplicación” para iniciar el proceso de creación de la aplicación:

Back4app Create App

Seleccione “Contenedores como servicio” ya que estamos implementando una aplicación en contenedores:

Back4app Create App Type

A continuación, conecte su GitHub a su cuenta Back4app e importe el repositorio que hemos creado en el paso anterior.

Back4app Containers Import Repository

Dele a su aplicación un nombre personalizado y deje todo lo demás como predeterminado.

Para crear una aplicación, haga clic en “Crear aplicación”. Back4app extraerá automáticamente el código fuente de GitHub e iniciará el proceso de creación de imágenes de la ventana acoplable al hacer clic en él. Después de unos minutos, el estado de la aplicación cambiará a “Listo”.

Una vez que eso suceda, use el enlace de la izquierda para abrir la página en su navegador.

Back4app Containers Successful Deployment

¡Eso es todo!

Conclusión

En conclusión, aprendió sobre PHP, sus ventajas, desventajas y opciones de implementación. Ahora sabe cómo iniciar e implementar una aplicación Laravel en Back4app.

Los temas que vimos a lo largo del tutorial apenas arañaron la superficie del marco de Laravel. Siempre puede obtener más información consultando la documentación de Laravel.

El código fuente está disponible en el repositorio back4app-containers-php GitHub.

Pasos futuros

Preguntas frecuentes

¿Qué es PHP?

PHP es un popular lenguaje gratuito de secuencias de comandos de propósito general. Fue diseñado para la web, pero también se puede usar para secuencias de comandos del lado del servidor, comandos de línea de comandos y aplicaciones de escritorio. PHP actualmente impulsa aproximadamente el 80% de la web y es utilizado por muchos sitios de alto tráfico como Facebook, Wikipedia, Slack, etcétera.

¿Cuáles son las ventajas de PHP?

– Buen rendimiento 
– Multiplataforma 
– Soporte de base de datos 
– Ecosistema dinámico 
– Fácil de aprender

¿Cuáles son las desventajas de PHP?

– Herramientas de depuración limitadas 
– Débilmente tipado 
– Defectos de seguridad 
– Vanilla PHP está desactualizado

¿Cómo implementar una aplicación PHP?

1. Codifique su aplicación PHP. 
2. Dockerice su aplicación y pruébela localmente.
3. Suba el código fuente a GitHub
4. Cree una cuenta de Back4app Containers
5. ¡Importe su repositorio de GitHub y haga clic en implementar!


Leave a reply

Your email address will not be published.