Saltar al contenido

Cómo implementar una aplicación Symfony 4 a producción con LEMP en Ubuntu 18.04

marzo 4, 2020

 

El autor seleccionado Software en el Interés Público Inc para recibir una donación como parte del programa de escritura de donaciones.

Introducción

Symfony es un framework PHP de código abierto con una estructura elegante y una reputación de ser un marco adecuado para poner en marcha cualquier proyecto independientemente de su tamaño. Como un conjunto de componentes reutilizables, su flexibilidad, la arquitectura y de alto rendimiento que sea una opción superior para la construcción de una aplicación empresarial de gran complejidad.

En este tutorial, se desplegará una norma de aplicación existente, Symfony 4 a la producción con una pila LEMP (Nginx, MySQL y PHP) en Ubuntu 18.04, que le ayudará a comenzar a configurar el servidor y la estructura del marco. Nginx es un popular de código abierto, de alto rendimiento del servidor HTTP con características adicionales, incluyendo soporte de proxy inverso. Tiene una buena reputación y alberga algunos de los sitios más grandes y más altos de tráfico en Internet. Si decide implementar su propia aplicación Symfony lugar, puede que tenga que poner en práctica medidas adicionales dependiendo de la estructura existente de su aplicación.

Requisitos previos

Para completar este tutorial, necesitará:

  • Una Ubuntu 18.04 servidor configurado siguiendo la guía de configuración inicial del servidor de Ubuntu 18.04, incluyendo un usuario no root con acceso sudo y un firewall.
  • Nginx, MySQL y PHP instalado siguiendo Cómo instalar Linux, Nginx, MySQL, PHP (pila LEMP) en Ubuntu 18.04.
  • Compositor instalarse siguiendo los pasos 1 y 2 de Cómo instalar y utilizar Compositor en Ubuntu 18.04.
  • Git instalar siguiendo Cómo instalar Git en Ubuntu 18.04.

Paso 1 – Crear una base de datos de usuario y para el

aplicación siguiendo las instrucciones de los requisitos previos, ahora tiene todas las dependencias de servidor básicas que se requieren para la instalación de la aplicación. Como todas las aplicaciones web dinámicas requiere una base de datos, se creará un usuario y configurar correctamente una base de datos para la aplicación de esta sección.

Para crear una base de datos MySQL para nuestra aplicación y un usuario asociado a él, es necesario acceder al cliente de MySQL usando la cuenta root de MySQL:

mysql -u root -p

  • mysql -u root -p

Introduzca la contraseña adecuada, que debe ser la misma contraseña utilizada cuando se ejecuta mysql_secure_installation.

A continuación, cree la base de datos de aplicaciones con:

CREATE DATABASE blog;

  • Crear Blog base de datos;

Verá la siguiente salida en la consola:

OutputQuery OK, 1 row affected (0.00 sec)

Ha creado la base de datos de la aplicación. Ahora puede crear un usuario MySQL y otorgarles acceso a la base de datos recién creada.

Ejecutar el siguiente comando para crear un usuario y contraseña de MySQL. Puede cambiar el nombre de usuario y contraseña a algo más seguro si lo desea:

CREATE USER 'blog-admin'@'localhost' IDENTIFIED BY 'password';

  • CREAR USUARIO el blog-admin ‘@ ‘localhost’ IDENTIFICADAS POR ‘contraseña’;

Usted verá el siguiente resultado:

OutputQuery OK, 0 rows affected (0.00 sec)

Actualmente, el usuario el blog-admin no tiene los permisos adecuados sobre la base de datos de la aplicación. De hecho, incluso si el blog-admin intenta acceder al sistema con su contraseña, no van a ser capaces de llegar a la cáscara de MySQL.

Un usuario necesita los permisos adecuados antes de acceder o llevar a cabo una acción específica en una base de datos. Utilice el siguiente comando para permitir el acceso completo a la el blog base de datos para el usuario el blog -admin:

GRANT ALL PRIVILEGES ON blog.* TO 'blog-admin'@'localhost';

  • conceder a todos los privilegios en el blog * A ‘del blog-admin’ @ ‘localhost’;.

Usted verá el siguiente resultado:

OutputQuery OK, 0 rows affected (0.00 sec)

