2012 coscup - build your php application on heroku
TRANSCRIPT
![Page 1: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/1.jpg)
Build your PHP applicationon Heroku
Ronny Wang @ PIXNET
![Page 2: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/2.jpg)
2
PaaS
Platform-as-a-Service
![Page 3: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/3.jpg)
3
Deploy… And Run!
![Page 4: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/4.jpg)
4
Install…Config…
Linux? FreeBSD? Debian? Ubuntu?RPM? Ports? Package? Apt? yum?
Apache? Nginx?PHP-cgi? FastCGI? PHP-Fpm?
![Page 5: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/5.jpg)
5
Heroku
her-OH-koo
![Page 6: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/6.jpg)
6
2007 ~
![Page 7: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/7.jpg)
7
Amazon Web Service US-east-1
~200ms latency
![Page 8: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/8.jpg)
8
Lots of Addons
![Page 9: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/9.jpg)
9
Easy scale
![Page 10: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/10.jpg)
10
PostgreSQL
![Page 11: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/11.jpg)
11
Free!!!
On a small scale…
![Page 12: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/12.jpg)
12
What’s Stack?
Aspen, Bamboo, Cedar
![Page 13: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/13.jpg)
13
Stack Cedar
Clojure Facebook Java Spring or Play Node.js
Python or Django Ruby or Rails Scala
![Page 14: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/14.jpg)
14
No PHP?
![Page 15: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/15.jpg)
15
Facebook and Heroku
http://blog.heroku.com/archives/2011/9/15/facebook/
![Page 16: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/16.jpg)
16
What’s Dyno?
![Page 17: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/17.jpg)
17
Web, worker, cron, run process
All are dynos
![Page 18: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/18.jpg)
18
0.05US$/hour/dyno
= 1000NT$/month/dyno
![Page 19: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/19.jpg)
19
750hours free!
![Page 20: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/20.jpg)
20
Heroku toolbelt
https://toolbelt.heroku.comHeroku Client, Foreman, Git
![Page 21: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/21.jpg)
21
First: heroku login
![Page 22: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/22.jpg)
22
heroku create
# heroku createCreating evening-earth-7959... done, stack is cedarhttp://evening-earth-7959.herokuapp.com/ | [email protected]:evening-earth-7959.gitGit remote heroku added
![Page 23: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/23.jpg)
23
Add index.php
<?phpecho 'Hello World';
![Page 24: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/24.jpg)
24
git commit index.php –m ‘add Hello World’
![Page 25: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/25.jpg)
25
git pushCounting objects: 3, done.Writing objects: 100% (3/3), 250bytes, done.Total 3 (delta 0), reused 0(delta 0)-----> Heroku receiving push-----> PHP app detected-----> Bundling Apache 2.2.12-----> Bundling PHP 5.3.10-----> Discovering process typesProcfile declares types -> (none)Default types for PHP -> web-----> Compiled slug size in 21.5MB-----> Launching... done, v3http://evening-earth-7959.herokuapp.com deployed to Heroku
![Page 26: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/26.jpg)
26
![Page 27: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/27.jpg)
27
heroku logs
2012-08-16T10:59:15+00:00 app[web.1]: [Thu Aug 16 10:59:15 2012] [notice] Apache/2.2.22 (Unix) PHP/5.3.10 configured -- resuming normal operations2012-08-16T10:59:16+00:00 app[web.1]: [Thu Aug 16 10:59:16 2012] [error] server reached MaxClients setting, consider raising the MaxClients setting2012-08-16T11:03:16+00:00 app[web.1]: 10.189.119.194 - - [16/Aug/2012:11:03:15 +0000] "GET / HTTP/1.1" 200 142012-08-16T11:03:16+00:00 app[web.1]: 10.217.59.175 - - [16/Aug/2012:11:03:15 +0000] "GET /favicon.ico HTTP/1.1" 200 1025
![Page 28: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/28.jpg)
28
Database: PostgreSQL
https://postgres.heroku.com/
![Page 29: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/29.jpg)
29
Starter databases
DevPlan Free 10K rowsBasicPlan $9/month 10M rows
![Page 30: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/30.jpg)
30
Production databases
Size: up to 1TBCrane 400MB Cache $50/month
Kappa 800MB Cache $100/month : :
Baku 34GB Cache $3200/monthMecha 68GB Cache $6400/month
![Page 31: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/31.jpg)
31
heroku config
> heroku configDATABASE_URL: postgres://foofoofoo:[email protected]/foofoofooSHARED_DATABASE_URL: postgres://foofoofoo:[email protected]/foofoofoo
![Page 32: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/32.jpg)
32
if (!getenv('DATABASE_URL')) { die('Need DATABASE_URL');}if (!preg_match(‘#postgres://([^:]*):([^@]*)@([^/:]*)(:\d+)?/(.*)#’, strval(getenv('DATABASE_URL')), $matches)) { die('Unknown DATABASE_URL');}$user = $matches[1];$pass = $matches[2];$host = $matches[3];$port = ltrim($matches[4], ':') ?: 1486;$dbname = $matches[5];$dbconn = pg_connect("host={$host} port={$port} dbname={$dbname} user={$user} password=${pass} sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error());
pg_execute($dbconn, "SELECT * FROM table");
#https://github.com/pixnet/pixframework-heroku/blob/master/init.inc.php
![Page 33: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/33.jpg)
33
heroku run
Start a dyno and run command
![Page 34: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/34.jpg)
34
heroku config:set LD_LIBRARY_PATH=/app/php/ext:/app/apache/lib
![Page 35: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/35.jpg)
35
heroku run "~/bin/php ~/www/script.php"
![Page 36: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/36.jpg)
36
Heroku Scheduler
Schedule your task
![Page 37: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/37.jpg)
37
Daily, hourly, 10 minutes
![Page 38: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/38.jpg)
38
![Page 39: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/39.jpg)
39
$ ~/bin/php ~/www/cron.php
![Page 40: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/40.jpg)
40
Heroku worker
![Page 41: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/41.jpg)
41
File: Procfile
worker: ~/bin/php ~/www/worker.php
![Page 42: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/42.jpg)
42
heroku ps:scale worker=N
![Page 43: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/43.jpg)
43
heroku ps
# heroku ps=== web: `sh boot.sh`web.1: starting for 4s
=== worker: `~/bin/php ~/www/test.php`worker.1: up for 25s#
![Page 44: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/44.jpg)
44
heroku logs –p worker -t
# heroku logs –p worker –t2012-08-14T08:21:29+00:00 heroku[worker.1]: State changed from up to down2012-08-14T08:21:31+00:00 heroku[worker.1]: Stopping all processes with SIGTERM2012-08-14T08:21:33+00:00 heroku[worker.1]: Process exited with status 1432012-08-16T10:58:48+00:00 heroku[worker.1]: Starting process with command `while true; do ~/bin/php ~/www/test.php; sleep 1; done`2012-08-16T10:58:49+00:00 heroku[worker.1]: State changed from starting to up
![Page 45: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/45.jpg)
45
• Procfileworker: while true; do ~/bin/php ~/www/worker.php sleep 1; done
https://github.com/pixnet/pixframework-heroku/blob/master/Procfile
![Page 46: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/46.jpg)
46
Addons – Custom domain
xxxxx.herokuapp.com
![Page 47: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/47.jpg)
47
$ heroku domains:add www.example.com
![Page 48: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/48.jpg)
48
Addons - Memcache
![Page 49: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/49.jpg)
49
Memcache with SASL
![Page 50: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/50.jpg)
50
![Page 51: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/51.jpg)
51
heroku config
> heroku configMEMCACHE_PASSWORD => *********MEMCACHE_SERVERS => mc6.ec2.northscale.netMEMCACHE_USERNAME => app******%40heroku.com
![Page 52: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/52.jpg)
52
https://github.com/ronnywang/PHPMemcacheSASL
include('MemcacheSASL.php');
$m = new MemcacheSASL;$m->addServer(getenv('MEMCACHE_SERVERS'), '11211');$m->setSaslAuthData(getenv('MEMCACHE_USERNAME'), getenv('MEMCACHE_PASSWORD'));var_dump($m->add('test', '123'));$m->delete('test');
![Page 53: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/53.jpg)
53
Pix Framework on Heroku
http://framework.pixnet.net/http://github.com/pixnet/pixframewrok
![Page 54: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/54.jpg)
54
http://github.com/pixnet/pixframework-heroku
• Core– /init.inc.php– /.gitignore– /libs/pixframework/– /models/
• Web– /.htaccess– /index.php– /controllers/– /views/
• Worker/Cron/Script– /prompt.php– /cron.php– /worker.php– /Procfile
![Page 55: 2012 coscup - Build your PHP application on Heroku](https://reader036.vdocument.in/reader036/viewer/2022062307/554a56bab4c9054b328b4bbb/html5/thumbnails/55.jpg)
55
Create table
# heroku run “~/bin/php ~/www/prompt”Running `~/bin/php ~/www/prompt.php` attached to terminal... up, run.1>> User::createTable()
>> exit#