Deploying CakePHP Applications on AppFog: A Comprehensive Guide
This guide, originally published on CloudSpring, details deploying a CakePHP application to AppFog, a Platform as a Service (PaaS), while emphasizing best practices for PHP application structure. We'll create a simple note-taking application, then organize it for optimal deployment and maintenance.
Key Concepts:
Getting Started with AppFog:
AppFog, based on Cloud Foundry, supports multiple programming languages and allows deployment across various infrastructure providers. Sign up for a free account (requires email and password) offering 2GB RAM, 10 services (100MB each), and a 50GB data transfer limit. You can also migrate your app to any Cloud Foundry-compatible service.
Creating the Local Application:
http://fognotes.local
), setting the document root to app/webroot
.fognotes_local
).data
directory with subdirectories config
and logs
. Move app/tmp
into data
. Ensure the data/logs
directory is writable by the web server.ln -s lib/Cake/Console/cake cake
Your directory structure should resemble this:
<code>FogNotes/ app/ data/ config/ logs/ tmp/ cache/ logs/ sessions/ tests/ lib/ Cake/ plugins/ vendors/ cake index.php</code>
This structure separates application code (app
), framework (lib/Cake
), libraries (plugins
, vendors
), and data/settings (data/*
).
Modify app/webroot/index.php
to define the custom temporary directory:
<?php // Custom TMP directory if (!defined('TMP')) { define('TMP', ROOT . DS . 'data' . DS . 'tmp' . DS); } ?>
Next, adjust database configuration. Copy app/Config/database.php.default
to app/Config/database.php
and replace DATABASE_CONFIG
with:
<code>FogNotes/ app/ data/ config/ logs/ tmp/ cache/ logs/ sessions/ tests/ lib/ Cake/ plugins/ vendors/ cake index.php</code>
In app/Config/bootstrap.php
, add these lines (after Configure::write('Dispatcher.filters'...
) to register the data/config
path:
<?php // Custom TMP directory if (!defined('TMP')) { define('TMP', ROOT . DS . 'data' . DS . 'tmp' . DS); } ?>
And at the end of app/Config/bootstrap.php
:
<?php class DATABASE_CONFIG { public $default = null; public $test = null; public $env = null; function __construct() { if (!defined('APP_ENV')) return false; $this->env = APP_ENV; $config = Configure::read('Database.config'); if (!is_array($config)) return false; foreach ($config as $name => $data) $this->$name = $data; if (empty($config['default']) || empty($this->default)) return false; } } ?>
Configure::load()
searches data/config
for a file matching the environment (e.g., local.php
, prod.php
). A sample local.php
is provided in the original article.
Deploying to AppFog:
fognotes_prod
).APP_ENV
to "prod".data/config/prod.php
, extracting database settings from the VCAP_SERVICES
environment variable (as detailed in the original article).af
utility (install instructions provided in AppFog) to push your local code (af update FogNotes
).After deployment, import the database schema (data/config/notes.sql
) into your remote database using a tunnel (af tunnel
). Then, use CakePHP's bake command to generate the application's models, views, and controllers. Finally, update the routing to point the home page to your notes. Redeploy using af update FogNotes
.
The original article also includes FAQs covering various aspects of CakePHP deployment on AppFog, including troubleshooting, scaling, security, and monitoring.
The above is the detailed content of PHP Master | Deploy CakePHP Apps on AppFog the Right Way. For more information, please follow other related articles on the PHP Chinese website!