PHP en Google compute engine + cloud sql

Hoy en día los servicios en la nube son una clara alternativa a la hora de alojar un sitio web, ya no es necesario un servidor dedicado con las prestaciones y herramientas que ofrecen Google, Amazon o Azure.

En el caso de Google existen alternativas más sencillas para alojar un sitio web que las de utilizar compute engine (una maquina virtual), me refiero a app engine, pero a mi parecer se pierde mucho control sobre las prestaciones que queramos tener. En este post pienso hablar de como instalar nginx con soporte para http2 y php 7.2 en una maquina virtual con CentOS 7, además de enseñar a configurarlo para utilizar una base de datos MySQL 5.7 almacenada en el servicio cloud SQL de Google.

A la hora de sar de alta estos servicios es muy recomendable que esten en la misma zona geográfica, tanto la maquina virtual como la instancia de MySQL.

Una vez creada nuestra instancia de maquina virtual instalaremos nginx y comprobaremos su configuración con:

nginx -V
nginx -t

Ahora sólo nos queda ejecutarlo como servicio

# arrancamos el servicio
# si ejecutas sudo systemctl start nginx -> nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)
sudo service nginx start 
# lo habilitamos para que se inicie al iniciar la máquina
sudo systemctl enable nginx
# editamos el archivo de configuracion para permitir la conexión con la ip de la instancia
sudo vim /etc/nginx/conf.d/default.conf
# reinciamos el servicio ya es posible utilizar systemctl 
# sudo systemctl restart nginx

Instalamos php y modificar en el archivo /etc/php-fpm.d/www.conf el usuario que ejecutará el servicio php-fpm para que sea nginx, al igual que el grupo.

sudo systemctl enable php-fpm
sudo systemctl start php-fpm
sudo chown -R nginx:nginx /var/lib/php
# comprobamos que esté habilitada la conexión con mysql en selinux
getsebool -a | grep httpd_can_network
# si no lo está la habilitamos para evitar este error PHP Warning:  mysqli_connect(): (HY000/2002): Permission denied
sudo setsebool -P httpd_can_network_connect_db 1
# si tenemos alguna carpeta en la cual tendriamos que escribir, habilitamos los permisos en selinux también
sudo chcon -R -t httpd_sys_rw_content_t folder-name

Así tenemos configurada nuestra instancia, vamos a configurar ahora la conexión con nuestra base de datos.



Lo primero es hacer nuestra ip asignada estática (https://console.cloud.google.com/networking/addresses/list?project=xxxxxx), por defecto es dinámica y no queremos esto a la hora de conectarla a un servicio de Cloud SQL.



Y por último habilitar esta ip para que se pueda conectar nuestra maquina virtual con PHP.



Nota: es posible configurar usuarios para acceder a nuestra base de datos y que no sean root pero estos usuarios tendrán permisos para acceder a todas las bases de datos en esa instancia, no se pueden personalizar estos permisos ni configurarlos desde ningún cliente remoto.

Comentarios

Belén Perea ha dicho que…
Excelente gracias.
Antes si eran necesarios los Servidores dedicados