El el blog -admin ahora tiene todos los privilegios sobre todas las tablas dentro de la base de datos de el blog . Para volver a cargar las tablas de permisos y aplicar los cambios, es necesario realizar una operación de vaciado de privilegios mediante la instrucción ras:

FLUSH PRIVILEGES;

  • PRIVILEGIOS FLUSH;

Usted verá el siguiente resultado:

OutputQuery OK, 0 rows affected (0.00 sec)

haya terminado de crear un nuevo usuario y la concesión de privilegios. Para probar si vas por buen camino, salir del cliente de MySQL:

quit;

  • dejar de fumar;

Y conectarse de nuevo, utilizando las credenciales del usuario de MySQL que acaba de crear e introducir la contraseña cuando se le solicite:

mysql -u blog-admin -p

  • mysql -u -p el blog-admin

Compruebe que la base de datos se puede acceder por el usuario con:

SHOW DATABASES;

  • DEMOSTRACIÓN dE BASES dE DATOS;

Verá la tabla del blog en la salida:

Output+--------------------+
| Database |
+--------------------+
| information_schema |
| blog |
+--------------------+
2 rows in set (0.00 sec)

Por último, salir del cliente de MySQL:

quit;

  • dejar de fumar;

Ha creado una base de datos, un usuario de la aplicación de demostración, y se ha concedido al usuario recién creado los privilegios adecuados para acceder a la base de datos. Ahora está listo para configurar la aplicación de demostración.

Paso 2 – Configuración de la aplicación de demostración

Para mantener este sencillo tutorial, se va a implementar una aplicación de blog construido con Symfony. Esta aplicación permitirá a un usuario autenticado para crear una entrada de blog y almacenarla en la base de datos. Además, el usuario de la aplicación se puede ver todos los mensajes y los detalles asociados con un autor.

El código fuente de la aplicación de blog se va a implementar en este tutorial es en GitHub. Que va a utilizar Git para sacar el código fuente de la aplicación de GitHub y guardarlo en un nuevo directorio.

En primer lugar, crear un directorio que servirá como directorio raíz para la aplicación. Por lo tanto, ejecute el siguiente comando desde la consola para crear un Symfony-blog nuevo directorio llamado:

sudo mkdir -p /var/www/symfony-blog

  • sudo mkdir -p / var / www / Symfony sigue

el fin de trabajar con los archivos de proyecto usando un no cuenta de usuario root, necesitará cambiar el propietario de la carpeta y el grupo ejecutando:

sudo chown sammy:sammy /var/www/symfony-blog

  • sudo chown Sammy: Sammy / var / www / symfony-blog

Reemplazar Sammy con su nombre de usuario sudo no root.

Ahora, se puede cambiar en el directorio padre y clonar la aplicación en GitHub:

cd /var/www
git clone https://github.com/yemiwebby/symfony-blog.git symfony-blog

  • cd / var / www
  • git clone https://github.com/yemiwebby/symfony-blog.git Symfony-blog

verá la siguiente salida:

OutputCloning into 'symfony-blog'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (122/122), done.
remote: Total 180 (delta 57), reused 164 (delta 41), pack-reused 0
Receiving objects: 100% (180/180), 167.01 KiB | 11.13 MiB/s, done.
Resolving deltas: 100% (57/57), done.

la aplicación de demostración se establece ahora. En el siguiente paso, va a configurar las variables de entorno e instalar las dependencias necesarias para el proyecto.

Paso 3 – Configuración de las variables de entorno para la aplicación

Para completamente instalada la aplicación, es necesario instalar las dependencias del proyecto y configurar correctamente los parámetros de aplicación. Por defecto

, se ejecuta la aplicación Symfony en un modo de desarrollo, lo que le da un registro muy detallado para los fines de depuración. Esto no es aplicable a lo que está haciendo en este tutorial, y no es bueno para la práctica de un entorno de producción, ya que puede ralentizar las cosas y crear grandes archivos de registro.

Symfony tiene que ser consciente de que se está ejecutando la aplicación en un entorno de producción. Puede definir el sitio, ya sea la creación de un archivo que contiene .env declaraciones de variables, o la creación de variables de entorno directamente. Dado que también se puede utilizar el archivo .env para configurar las credenciales de base de datos para esta aplicación, que tiene más sentido para usted para hacer esto. Cambiar el directorio de trabajo al proyecto clonado y crear el archivo con .env:

