Skip to content
This repository was archived by the owner on Aug 30, 2021. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .cfignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# List of files and directories to ignore when deploying to Cloud Foundry
.DS_Store
.nodemonignore
.sass-cache/
npm-debug.log
node_modules/
public/lib
app/tests/coverage/
.bower-*/
.idea/
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,39 @@ In the docs we'll try to explain both general concepts of MEAN components and gi
## Live Example
Browse the live MEAN.JS example on [http://meanjs.herokuapp.com](http://meanjs.herokuapp.com).

## Deploying To Cloud Foundry
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think up until line 188 the info is ok, but beyond it's quite specific to the CF configuration and that's not the place to put it. I suggest that we try one of:

  1. We create a Wiki entry and refer to it
  2. We create documentation for it on the 0.4.0 gh-pages branch and refer to it.

Also please place the CF README section in the bottom part and definitely not before the core MEANJS items like Getting Started area.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's a barebone structure right now for the documentation:
https://github.com/meanjs/mean/blob/gh-pages/_includes/docs/0.4.x/overview.html

If you make another file with that structure with instructions on Deploying to CloudFoundry, I will get the link worked out in the documentation for it to show up.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@codydaig is it best to create a separate pull request for that branch with the documentation in it?


Cloud Foundry is an open source platform-as-a-service (PaaS). The MEANJS project
can easily be deployed to any Cloud Foundry instance. The easiest way to deploy the
MEANJS project to Cloud Foundry is to use a public hosted instance. The two most popular
instances are [Pivotal Web Services](https://run.pivotal.io/) and
[IBM Bluemix](https://bluemix.net). Both provide free trials and support pay-as-you-go models
for hosting applications in the cloud. After you have an account follow the below steps to
deploy MEANJS.

* Install the [Cloud Foundry command line tools](http://docs.cloudfoundry.org/devguide/installcf/install-go-cli.html).
* Now you need to log into Cloud Foundry from the Cloud Foundry command line.
* If you are using Pivotal Web Services run `$ cf login -a api.run.pivotal.io`.
* If you are using IBM Bluemix run `$ cf login -a api.ng.bluemix.net`.
* Create a Mongo DB service, IBM Bluemix and Pivotal Web Services offer a free MongoLabs service.
* `$ cf create-service mongolab sandbox mean-mongo`
* Clone the GitHub repo for MEANJS if you have not already done so
* `$ git clone https://github.com/meanjs/mean.git && cd mean`
* Run the Grunt Build task to build the optimized JavaScript and CSS files
* `$ grunt build`
* Deploy MEANJS to Cloud Foundry
* `$ cf push`

After `cf push` completes you will see the URL to your running MEANJS application
(your URL will be different).

requested state: started
instances: 1/1
usage: 128M x 1 instances
urls: mean-humbler-frappa.mybluemix.net

Open your browser and go to that URL and your should see your MEANJS app running!

## Credits
Inspired by the great work of [Madhusudhan Srinivasa](https://github.com/madhums/)
The MEAN name was coined by [Valeri Karpov](http://blog.mongodb.org/post/49262866911/the-mean-stack-mongodb-expressjs-angularjs-and)
Expand Down
23 changes: 23 additions & 0 deletions config/assets/cloud-foundry.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
'use strict';

module.exports = {
client: {
lib: {
css: [
'public/lib/bootstrap/dist/css/bootstrap.min.css',
'public/lib/bootstrap/dist/css/bootstrap-theme.min.css',
],
js: [
'public/lib/angular/angular.min.js',
'public/lib/angular-resource/angular-resource.min.js',
'public/lib/angular-animate/angular-animate.min.js',
'public/lib/angular-ui-router/release/angular-ui-router.min.js',
'public/lib/angular-ui-utils/ui-utils.min.js',
'public/lib/angular-bootstrap/ui-bootstrap-tpls.min.js',
'public/lib/angular-file-upload/angular-file-upload.min.js'
]
},
css: 'public/dist/application.min.css',
js: 'public/dist/application.min.js'
}
};
71 changes: 71 additions & 0 deletions config/env/cloud-foundry.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
'use strict';

var cfenv = require('cfenv'),
appEnv = cfenv.getAppEnv(),
cfMongoUrl = appEnv.getService('mean-mongo') ?
appEnv.getService('mean-mongo').credentials.uri : undefined;

var getCred = function(serviceName, credProp) {
return appEnv.getService(serviceName) ?
appEnv.getService(serviceName).credentials[credProp] : undefined;
};

module.exports = {
port: appEnv.port,
db: {
uri: cfMongoUrl,
options: {
user: '',
pass: ''
}
},
log: {
// Can specify one of 'combined', 'common', 'dev', 'short', 'tiny'
format: 'combined',
// Stream defaults to process.stdout
// By default we want logs to go to process.out so the Cloud Foundry Loggregator will collect them
options: {
}
},
facebook: {
clientID: getCred('mean-facebook', 'id') || 'APP_ID',
clientSecret: getCred('mean-facebook', 'secret') || 'APP_SECRET',
callbackURL: '/api/auth/facebook/callback'
},
twitter: {
clientID: getCred('mean-twitter', 'key') || 'CONSUMER_KEY',
clientSecret: getCred('mean-twitter', 'secret') || 'CONSUMER_SECRET',
callbackURL: '/api/auth/twitter/callback'
},
google: {
clientID: getCred('mean-google', 'id') || 'APP_ID',
clientSecret: getCred('mean-google', 'secret') || 'APP_SECRET',
callbackURL: '/api/auth/google/callback'
},
linkedin: {
clientID: getCred('mean-linkedin', 'id') || 'APP_ID',
clientSecret: getCred('mean-linkedin', 'secret') || 'APP_SECRET',
callbackURL: '/api/auth/linkedin/callback'
},
github: {
clientID: getCred('mean-github', 'id') || 'APP_ID',
clientSecret: getCred('mean-github', 'secret') || 'APP_SECRET',
callbackURL: '/api/auth/github/callback'
},
paypal: {
clientID: getCred('mean-paypal', 'id') || 'CLIENT_ID',
clientSecret: getCred('mean-paypal', 'secret') || 'CLIENT_SECRET',
callbackURL: '/api/auth/paypal/callback',
sandbox: false
},
mailer: {
from: getCred('mean-mail', 'from') || 'MAILER_FROM',
options: {
service: getCred('mean-mail', 'service') || 'MAILER_SERVICE_PROVIDER',
auth: {
user: getCred('mean-mail', 'username') || 'MAILER_EMAIL_ID',
pass: getCred('mean-mail', 'password') || 'MAILER_PASSWORD'
}
}
}
};
8 changes: 8 additions & 0 deletions manifest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
applications:
- name: mean
host: mean-${random-word}
memory: 128M
services:
- mean-mongo
env:
NODE_ENV: cloud-foundry
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@
"serve-favicon": "^2.3.0",
"socket.io": "^1.3.5",
"swig": "^1.4.2",
"validator": "^3.41.2"
"validator": "^3.41.2",
"cfenv": "~1.0.0"
},
"devDependencies": {
"grunt-concurrent": "^2.0.0",
Expand Down