An SDK for authoring Popcorn projects.
- Chrome stable
- Firefox stable
- Internet Explorer 9+
- Safari stable
- node v0.8 or higher
- npm (comes with node v0.8 installer)
- A working build environment:
- Mac OS X - Xcode or Command Line Tools package
- Windows - Python 2.5+ and Visual Studio 2010; specifically:
- uninstall any and all "Microsoft Visual C++ 2010 x86/64 Redistributable" copies
- install Microsoft Visual C++ 2010 (Express edition is fine)
- install Microsoft Visual Studio 2010 SP1
- install Microsoft Windows SDK v7.1
- install Microsoft Visual C++ 2010 SP1 Compiler Update for Windows SDK v7.1
- Linux - build-essential package on Debian/Ubuntu, or the equivalent for your distro
git clone --recursive https://github.com/mozilla/butter.git
cd butter
npm install
- Run
node server
. - Navigate to http://localhost:8888/ in your favourite browser.
If you want to change the bind IP or port check the Configuration section below. Run NODE_ENV=production node server.js
in order to run the server in production mode.
Cornfield is Popcorn Maker's back-end server system, designed to serve content to users, store their ongoing work, and publish what they've done.
There are two types of storage Cornfield needs to run:
- A database: To store user project data, a database is required. Popcorn Maker currently supports MySQL, PostgreSQL, and Sqlite.
- A data-blob store: To store published projects, Cornfield can use the filesystem, or Amazon's S3.
The default server configuration can be found in lib/default-config.js. To override any of these settings you can:
- Use environment variables e.g. (
PORT=1337 node server.js
) - Add a file named
local.json
.server.js
will recurse up the directory tree looking for it - Use the
BUTTER_CONFIG_FILE
environment variable e.g. (BUTTER_CONFIG_FILE=/etc/popcorn/local.json node server.js
)
-
PORT
the port to bind the server to -
hostname
the hostname for the server (e.g.,http://localhost:8888
,https://popcorn.webmaker.org
). This must match your browser's address bar otherwise Persona login will not work -
NODE_ENV
the environment you're running the server in (e.g.development
,staging
,production
) -
logger
settings for server loggingformat
the logging format to use. Possible values include: default, short, tiny, dev.
-
session
settings for user sessionssecret
the sessions secret (i.e., some long string)
-
staticMiddleware
settings for cornfield Connect middlewaremaxAge
the max age of static assests
-
dirs
settings for various directories, paths, hostnameswwwRoot
the server's WWW root directory (e.g.,../
)templates
the location of templates (e.g.,../templates
)embedHostname
[optional] the hostname URL where published embed documents are stored, if different fromhostname
(e.g.,http://s3.amazonaws.com/your-bucket
)
-
templates
list of templates to serve. The format is as follows:<template-name>
:{{templateBase}}<path/to/template/config.json>
. The{{templateBase}}
string will be replaced by the value indirs.templates
(e.g., "basic": "{{templateBase}}basic/config.json") -
exportedAssets
list of scripts to include in exported assets. These are things like popcorn.js or other scripts that your exported projects depend upon in order to run. -
additionalStaticRoots
list of additional roots to use. -
database
database configuration optionsdatabase
the database name. Used by mysql and postgresqlusername
the username to use when connecting to the database. Used by mysql and postgresqlpassword
the password for the username. Used by mysql and postgresqloptions
additional sequelize options. Please see the sequelize manual for the complete listing.dialect
the sql dialect of the database. Default ismysql
, must be one ofmysql
,sqlite
, orpostgresql
storage
the storage engine for sqlite. Default is:memory:
, an in-memory db, must be a string representing a file path or:memory:
logging
function to print sql queries to console. Default isconsole.log
, must be a function orfalse
host
hostname of the mysql or postgresql server. Default islocalhost
port
port of the mysql or postgresql server. Default is3306
pool
connection pooling options for mysql and postgresql. Default is nonemaxConnections
- maximum number of connections open in the poolmaxIdleTime
- maximum time in seconds to leave an idle connection open in the pool
-
metrics
[optional] metric server configuration options for a StatsD serverhost
The host to connect to. Default islocalhost
port
The port to connect to. Default is8125
prefix
[optional] prefix to assign to each stat name sent. If not given a default of<NODE_ENV>.butter.
will be used, for example: production.butter
suffix
[optional] suffix to assign to each stat name sent.globalize
[optional] boolean to addstatsd
as an object in the global namespace
-
publishStore
afileStore
used to publish project HTML files (seefileStore
below for details) -
feedbackStore
afileStore
used to publish feedback from the user as JSON (seefileStore
below for details) -
crashStore
afileStore
used to publish crash reports from the user as JSON (seefileStore
below for details) -
imageStore
afileStore
used to retain converted data-uri images for published projects (see theImageStore
section below for details)
The fileStore
type is used to setup a backend for storing data:
type
the type of file store to use. Possible values includelocal
(i.e., local file system) ands3
(i.e., Amazon S3)options
options for the file store, which depends on the type chosen.hostname
the hostname to use for constructing urls if different thanembedHostname
- local options
root
the root directory under which all exported files are placed (e.g.,./view
)namePrefix
[optional] the path prefix to add to any filenames passed to the local file store. For example, if using "v" all filenames will become "v/"nameSuffix
[optional] the filename suffix to use for all filenames (e.g., ".html")
- s3 options
key
the AWS S3 key to use for authenticationsecret
the AWS S3 secret to use for authenticationbucket
the AWS S3 bucket name to use for storing key/value pairsnamePrefix
[optional] the prefix to add to any key names passed to the s3 file store. For example, if using "v" all keys will become "v/"nameSuffix
[optional] the suffix to add to any key names passed to the s3 file store. For example, if using ".json" all keys will end in ".json"contentType
[optional] the mime type to use for data written to S3. If none giventext/plain
is used.headers
[optional] any additional headers to use for data written to S3. For example, setting cache control headers with{ 'Cache-Control': 'max-age=1800' }
.
As part of the configuration, an imageStore
should be specified to store converted data-uri images for published projects. When a project is saved, the project data is scanned for data-uris which are converted into binary blobs and stored on the server in the imageStore
. Currently, there are no special checks or functionality for image store content-types. However, the only images which will be converted are jpegs and pngs. Everything else is ignored. See below for an example imageStore
configuration.
Popcorn Maker supports server monitoring with New Relic. It is implemented by the newrelic npm module. Configuration is done entirely with environment variables. See the https://github.com/newrelic/node-newrelic/#configuring-the-agent for a comprehensive list. To enable New Relic monitoring with Popcorn Maker, the following environment variable must be set:
- NEW_RELIC_HOME
- Chat with the Popcorn community on irc.mozilla.org in the #popcorn channel. The developers hang out here on a daily basis.
- We also have a mailing list that you can subscribe to.
- File bugs and feature requests on our issue tracker.
- The latest code can be found on our Github repository.
- If you'd like to contribute code, file a ticket on our issue tracker, and link to it from your Github pull request.