This tutorial will help you deploying a PHP and Mysql app.
Prerequisites
- a free Heroku account.
- PHP installed locally.
- Composer installed locally.
Set up
In this step you will install the Heroku Toolbelt. This provides you access to the Heroku Command Line Interface (CLI), which can be used for managing and scaling your applications and add-ons.
To install the Toolbelt for ubuntu/Debian
wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh
After installing Toolbelt you can use the heroku
command from your command shell.
$ heroku login Enter your Heroku credentials. Email: dz@example.com Password: ...
Authenticating is required to allow both the heroku and git commands to operate.
Prepare the app
In this step, you will prepare a fossasia/engelsystem application that can be deployed.
To clone the sample application so that you have a local version of the code that you can then deploy to Heroku, execute the following commands in your local command shell or terminal:
$ git clone --recursive https://github.com/fossasia/engelsystem.git $ cd engelsystem/
If it is not a git repository you follow these steps
$ cd engelsystem/ $ git init
You now have a functioning git repository that contains a simple application now we need to add a composer.json
file. Make sure you’ve installed Composer.
The Heroku PHP Support will be applied to applications only when the application has a file named composer.json
in the root directory. Even if an application has no Composer dependencies, it must include at least an empty ({}
) composer.json
in order to be recognized as a PHP application.
When Heroku recognizes a PHP application, it will respond accordingly during a push:
$ git push heroku master -----> PHP app detected …
Define a Procfile
A Procfile is a text file in the root directory of your application that defines process types and explicitly declares what command should be executed to start your app. Your Procfile
will look something like this for engelsystem:
web: vendor/bin/heroku-php-apache2 public/
Since our folder named public
that contains your JavaScript, CSS, images and index.php
file, your Procfile
would define the Apache web server with that directory used as document root.
Create the app
In this step you will create the app to Heroku.
Create an app on Heroku, which prepares Heroku to receive your source code:
$ heroku create Creating sharp-rain-871... done, stack is cedar-14 http://sharp-rain-871.herokuapp.com/ | https://git.heroku.com/sharp-rain-871.git Git remote heroku added
When you create an app, a git remote (called heroku
) is also created and associated with your local git repository.
Heroku generates a random name (in this case sharp-rain-871
) for your app, or you can pass a parameter to specify your own app name.
But Once you open http://sharp-rain-871.herokuapp.com/ we will not be able to view the site if there are database connections. We need to migrate the database using Cleardb
ClearDB MySQL
Migrating database
Creating your ClearDB database
To create your ClearDB database, simply type the following Heroku command:
$ heroku addons:create cleardb:ignite -----> Adding cleardb to sharp-mountain-4005... done, v18 (free)
This will automatically provision your new ClearDB database for you and will return the database URL to access it.
You can retrieve your new ClearDB database URL by issuing the following command:
$ heroku config | grep CLEARDB_DATABASE_URL CLEARDB_DATABASE_URL: mysql://bda37eff166954:69445d28@us-cdbr-iron-east-04.cleardb.net/heroku_3c94174e0cc6cd8?reconnect=true
After getting the cleardb database url we can import the tables by following command:
$mysql -u bda37eff166954 -h us-cdbr-iron-east-04.cleardb.net -p heroku_3c94174e0cc6cd8
than you well get a mysql prompt with connection to the database. Than you can import the tables using the following commands
mysql> source [path to engelsystem]/engelsystem/db/install.sql; mysql> source [path to engelsystem]/engelsystem/db/update.sql; mysql> exit;
Now the tables are migrated successfully.
Declare app dependencies
Since we have added the mysql database we need to add the dependencies also.
{ "require": { "ext-mysql": "*" }, "require": { "ext-gettext": "*" }, "require-dev": { "heroku/heroku-buildpack-php": "*" } }
The composer.json
file specifies the dependencies that should be installed with your application. When an app is deployed, Heroku reads this file and installs the appropriate dependencies into the vendor
directory.
Run the following command to install the dependencies, preparing your system for running the app locally:
$ composer update Loading composer repositories with package information Updating dependencies (including require-dev) - Installing psr/log (1.0.0) Loading from cache ... Writing lock file Generating autoload files
You should always check composer.json
and composer.lock
into your git repo. The vendor
directory should be included in your .gitignore
file.
Using ClearDB with PHP
Connecting to ClearDB from PHP merely requires the parsing of the CLEARDB_DATABASE_URL
environment variable and passing the extracted connection information to your MySQL library of choice, e.g. MySQLi:
we need to modify it in the config/config.php file
$url = parse_url(getenv("CLEARDB_DATABASE_URL")); $server = $url["host"]; $username = $url["user"]; $password = $url["pass"]; $db = substr($url["path"], 1); $config = array( 'host' => $server , 'user' => $username , 'pw' => $password, 'db' => $db );
Deploy the app
All the steps are completed now we need to deploy it. Push the code to Heroku. For pushing pushing development branch we need to follow these commands.
$ git add -A $ git commit -m "heroku deploy" $ git push heroku development:master Initializing repository, done. Counting objects: 7, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (7/7), 1.66 KiB | 0 bytes/s, done. Total 7 (delta 0), reused 0 (delta 0) -----> PHP app detected -----> Setting up runtime environment... - PHP 5.5.12 - Apache 2.4.9 - Nginx 1.4.6 -----> Installing PHP extensions: - opcache (automatic; bundled, using 'ext-opcache.ini') -----> Installing dependencies... Composer version 64ac32fca9e64eb38e50abfadc6eb6f2d0470039 2014-05-24 20:57:50 Loading composer repositories with package information Installing dependencies from lock file ... - Installing monolog/monolog (1.9.1) Generating optimized autoload files -----> Building runtime environment... -----> Discovering process types Procfile declares types -> web -----> Compressing... done, 57.4MB -----> Launching... done, v3 http://sharp-rain-871.herokuapp.com/ deployed to Heroku To git@heroku.com:sharp-rain-871.git * [new branch] development -> master
Now your app is successfully deployed you can view it here http://sharp-rain-871.herokuapp.com/
Englesystem
Development: https://github.com/fossasia/engelsystem
Issues/Bugs: Issues