Saltar al contenido principal

Práctica 403. Despregue de backend e frontend por separado


Requisitos


Apartado 1

Comezaremos ca posta en produción do backend creando a base de datos de produción. Utilizaremos o plan gratuíto de Aiven. O plan gratuíto está dispoñible para os servizos de PostgreSQL, MySQL e Valkey (unha base de datos tipo Redis).

Realiza os seguintes pasos:

  • Crea unha conta en Aiven.
  • Elixe Personal Project, Experiment with new technologies e Developer.
  • Vai á Create new service. E selecciona unha base de datos PostgreSQL. O nome do servizo da igual, selecciona o plan gratuíto e despois un servidor que estea en Europa. Espera a que teñas preparado o servizo. Unha vez que a teñas darache os datos de conexión a base de datos. Garda estes datos de algún xeito. Senón, sempre podes volver a recuperalos entrando no servido de Aiven.

Apartado 2

A continuación, clonaremos a nosa aplicación de backend do repositorio https://github.com/inf-fp/dapw-ud4-api-rest-laravel.

Realiza os seguintes pasos:

  • Inicia a máquina virtual e conéctate por SSH dende o Visual Studio Code.
  • Clona o repositorio anterior en /home/debian/.

Apartado 3

Agora xa temos o código fonte da aplicación que imos poñer en produción no servidor. Pero esta conta con dependencias que aínda non foron instaladas. Isto podémolo realizar con Composer tal e como vimos na Unidade 2.

Realiza os seguintes pasos:

  • Instala Composer se non está instalado.
  • Sitúate no directorio src que onde se atopa o código da aplicación.
  • Instala as dependencias con Composer. Recorda non instalar aquelas que son para desenvolvemento. Realiza captura do comando utilizado.

Apartado 4

A continuación, modificaremos o ficheiro .env. No noso caso, teremos que modificar dúas partes diferenciadas: unha para indicarlle a Laravel que a aplicación está en produción, e outra para configurar a conexión coa base de datos de produción. Ademais será necesario crear unha clave para a aplicación.

Realiza os seguintes pasos:

  • Modifícalle o nome ao ficheiro .env.exemple por .env.
  • Modifica as seguintes liñas do ficheiro .env:
    • APP_DEBUG=true por APP_DEBUG=false.
    • APP_ENV=local por APP_ENV=production.
  • Xera unha clave APP_KEY co comando php artisan key:generate.

Apartado 5

A continuación, faremos a migración da base de datos. Para poder realizala, primeiro deberemos modificar o ficheiro .env para indicar a conexión a base de datos en produción.

Como a base de datos que vamos a utilizar é PostgreSQL, seguramente non instalamos a extensión de PHP para poder conectarse a este tipo de base de datos. Polo tanto, instala o driver e reinicia Apache Server para que este poida cargar dita extensión.

sudo apt update
sudo apt install php-pgsql
sudo service apache2 restart

Modifica os datos da conexión a base de datos polos obtidos nos pasos anteriores no ficheiro .env. O tipo de base de datos é pgsql. Realiza capturas do ficheiro .env.

DB_CONNECTION=mysql
...

Executa o comando php artisan migrate para realizar a migración da base de datos. Isto creará e modificarás as táboas do noso proxecto.


Apartado 6

Procederemos agora a consultar as táboas das base de datos creadas. Para iso, utilizaremos a extensión SQLTools de VSC que xa utilizamos en prácticas anteriores.

Realiza os seguintes pasos:

  • Vaite á extensión SQLTools de VSC e preme Add New Connection. Se non a tés, instálaa.
  • Seguramente non vexas un driver para PostgreSQL. Así que preme en Get more drivers. Instala SQLTools PostgreSQL/Cockroach Driver.
  • Selecciona o driver de PostgreSQL, e mete os datos que se che proporcionaron para realizar a conexión. Ademais, deberás activar o SSL e desactivar a opción rejectUnauthorized.
  • Conéctate e agora busca a táboa migrations e o seu contido. Realiza captura do contido de dita táboa.

Apartado 7

En Laravel, cando fas unha posta en produción, é moi habitual limpar as cachés.

Limpa a caché global, de configuración, de rutas e de vistas. Realiza captura dos comandos executados.


Apartado 8

Agora imos trasladar a nosa aplicación para que Apache Server poida acceder a ela e servila.