cd symfony-blog
sudo nano .env

  • cd Symfony-blog
  • sudo nano .env

Añadir las siguientes líneas al archivo para configurar el entorno de aplicaciones de producción:

APP_ENV=prod
APP_DEBUG=0

APP_ENV es una variable de entorno que especifica que la aplicación está en producción, mientras que APP_DEBUG es una variable de entorno que especifica si la aplicación debe ejecutarse en modo de depuración o no. Ha establecido en false por ahora.

Guarde el archivo y salga del editor.

A continuación, instalar una extensión de PHP Symfony que use aplicaciones de XML mango:

sudo apt install php7.2-xml

  • sudo apt-xml instalar php7.2

A continuación, es necesario instalar las dependencias del proyecto, ejecución compositor instalar:

cd /var/www/symfony-blog
composer install

  • cd / var / www / symfony-blog
  • compositor instalar

ha configurado correctamente las variables de entorno e instalado las dependencias necesarias para el proyecto. A continuación, se pondrá en marcha las credenciales de base de datos.

Paso 4 – Configuración de la base de datos de credenciales

Con el fin de recuperar datos de la base de datos de la aplicación que creó anteriormente, tendrá que instalar y configurar las credenciales de base de datos necesarios desde la aplicación Symfony.

Abrir el archivo de nuevo .env:

sudo nano .env

  • sudo nano .env

Añadir el siguiente contenido en el fichero, lo que le permitirá fácilmente conectarse e interactuar correctamente con la base de datos. Puede añadirlo justo después de la APP_DEBUG = 0 línea dentro del archivo .env: Marco

...
DATABASE_URL=mysql://blog-admin:[email protected]:3306/blog

El Symfony utiliza una biblioteca de terceros llamado Doctrina para comunicarse con las bases de datos. Doctrina le proporciona herramientas útiles para que las interacciones con bases de datos de fácil uso. Ahora

Puede utilizar Doctrina de actualizar su base de datos con las tablas de la aplicación Github clonado. Ejecutar este comando para hacer eso:

php bin/console doctrine:schema:update --force

  • php bin doctrina / consola: esquema: actualización –force

Verá la siguiente salida:

OutputUpdating database schema...
4 queries were executed
[OK] Database schema updated successfully!

Después de configurar las credenciales necesarias y actualizar el esquema de base de datos, ahora pueden interactuar fácilmente con la base de datos. Con el fin de iniciar la aplicación con algunos datos, se le cargar un conjunto de datos de prueba en la base de datos en la siguiente sección.

Paso 5 – Llenar su base de datos mediante Doctrina-Accesorios

Por el momento, las tablas de nueva creación están vacíos. Va a poblarlo usando doctrina accesorios. El uso de accesorios doctrina no es un requisito previo para aplicaciones de Symfony, que sólo se utiliza para proporcionar datos ficticios para su aplicación.

Ejecutar el siguiente comando para cargar automáticamente los datos de prueba que contiene los detalles de un autor y una muestra posterior en la tabla de base de datos creada para el blog: php bin doctrina

php bin/console doctrine:fixtures:load

  • / consola: accesorios: Carga

Usted recibirá una advertencia acerca de la base de datos siendo purgada. Usted puede seguir adelante y tipo Y:

OutputCareful, database will be purged. Do you want to continue y/N ? y
> purging database
> loading App\DataFixtures\ORM\Fixtures

En la sección siguiente se compensará y calentar hasta que la memoria caché.

Paso 6 – Compensación y el calentamiento de su caché

Para garantizar que sus cargas de aplicaciones más rápido cuando los usuarios realizan solicitudes, es una buena práctica para calentar la caché durante el despliegue. El calentamiento de la caché de páginas genera y almacena para respuestas más rápidas tarde en lugar de construir totalmente nuevas páginas. Afortunadamente, Symfony dispone de un comando para borrar la memoria caché que también provoca un calentamiento. Ejecute el siguiente comando para ese propósito:

php bin/console cache:clear

  • caché php bin / consola: claro

Usted verá el siguiente resultado:

OutputClearing the cache for the prod environment with debug false
[OK] Cache for the "prod" environment (debug=false) was successfully cleared.

