6
PhantomJS Screenshot Server on Heroku Shinichi Tomita @stomita

Phantomjs Screenshot Server on Heroku

Embed Size (px)

Citation preview

Page 1: Phantomjs Screenshot Server on Heroku

PhantomJS Screenshot Server on Heroku

Shinichi Tomita@stomita

Page 2: Phantomjs Screenshot Server on Heroku

PhantomJS Screenshot Server with Node.js, Socket.IO, and AWS S3

enqueue

(page_url)

connect

wait

dispatch

(page_url, sign)

render

open(page_url)

upload

(image_file, sign)notify

(page_url, image_url)

wait

.

.

.

(image_url)

(image_file)

Web Page to Capture

(page) (page)

Socket.IO

Page 3: Phantomjs Screenshot Server on Heroku

Web Server (Node.js)

• Socket.IO server

• request channel (clients: browsers)

- enqueue screenshot page URL

• render channel (clients: PhantomJS)

- dispatch page rendering work

- receive rendering result image URL

• Create S3 signature for browser post upload

Page 4: Phantomjs Screenshot Server on Heroku

Screenshot Server (PhantomJS)

• “Screenshot Server” => “Socket.IO Client”

• Run on PhantomJS buildpack(https://github.com/stomita/heroku-buildpack-phantomjs)

• Procfile:

renderer: phantomjs screenshot.js $PUSH_SERVER_URL

• Scaling server instance

$ heroku ps:scale renderer=4

Page 5: Phantomjs Screenshot Server on Heroku

Image Server (AWS S3)

• Storing rendered screenshot image file

• Directly uploaded from PhantomJS

- Browser Post upload (http://aws.amazon.com/articles/1434)

Page 6: Phantomjs Screenshot Server on Heroku

Reference

• Source:

- https://github.com/stomita/heroku-screenshot

• Deployed:

- http://heroku-screenshot-nodejs.herokuapp.com