StackEdit Self-Hosted

I recently brought on a new team member for one of my many projects. We had an immediate need for documentation collaboration. My first idea was to use Hackpad or Etherpad, but we were going to be working a lot with Markdown, so I Google'd around a bit and came across StackEdit!

As with most of our tools we use, I prefer self-hosted solutions more often then not. Thankfully StackEdit fit that bill.

My StackEdit system is a 4 virtual-core, 6GBs of RAM with CentOS 6.x VPS.

Install Prerequisites

yum -y install nano gcc gcc-c++ git

Install Node, Gulp & Bower

StackEdit runs off Node so we'll need to get that installed along with a few other npm packages.

cd /usr/src
wget http://nodejs.org/dist/v0.10.30/node-v0.10.30.tar.gz
tar zxvf node-v0.10.30.tar.gz 
cd node-v0.10.30
./configure
make
make install

Next Gulp:

npm install --global gulp

And finally Bower:

npm install -g bower

The StackEdit Source Code

This one is pretty quick and easy!

cd /opt/
git clone https://github.com/benweet/stackedit.git

Now we need to install some of it's dependencies.

npm install
bower install --allow-root

Of note, if you're not running these commands as root you may omit the --allow-root from the Bower command.

CouchDB - For Lazy Couch Potatoes!

Alright! So StackEdit will work now, however if you want to allow the synchronizing and sharing of files between people, you'll want to either setup Google Drive, Dropbox or CouchDB. I didn't have the time to setup Google Drive or Dropbox so I went to CouchDB. In fact anyone who uses StackEdit or your StackEdit instance can setup CouchDB to use with StackEdit.

I really recommend reading this documentation on how to setup CouchDB, but I'll give a brief overview here.

First go to SmileUpps. They offer free CouchDB hosting. Sign yourself up for an account. Then you'll want to setup a domain for your project.

Next you'll want to go into the CouchDB configuration to set a few items up.

CouchDB - SmileUpps

Click on the Configuration option from the right sidebar. You should see a new page with a table of configuration options. Scroll to the bottom and click on the 'Add a New Section' link and a little dialog box pops up. Enter in 'httpd' to the first field, 'enable_cors' to the second field and 'true' to the third field. Don't use the quotes of course though. Hit the Create button.

Couch DB CORS

Again, go to 'Add a New Section' and enter in 'cors' for the first field, 'origins' for the second field and 'http://localhost, https://yourdomain.com' for the third field.

Now back on your server you'll want to run the following commands:

curl -X PUT https://yourinstance.smileupps.com/documents
curl -O https://raw.githubusercontent.com/benweet/stackedit/master/couchdb/setup.js
node setup.js https://yourinstance.smileupps.com/documents

That should be all you need to get CouchDB going. I also recommend going to your StackEdit instance and update the CouchDB URL. Go to Menu > Settings > Advanced -- and set the CouchDB URL.

Finish Up!

Your StackEdit instance should be ready to roll. You can configure other items in the `` file.

One thing I had an issue was when sharing documents was that it kept using the stacked.io domain which would likely cause some confusion. So in order to remedy this I had to edit the ./public/res-min/main.js file in 2 places. The first is line 13692:

var l = "http://mydomain.com/" + "editor#!" + e.param(a);

and line 13703:

var l = "http://mydomain.com/" + "viewer#!" + e.param(a);

I restarted the application and all was well!

Notes

  1. My instance currently is not connected with any of the third party apps like Dropbox, Google Drive or Google Analysts. I do not believe it would be terribly difficult to set these items up but I just didn't have a time or a real need.
  2. This is one of the first self hosted apps which I haven't had to proxy with Nginx. That's nice!
  3. I am not sure if the app should be running as root or a less privileged account.
  4. I also removed the donation links and alert boxes since I had no real use for them on my internal site.
  5. I also removed the link to Classeur since I had no real use for that being there.
  6. I also noticed it looks like you can deploy your StackEdit instance to Heroku or Docker, but didn't give those a shot. Maybe someday!

StackEdit Self-Hosted

Resources