Práctica 403. Despregue de backend e frontend por separado
Requisitos
- VirtualBox.
- Máquina virtual DAPW.
- Mozilla Firefox.
- Aiven.
- Conexión a Internet.
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 technologieseDeveloper. - 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
srcque 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.exemplepor.env. - Modifica as seguintes liñas do ficheiro
.env:APP_DEBUG=trueporAPP_DEBUG=false.APP_ENV=localporAPP_ENV=production.
- Xera unha clave
APP_KEYco comandophp 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. InstalaSQLTools 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
SSLe desactivar a opciónrejectUnauthorized. - Conéctate e agora busca a táboa
migrationse 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
srcdo repositorio descargado a este novo directorio. Utilizasudopara 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 -laque se copiaron correctamente tódolos ficheiros. Realiza captura desta comprobación. - Pon ao usuario e grupo
www-datade 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/eroutes/. - 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_rewritepermítenos dicirlle a Apache que, se un recurso non existe, redirixa esa petición cara aindex.php. Se pedimoshttps://dominio.com/api/users, Apache busca un cartafol chamadoapi/ou un ficheiro chamadousers. Como non existen, devolvería un 404 Not Found. - Incluír a directiva
AllowOverride Allpara permitir que Laravel use.htaccess. O ficheiropublic/.htaccessde Laravel xa trae as regras necesarias de reescritura. Con todo, Apache só le ese.htaccessse a configuración do servidor lle permite sobrescribir opcións a nivel de directorio. Iso contrólase co parámetroAllowOverride. PoñendoAllowOverride All, autorizamos que Apache aplique as regras depublic/.htaccess(onde está oRewriteEngine One oRewriteRule ^ 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 erro404. - Activa en Apache o módulo
rewritee reinicia Apache. - Engade na definición do Virtual Host dentro do bloque
Directorya directivaAllowOverride 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
curlpara 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
curlque permita ver tódolos libros. Realiza captura da execución e saída do comando.