Deployar una Aplicación de Laravel en Google Cloud Run

A continuación te voy a mostrar como hacer un deploy o subir tu aplicación de laravel 8 (PHP) a Google Cloud Run.

Contenerización Mediante Docker

Google Cloud Run es un hosting de tipo serverless o sin servidor que almacena aplicaciones mediante contenedores de docker, por ello necesitarás crear los archivos de docker necesarios para que tu aplicación de laravel pueda correr sobre Cloud Run.

Dockerfile

Este archivo se va a ejecutar al momento de deployar tu aplicación a Google Cloud Run y va a generar el contenedor en donde va a correr tu aplicación, de manera que debemos escribir los comandos necesarios para crear el servidor de docker en Cloud Run.

En este caso crearemos un servidor de apache con un archivo de configuración ubicado en la carpeta docker/000-default.conf el cual expondrá el puerto 8080 de nuestro servidor y permitirá a nuestra web correr sobre dicho puerto.

Por un lado, el archivo dockerfile copiará nuestra app en una carpeta temporal llamada /app e instalará las dependencias necesarias mediante composer para posteriormente crear el servidor de apache con sus respectivas dependencias y copiar nuestra carpeta temporal a la carpeta principal del servidor /var/www, así como nuestro archivo de configuración de nuestro sitio web.

Por último, se expondrá el puerto 8080 y se habilitarán los permisos necesarios como el de escritura de la carpeta /var/www/storage que corresponde al storage de nuestra aplicación.

Seguidamente te muestro el dockerfile que debes agregar al root de tu aplicación.

FROM composer:2.1.10 as build WORKDIR /app COPY . /app RUN composer install && composer dumpautoload FROM php:8.1.0RC5-apache-buster RUN docker-php-ext-install pdo pdo_mysql EXPOSE 8080 COPY --from=build /app /var/www/ COPY docker/000-default.conf /etc/apache2/sites-available/000-default.conf RUN chmod 777 -R /var/www/storage/ && \ echo "Listen 8080">>/etc/apache2/ports.conf && \ chown -R www-data:www-data /var/www/ && \ a2enmod rewrite
Dockerfile

Adicionalmente, el archivo de configuración para el servidor de apache que debes colocar en la carpeta /docker/000-default.conf

<VirtualHost *:8080> ServerAdmin webmaster@localhost DocumentRoot /var/www/public/ <Directory /var/www/> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
000-default.conf

Deploy

Para hacer el deploy o subir nuestro contenedor a google cloud, únicamente deberás instalar la suite de google gsutil en tu computador y ejecutar el siguiente comando en el root de tu proyecto una vez te has logueado.

gcloud run deploy --source .
Comando para Deployar en Google Cloud Run

Si no sabes cómo loguearse desde la consola, puedes ejecutar el siguiente comando e ingresar la información de tu cuenta de google cloud.

gcloud auth login
Comando para Loguearse a Google Cloud a Través de la Consola

Si deseas que tu aplicación se deploye usando integración y deploy continuo CI/CD, puedes seguir el tutorial sobre ¿Cómo Configurar un Servicio de Cloud Run con Cloud Build para Integración y Deploy Continuo en Github?

Base de Datos MySQL

Una vez has deployado tu aplicación de Laravel, vamos a pasar a crear y conectar la base de datos de MySQL.

Si aún no has creado tu base de datos, te recomiendo seguir este tutorial sobre ¿Cómo Crear una Base de Datos de MySQL en Google Cloud? y además, este otro para ¿Conectar una Base de Datos a una Aplicación de Laravel dentro de un Servicio de Cloud Run?

Importante

Cada versión de contenedor es independiente de las demás por lo que los cambios que generes en archivos dentro del contenedor solo serán visibles en dicho contenedor, por lo que si tu aplicación permite la subida de archivos a tu servidor, todos estos deberán ser mediados a través de Google Cloud Storage.