Se concluirá la puesta en marcha en un momento. Todo lo que queda es configurar el servidor web. Que va a hacer que en la próxima sección.

Paso 7 – Configuración del servidor Web y ejecutar la aplicación

Por ahora, usted tiene Nginx instalado para servir a sus páginas y MySQL para almacenar y gestionar sus datos. Vamos a configurar el servidor web mediante la creación de un nuevo bloque de servidor de aplicaciones, en lugar de modificar el valor predeterminado.

abierto un nuevo bloque de servidor con:

sudo nano /etc
ginx/sites-available/blog

  • sudo nano / etc / nginx / sites-available / blog

Añadir el siguiente contenido para el nuevo archivo de configuración del servidor de bloque. Asegúrese de que sustituya el your_server_ip dentro del bloque servidor con su dirección IP del servidor:

server {
listen 80;
listen [::]:80;

server_name blog your_server_ip;
root /var/www/symfony-blog/public;
index index.php;
client_max_body_size 100m;

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

location ~ \.php {
try_files $uri /index.php =404;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
}

location ~ /\.(?:ht|git|svn) {
deny all;
}
}

primer lugar, se especifica el escuchamos directivas para Nginx, que es por defecto en el puerto 80, y luego ponga el nombre del servidor para que coincida con las peticiones de la dirección IP del servidor . A continuación, utiliza las directivas de raíz para especificar la raíz del documento para el proyecto. La aplicación symfony-blog se almacena en / var / www / symfony-blog, pero para cumplir con las mejores prácticas, fijamos la web raíz en / var / www / symfony-blog / público, ya que sólo el subdirectorio / pública debe ser expuesto a La Internet. Por último, hemos configurado la directiva ubicación para manejar el procesamiento de PHP.

Después de añadir el contenido, guarde el archivo y salga del editor.

Nota: directorio de sitios habilitados- Si ha creado el archivo de example.com en el artículo prerrequisito Cómo instalar Linux, Nginx, MySQL, PHP (pila LEMP) en Ubuntu 18.04, quitarlo de la con sudo rm / etc / nginx / sites-enabled / example.com por lo que no entra en conflicto con este nuevo archivo.

Para habilitar el bloque de servidor recién creado, tenemos que crear un enlace simbólico desde el nuevo archivo de configuración del bloque de servidor que se encuentra en el directorio / etc / nginx / sites-available en el directorio / etc / nginx / sites-enabled utilizando el siguiente comando :

sudo ln -s /etc
ginx/sites-available/blog /etc
ginx/sites-enabled/

  • sudo ln -s / etc / nginx / sites-available / blo / etc / nginx / sites-enabled /

Compruebe el nuevo archivo de configuración de los errores de sintaxis ejecutando:

sudo nginx -t

  • sudo nginx – t

Este comando imprime errores en la consola si los hay. Una vez que no hay errores de ejecutar este comando para recargar Nginx:

sudo systemctl reload nginx

  • sudo systemctl recarga nginx

Usted acaba de concluir el último paso necesario para implementar con éxito la aplicación de Symfony 4. Ha configurado el servidor web mediante la creación de un bloque de servidor y configurar correctamente la raíz web con el fin de hacer que la aplicación web accesible.

Por último, ahora se puede ejecutar y probar la aplicación. Visita http: // your_server_ip en su navegador favorito:

La siguiente imagen es la captura de pantalla de la aplicación de blog Symfony que debería ver en la dirección IP de su servidor:

Conclusión

Symfony es un framework PHP rica en características con una arquitectura que se burla de desarrollo web para el desarrollador de software que construye usarlo. Symfony es un framework de desarrollo web con múltiples funciones que proporciona a los desarrolladores herramientas poderosas para aplicaciones web de construcción. A menudo se considera una buena opción para las aplicaciones empresariales debido a su flexibilidad. Los pasos para implementar una aplicación típica de Symfony variar, dependiendo de la configuración, la complejidad y los requisitos de la aplicación.

En este tutorial, se despliega manualmente una aplicación Symfony 4 para la producción de un servidor de Ubuntu 18.04 corriendo LEMP. Ahora puede aplicar este conocimiento para el despliegue de sus propias aplicaciones Symfony.