summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md7
-rw-r--r--app.json111
-rwxr-xr-xbin/heroku35
-rwxr-xr-xbin/setup6
-rw-r--r--package.json6
5 files changed, 162 insertions, 3 deletions
diff --git a/README.md b/README.md
index cab2723d..9af4fbdb 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,13 @@ Thanks for using! :smile:
Before you go too far, here is the great docker repo for HackMD.
With docker, you can deploy a server in minutes without any downtime.
+Heroku Deployment
+---
+
+You can quickly setup a sample heroku hackmd application by clicking the button below.
+
+[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)
+
[migration-to-0.4.0](https://github.com/hackmdio/migration-to-0.4.0)
---
diff --git a/app.json b/app.json
new file mode 100644
index 00000000..95c2ffbf
--- /dev/null
+++ b/app.json
@@ -0,0 +1,111 @@
+{
+ "name": "HackMD",
+ "description": "Realtime collaborative markdown notes on all platforms",
+ "keywords": [
+ "Collaborative",
+ "Markdown",
+ "Notes"
+ ],
+ "website": "https://hackmd.io",
+ "repository": "https://github.com/hackmdio/hackmd",
+ "logo": "https://github.com/hackmdio/hackmd/raw/master/public/hackmd-icon-1024.png",
+ "success_url": "/",
+ "scripts": {
+ "postdeploy": "./node_modules/.bin/sequelize db:migrate"
+ },
+ "env": {
+ "BUILD_ASSETS": {
+ "description": "Our build script variable",
+ "value": "true"
+ },
+ "NPM_CONFIG_PRODUCTION": {
+ "description": "Let npm also install development build tool",
+ "value": "false"
+ },
+ "DB_TYPE": {
+ "description": "Specify database type. See sequelize available databases. Default using postgres",
+ "value": "postgres"
+ },
+
+ "HMD_DOMAIN": {
+ "description": "domain name",
+ "required": false
+ },
+ "HMD_URL_PATH": {
+ "description": "sub url path, like `www.example.com/<URL_PATH>`",
+ "required": false
+ },
+ "HMD_ALLOW_ORIGIN": {
+ "description": "web app port",
+ "required": false,
+ "value": "80"
+ },
+ "HMD_PROTOCOL_USESSL": {
+ "description": "set to use ssl protocol for resources path (only applied when domain is set)",
+ "required": false
+ },
+ "HMD_URL_ADDPORT": {
+ "description": "set to add port on callback url (port 80 or 443 won't applied) (only applied when domain is set)",
+ "required": false
+ },
+ "HMD_FACEBOOK_CLIENTID": {
+ "description": "Facebook API client id",
+ "required": false
+ },
+ "HMD_FACEBOOK_CLIENTSECRET": {
+ "description": "Facebook API client secret",
+ "required": false
+ },
+ "HMD_TWITTER_CONSUMERKEY": {
+ "description": "Twitter API consumer key",
+ "required": false
+ },
+ "HMD_TWITTER_CONSUMERSECRET": {
+ "description": "Twitter API consumer secret",
+ "required": false
+ },
+ "HMD_GITHUB_CLIENTID": {
+ "description": "GitHub API client id",
+ "required": false
+ },
+ "HMD_GITHUB_CLIENTSECRET": {
+ "description": "GitHub API client secret",
+ "required": false
+ },
+ "HMD_GITLAB_BASEURL": {
+ "description": "GitLab authentication endpoint, set to use other endpoint than GitLab.com (optional)",
+ "required": false
+ },
+ "HMD_GITLAB_CLIENTID": {
+ "description": "GitLab API client id",
+ "required": false
+ },
+ "HMD_GITLAB_CLIENTSECRET": {
+ "description": "GitLab API client secret",
+ "required": false
+ },
+ "HMD_DROPBOX_CLIENTID": {
+ "description": "Dropbox API client id",
+ "required": false
+ },
+ "HMD_DROPBOX_CLIENTSECRET": {
+ "description": "Dropbox API client secret",
+ "required": false
+ },
+ "HMD_GOOGLE_CLIENTID": {
+ "description": "Google API client id",
+ "required": false
+ },
+ "HMD_GOOGLE_CLIENTSECRET": {
+ "description": "Google API client secret",
+ "required": false
+ },
+ "HMD_IMGUR_CLIENTID": {
+ "description": "Imgur API client id",
+ "required": false
+ }
+ },
+ "addons": [
+ "heroku-postgresql"
+ ]
+}
diff --git a/bin/heroku b/bin/heroku
new file mode 100755
index 00000000..12f9cc17
--- /dev/null
+++ b/bin/heroku
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+set -e
+
+if [ "$BUILD_ASSETS" = true ]; then
+ BUILD_ASSETS=false npm install && npm run assets:install
+
+ # setup config files
+ cat << EOF > .sequelizerc
+var path = require('path');
+
+module.exports = {
+ 'config': path.resolve('config.json'),
+ 'migrations-path': path.resolve('lib', 'migrations'),
+ 'models-path': path.resolve('lib', 'models'),
+ 'url': process.env.DATABASE_URL,
+ 'dialect': process.env.DB_TYPE
+}
+
+EOF
+
+ cat << EOF > config.json
+
+{
+ "production": {
+ }
+}
+
+EOF
+
+ cp public/js/config.js.example public/js/config.js
+
+ # build app
+ npm run build
+fi
diff --git a/bin/setup b/bin/setup
index 8cd20dc7..19edeecf 100755
--- a/bin/setup
+++ b/bin/setup
@@ -2,7 +2,9 @@
# run command at repo root
CURRENT_PATH=$PWD
-cd $(git rev-parse --show-toplevel)
+if [ -d .git ]; then
+ cd $(git rev-parse --show-toplevel)
+fi
if ! type npm > /dev/null
then
@@ -34,7 +36,7 @@ if [ ! -f .sequelizerc ]; then
fi
echo "install npm and bower packages"
-npm install && bower install
+BUILD_ASSETS=false npm install && bower install
cat << EOF
diff --git a/package.json b/package.json
index 80a0e22b..abd6096f 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,10 @@
"license": "MIT",
"scripts": {
"dev": "webpack --config webpack.config.js --progress --colors --watch",
- "build": "webpack --config webpack.production.js --progress --colors"
+ "build": "webpack --config webpack.production.js --progress --colors",
+ "assets:install": "bower install",
+ "postinstall": "bin/heroku",
+ "start": "node app.js"
},
"dependencies": {
"Idle.Js": "github:shawnmclean/Idle.js",
@@ -121,6 +124,7 @@
"devDependencies": {
"babel-core": "^6.17.0",
"babel-loader": "^6.2.5",
+ "bower": "^1.7.9",
"bower-webpack-plugin": "^0.1.9",
"css-loader": "^0.25.0",
"ejs-loader": "^0.3.0",