Realiza os seguintes pasos:

  • Crea un directorio en /var/www/laravel/.
  • Copia todo o contido do directorio src do repositorio descargado a este novo directorio. Utiliza sudo para ter permisos de superusuario. Ademais necesitaras copiar arquivos ocultos, así que utiliza o seguinte comando:
    sudo cp -r /home/dadmin/api-rest-en-laravel-t04.03/src/{.,}* /var/www/laravel
  • Comproba con ls -la que se copiaron correctamente tódolos ficheiros. Realiza captura desta comprobación.
  • Pon ao usuario e grupo www-data de todos estes ficheiros.

Apartado 9

En Laravel o directorio public/ contén:

  • O ficheiro index.php: é o punto de entrada da aplicación.
  • Os assets públicos como ficheiro CSS, JS ou imaxe, entre outros.

Todo o resto do proxecto (código, configuración, migracións, etc.) non debería ser accesible directamente desde o navegador, por seguridade. Polo tanto na directiva DocumentRoot deberemos especificar este directorio. E na de Directory tamén.

Se puxeras como DocumentRoot, o cartafol raíz do proxecto, entón o servidor exporía ao público ficheiros sensibles:

  • .env (contén claves e contrasinais da base de datos, APIs, etc.).
  • Código PHP de app/ e routes/.
  • Migracións e outros datos internos.

Laravel segue o patrón Front Controller, é dicir, todas as peticións HTTP pasan por un só ficheiro: public/index.php. Este ficheiro carga o framework e decide que controlador ou ruta executar. Así podes ter rutas limpas tipo /usuarios sen expoñer a estrutura de ficheiros.

O CSS, JS, imaxes ou fontes da app tamén están en public/. Apache pode servilos directamente, sen pasar polo framework.

Realiza os seguintes pasos:

  • Realiza unha copia do ficheiro de definición do Virtual Host de nome api.conf.
  • Modifica os datos para que busque no directorio creado nos pasos anteriores. Esta aplicación resolverá para o nome api.192-168-56-100.nip.io. Os logs de acceso almacenaranse no ficheiro /var/log/apache2/api-access.log. Realiza captura do ficheiro de definición.
  • Habilita o sitio.
  • Recarga a configuración de Apache Server.
  • Abre unha ventá privada e pon na URL a dirección http://api.192-168-56-100.nip.io. Realiza capturas da páxina principal de Laravel.

Apartado 10

Como xa mencionamos anteriormente, en Laravel todas as peticións (agás imaxes, CSS ou JS) deben pasar polo ficheiro public/index.php. Ese ficheiro é o front controller, encargado de cargar o framework e resolver a ruta solicitada. Para que isto funcione debemos, fáltanos por realizar uns pequenos pasos:

  • Activar mod_rewrite permítenos dicirlle a Apache que, se un recurso non existe, redirixa esa petición cara a index.php. Se pedimos https://dominio.com/api/users, Apache busca un cartafol chamado api/ ou un ficheiro chamado users. Como non existen, devolvería un 404 Not Found.
  • Incluír a directiva AllowOverride All para permitir que Laravel use .htaccess. O ficheiro public/.htaccess de Laravel xa trae as regras necesarias de reescritura. Con todo, Apache só le ese .htaccess se a configuración do servidor lle permite sobrescribir opcións a nivel de directorio. Iso contrólase co parámetro AllowOverride. Poñendo AllowOverride All, autorizamos que Apache aplique as regras de public/.htaccess (onde está o RewriteEngine On e o RewriteRule ^ index.php).

Polo tanto, imos realizar este último paso para que a nosa API-REST quede perfectamente posta en produción.

  • Desde a ventá privada, accede a http://api.192-168-56-100.nip.io/api/libros. Deberías recibir un erro 404.
  • Activa en Apache o módulo rewrite e reinicia Apache.
  • Engade na definición do Virtual Host dentro do bloque Directory a directiva AllowOverride All. Isto permitirá que se permita utilizar os ficheiros .htaccess.
  • Actualiza a ventá privada e poderás ver xa porque redirecciona. Realiza capturas do que mostra o navegador web.

Apartado 11

Agora imos utilizar a API-REST con cURL. No README.md do proxecto poderás atopar un exemplo de comandos cURL.

Realiza os seguintes pasos:

  • Desde o equipo anfitrión, executa o comando de curl para crear un novo libro. Terás que cambiar o dominio na URL. Realiza captura da execución e saída do comando.
  • Desde o equipo anfitrión, executa o comando de curl que permita ver tódolos libros. Realiza captura da execución e saída do comando.