Bootstrap projects: configure CouchDB, setup security, deploy ddocs and create users.
npm install couchdb-bootstrap* set and override /_config
* create databases (unless existent)
* create and update database \_security objects
* create and update user accounts
* create and update design documents
* create and update replication documents
* create and update seed documents
CouchDB Bootstrap combines different small tools, which can also be used
independently. Each of those tools come has a similar API and is shipped with a
CLI:
* couchdb-compile - Handle sources: fs mapping / JSON / CommonJS
* couchdb-configure - Configure CouchDB
* couchdb-ensure - Create database unless exists
* couchdb-push - Push documents: users, replications, design docs and normal documents
* couchdb-secure - Secure databases: write security object
Think about CouchDB Bootstrap as a toplevel manager, which reads a directory of
databases and optional _config and hands each file over to the appropriate tool:
```
project/couchdb
├── _config.json
├── _replicator
│ ├── setup-alice.json
│ └── setup-bob.json
├── _users
│ ├── alice.json
│ └── bob.json
├── myapp
│ ├── _design
│ │ └── myapp.js
│ ├── _security.json
│ └── adoc.json
├── myapp-alice
│ ├── doc1.json
│ ├── doc2-commonjs.js
│ └── _security.json
└── myapp-bob
└── _security.json
In the directory tree above project/couchdb/_config.json is handed toproject/couchdb/_replicator/setup-alice.json
couchdb-configure,,project/couchdb/myapp/_design/myapp.jsproject/couchdb/myapp/adoc.json are handed (beside others) toproject/couchdb/myapp-alice/_security.json
couchdb-push
and to
couchdb-secure.
Since couchdb-bootstrap@14.2 it is possible to provide a configuration object:
`js`
{
'my-db': {
_security: {
members: {
roles: [],
names: [
'alice@example.com'
]
},
admins: {
roles: [],
names: [
'alice@example.com'
]
}
},
mydoc: {
date: '2018-03-16T19:27:52.361Z',
title: 'Welcome'
},
_design: {
myapp: {
views: {
'by-date': {
map: function (doc) {
if ('date' in doc) {
emit(doc.date, null)
}
},
reduce: '_count'
}
}
}
}
},
_users: {
alice: {
_id: 'org.couchdb.user:alice@example.com',
type: 'user',
roles: [],
name: 'alice@example.com',
password: 'secure'
}
}
}
See couchdb-compile for more details
about the CouchDB Filesystem Mapping on a document / security object / config
level.
`js`
bootstrap(url, source[, options], callback)
* url - CouchDB server URLsource
* - bootstrap object or directory holding the bootstrap treeoptions.index
* - When set to true, folders are searched for index.js, which, if present, is treated as CommonJS module. Default is false.options.concurrency
* - Limit number of concurrent requests. Defaults to 100.options.multipart
* - When set to true, attachments are saved via multipart api. Default is false.options.watch
* - When set to true, documents are pushed (not _config!) on filesystem change. Default is false.options.mapDbName
* - Set to object or function to map directories to custom database namescallback
* - called when done with a response object describing the status of all operations.
`js`
var bootstrap = require('couchdb-bootstrap')
bootstrap('http://localhost:5984', 'project/couchdb', function(error, response) {
// here we go
})
Since 14.2.0 it is possible to provide a configuration object:
`js
var bootstrap = require('couchdb-bootstrap')
var config = {
'my-db': {
_design: {
myapp: {
views: {
'by-date': {
map: function (doc) {
if ('date' in doc) {
emit(doc.date, null)
}
},
reduce: '_count'
}
}
}
}
}
}
bootstrap('http://localhost:5984', config, function(error, response) {
//
})
`
`sh`
couchdb-bootstrap URL [SOURCE] [OPTIONS]
Or use the shortcurt cdbb.
When SOURCE is omitted, the current directory will be used.options.index is always true.OPTIONS can be --concurrency, --multipart, --watch or --mapDbName='{"old-name": "new-name"}', see above.
`sh`
couchdb-bootstrap http://localhost:5984 project/couchdb
Source as CommonJS file:
`sh`
couchdb-bootstrap http://localhost:5984 bootstrap.js
See test/fixtures/bootstrap.js for an example.
sh
npm test
``