Skip to content
This repository has been archived by the owner. It is now read-only.
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Stories in Ready



Build Status Code Climate Test Coverage

A Rails implementation of the DPN RESTful communication layer. The current maintainer is Bryan Hockey.


The project is built and tested with mri. For specific ruby version support, consult .travis.yml or the Travis CI build page. Bundler is required. All other dependencies are described in the gemfile.

Development and Test

git clone
cd dpn-server
git submodule update --init --recursive
bundle install --path .bundle
bundle exec rake config
bundle exec rake db:setup
bundle exec rspec



Configuration Files

Configuration is set in the yaml files in the config folder that are generated by bundle exec rake config. These files are excluded from version control. Example files (denoted by the .example suffix) are the best source of information for configuring these files.

Gems Specific to My Environment

You may wish to include additional gems specific to your deployment, e.g. "mysql2". This can be done by creating a file Gemfile.local with your gems. See Gemfile.local.example for more information.


Each other node will need incoming https to your instance.


Once the files are in place and configured appropriately on your application server:

bundle install --path .bundle
bundle exec rake db:migrate
bundle exec rake assets:precompile

Nodes and Other Data

Authentication is handled via authentication tokens, which must be generated on a per-node basis.

Authentication of incoming requests is allowed via Node.private_auth_token. You should mint these tokens for each node. You will not need them again after storing them. A one-way hash function is applied to the token, so if the authenticated node loses the token a new one will need to be minted.

Likewise, the corresponding token used to make requests against other nodes is stored as Node.auth_credential. These are subject to two-way encryption. These must be obtained from each other node.

Note that for the local node, the auth_credential and private_auth_token should be the same (before encryption).

The easiest way to get the data required to run your installation is to grab the production seed files from the private repo and unpack them into db/seeds/production-seeds.d. You will need to modify the nodes seed to use the credentials specific to your node.

From there, you can simply run bundle exec rake db:seed. Note that the installation steps, above, should already be complete. This operation is idempotent.

Replication and Synchronization

dpn-server now provides built-in clients to handle replication and synchronization from other nodes. If you wish to use this feature, you must additionally perform the following configuration steps.

To disable this feature, simply specify :disbled in config/dpn.yml. Consult config/dpn.yml.example for more information.


Each other node will need ssh (for rsync) access to your instance.


In order to get bags from other nodes, you'll need to mint an ssh keypair. The private key should be installed locally, and the public key issued to each other node.


Separate staging and repository directories are required (and specified in config/secrets.yml). Pruning of old files in the staging directory is considered environment-specific and therefore out of scope for this project.


You must install redis. On Debian-based machines, sufficient packages are available in apt: apt install redis-server redis-tools


All jobs utilize a pool of workers. To start the pool, spawn the process via:

bundle exec rake resque:pool


Synchronization jobs are driven by resque-scheduler. This process can be started via:

bundle exec rake resque:scheduler


  1. Fork it ( )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request


Copyright (c) 2015 The Regents of the University of Michigan. All Rights Reserved. Licensed according to the terms of the Revised BSD License. See for details.


Implementation of the DPN RESTful API.




No packages published