Como configurar CakePHP 3.5 dentro de Google Cloud con AppEngine (PHP Flex) y me costo mucho por eso dejo acá los pasos a seguir con la versión 3.5.*.
Primero pasos entrar a la consola shell de google por el navegador y pone estas lineas para instalar composer en AppEngine:
mkdir -p ${HOME}/bin
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === rtrim(file_get_contents('https://composer.github.io/installer.sig'))) { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php --filename=composer --install-dir=${HOME}/bin
export PATH=${HOME}/bin:${PATH}
Listo, ya poder ejecutar
composer en la consola
composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.2.0 2018-01-17 01:28:52
...
...
Después hay que bajar cakephp 3.5.* y sus dependencias con composer
composer self-update && composer create-project --no-dev --ignore-platform-reqs --prefer-dist cakephp/app CK35 3.5.*
Editar el archivo CK35/composer.json y agregar la extencion intl que es requerida para que la active AppEngine en el Deploy de manera automatica por Google Cloud
"require": {
"php": ">=5.6",
"ext-intl": "*",
"cakephp/cakephp": "3.5.*",
.....,
.....,
},
......
.....
Crear un archivo en CK35/app.yaml para activar el entorno PHP Flex, indicar la carpeta root publica, el archivo por el que pasan todas las llamas, carpeta estaticos que son publicas. Y variables del sistema que pueden ser leidas por PHP, para configurar la DBs, Debug, etc.. esto ultimo es a gusto.
runtime: php
env: flex
runtime_config:
document_root: webroot
front_controller_file: index.php
handlers:
- url: /css
static_dir: webroot/css
- url: /img
static_dir: webroot/img
- url: /js
static_dir: webroot/js
- url: /favicon\.ico
static_files: webroot/favicon.ico
upload: webroot/favicon.ico
- url: /.*
script: index.php
env_variables:
# Uncomment the following to enable debug mode.
CAKEPHP_DEBUG: '1'
# If connecting via TCP/IP to Google Cloud SQL
PROD_DB_HOSTNAME: "__PROD_DB_HOSTNAME__"
PROD_DB_PORT: "__PROD_DB_PORT__"
# If connecting via App Engine to Google Cloud SQL
PROD_DB_UNIXSOCKET: "__PROD_DB_SOCKET__"
PROD_DB_USERNAME: "__PROD_DB_USERNAME__"
PROD_DB_PASSWORD: "__PROD_DB_PASSWORD__"
PROD_DB_DATABASE: "__PROD_DB_DATABASE__"
# Change below to match your settings for local development.
# If connecting to MySQL using TCP/IP
DEV_DB_HOSTNAME: "__DEV_DB_HOSTNAME__"
DEV_DB_PORT: "__DEV_DB_PORT__"
# If connecting to MySQL using sockets.
DEV_DB_UNIXSOCKET: "__DEV_DB_SOCKET__"
DEV_DB_USERNAME: "__DEV_DB_USERNAME__"
DEV_DB_PASSWORD: "__DEV_DB_PASSWORD__"
DEV_DB_DATABASE: "__DEV_DB_DATABASE__"
Con esto, ya estamos listo para ejecutar el deploy dentro de la carpeta CK35 donde esta el app.yaml
CK35/gcloud app deploy
Le comento que hay que comentar en bootstrap.php la linea que carga los plugins que son instalados por composer para DEV ya que cuando se hace un DEPLOY no van a estar disponible los archivos y va da error que no encuentra los archivos, este error tonto puede hacer buscar el problema por un rato. Un ejemplo es el Plugin
DebugKit que es un requerimiento DEV para composer.
O manejar de manera correcta la variable de entorno y poder CAKEPHP_DEBUG = '0' para que los plugin que se cargan para DEV no se intenten cargar después de hacer el DEPLOY