2012 coscup - build your php application on heroku

56
Build your PHP application on Heroku Ronny Wang @ PIXNET

Upload: ronnywangtw

Post on 07-May-2015

7.602 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 2012 coscup - Build your PHP application on Heroku

Build your PHP applicationon Heroku

Ronny Wang @ PIXNET

Page 2: 2012 coscup - Build your PHP application on Heroku

2

PaaS

Platform-as-a-Service

Page 3: 2012 coscup - Build your PHP application on Heroku

3

Deploy… And Run!

Page 4: 2012 coscup - Build your PHP application on Heroku

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

5

Heroku

her-OH-koo

Page 6: 2012 coscup - Build your PHP application on Heroku

6

2007 ~

Page 7: 2012 coscup - Build your PHP application on Heroku

7

Amazon Web Service US-east-1

~200ms latency

Page 8: 2012 coscup - Build your PHP application on Heroku

8

Lots of Addons

Page 9: 2012 coscup - Build your PHP application on Heroku

9

Easy scale

Page 10: 2012 coscup - Build your PHP application on Heroku

10

PostgreSQL

Page 11: 2012 coscup - Build your PHP application on Heroku

11

Free!!!

On a small scale…

Page 12: 2012 coscup - Build your PHP application on Heroku

12

What’s Stack?

Aspen, Bamboo, Cedar

Page 13: 2012 coscup - Build your PHP application on Heroku

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

14

No PHP?

Page 15: 2012 coscup - Build your PHP application on Heroku

15

Facebook and Heroku

http://blog.heroku.com/archives/2011/9/15/facebook/

Page 16: 2012 coscup - Build your PHP application on Heroku

16

What’s Dyno?

Page 17: 2012 coscup - Build your PHP application on Heroku

17

Web, worker, cron, run process

All are dynos

Page 18: 2012 coscup - Build your PHP application on Heroku

18

0.05US$/hour/dyno

= 1000NT$/month/dyno

Page 19: 2012 coscup - Build your PHP application on Heroku

19

750hours free!

Page 20: 2012 coscup - Build your PHP application on Heroku

20

Heroku toolbelt

https://toolbelt.heroku.comHeroku Client, Foreman, Git

Page 21: 2012 coscup - Build your PHP application on Heroku

21

First: heroku login

Page 22: 2012 coscup - Build your PHP application on Heroku

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

23

Add index.php

<?phpecho 'Hello World';

Page 24: 2012 coscup - Build your PHP application on Heroku

24

git commit index.php –m ‘add Hello World’

Page 25: 2012 coscup - Build your PHP application on Heroku

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

26

Page 27: 2012 coscup - Build your PHP application on Heroku

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

28

Database: PostgreSQL

https://postgres.heroku.com/

Page 29: 2012 coscup - Build your PHP application on Heroku

29

Starter databases

DevPlan Free 10K rowsBasicPlan $9/month 10M rows

Page 30: 2012 coscup - Build your PHP application on Heroku

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

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

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

33

heroku run

Start a dyno and run command

Page 34: 2012 coscup - Build your PHP application on Heroku

34

heroku config:set LD_LIBRARY_PATH=/app/php/ext:/app/apache/lib

Page 35: 2012 coscup - Build your PHP application on Heroku

35

heroku run "~/bin/php ~/www/script.php"

Page 36: 2012 coscup - Build your PHP application on Heroku

36

Heroku Scheduler

Schedule your task

Page 37: 2012 coscup - Build your PHP application on Heroku

37

Daily, hourly, 10 minutes

Page 38: 2012 coscup - Build your PHP application on Heroku

38

Page 39: 2012 coscup - Build your PHP application on Heroku

39

$ ~/bin/php ~/www/cron.php

Page 40: 2012 coscup - Build your PHP application on Heroku

40

Heroku worker

Page 41: 2012 coscup - Build your PHP application on Heroku

41

File: Procfile

worker: ~/bin/php ~/www/worker.php

Page 42: 2012 coscup - Build your PHP application on Heroku

42

heroku ps:scale worker=N

Page 43: 2012 coscup - Build your PHP application on Heroku

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

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

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

46

Addons – Custom domain

xxxxx.herokuapp.com

Page 47: 2012 coscup - Build your PHP application on Heroku

47

$ heroku domains:add www.example.com

Page 48: 2012 coscup - Build your PHP application on Heroku

48

Addons - Memcache

Page 49: 2012 coscup - Build your PHP application on Heroku

49

Memcache with SASL

Page 50: 2012 coscup - Build your PHP application on Heroku

50

Page 51: 2012 coscup - Build your PHP application on Heroku

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

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

53

Pix Framework on Heroku

http://framework.pixnet.net/http://github.com/pixnet/pixframewrok

Page 54: 2012 coscup - Build your PHP application on Heroku

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

55

Create table

# heroku run “~/bin/php ~/www/prompt”Running `~/bin/php ~/www/prompt.php` attached to terminal... up, run.1>> User::createTable()

>> exit#

Page 56: 2012 coscup - Build your PHP application on Heroku

56

Q&A

We are [email protected]