2018-06-07 14:16:50 +02:00
Run your own inventaire in a docker environment
2019-12-22 23:50:24 +00:00
Used only for testing and development purposes, so use in production at your own risk.
2018-05-09 18:19:47 +02:00
2018-06-07 14:16:50 +02:00
## Requirements
- [docker-compose ](https://docs.docker.com/compose/gettingstarted/ ) up and ready
- git
2018-05-09 18:19:47 +02:00
2018-06-07 14:16:50 +02:00
## Install
2018-05-09 18:19:47 +02:00
2019-09-06 19:18:11 +02:00
```bash
2018-05-09 18:19:47 +02:00
git clone https://github.com/inventaire/inventaire-docker.git
```
got to `cd inventaire-docker`
clone the two repos inventaire needs to run :
2018-07-21 13:22:41 +02:00
- `inventaire` core application server -> [setup ](https://github.com/inventaire/inventaire#installation )
- `entities-search-engine` for querying entities -> [go to repo ](https://github.com/inventaire/entities-search-engine )
2018-05-09 18:19:47 +02:00
2019-09-06 19:18:11 +02:00
```bash
2018-05-09 18:19:47 +02:00
git clone https://github.com/inventaire/inventaire.git
git clone https://github.com/inventaire/entities-search-engine.git
```
2018-10-08 14:59:36 +02:00
2019-11-30 19:43:29 +01:00
Create empty folders for docker volumes to set themselves.
2019-08-24 20:18:07 +02:00
In accordance with docker-compose volumes, example: `mkdir data couch-test couch es`
Start the magic, build everything !
2019-09-06 19:18:11 +02:00
```bash
2019-08-24 20:18:07 +02:00
docker-compose build
```
Then download de Node dependencies, thanks to the magnificient `npm` :
2019-09-06 19:18:11 +02:00
```bash
docker-compose run --rm inventaire npm install
docker-compose run --rm entities-search-engine npm install
2019-08-24 20:18:07 +02:00
```
2019-09-06 19:18:11 +02:00
Configure inventaire so that it can connect to CouchDB:
2020-02-20 18:40:08 +01:00
2019-09-06 19:18:11 +02:00
```bash
2020-02-20 18:31:41 +01:00
echo "module.exports = {
db: {
username: 'couchdb',
2019-09-06 19:18:11 +02:00
password: 'password'
2020-02-20 18:31:41 +01:00
}
}
" > ./inventaire/config/local.js
2019-08-24 20:18:07 +02:00
```
2020-02-20 18:40:08 +01:00
You can optionnally install translation dependencies of[inventaire-i18n ](https://github.com/inventaire/inventaire-i18n/ ) [need more details]
2019-08-24 20:18:07 +02:00
2020-02-20 18:40:08 +01:00
## Usage
2018-05-09 18:19:47 +02:00
2020-02-20 18:40:08 +01:00
```bash
2019-09-06 19:18:11 +02:00
docker-compose up -d
2018-05-09 18:19:47 +02:00
```
2019-11-28 17:32:51 +01:00
## Create a user admin
2018-06-07 14:16:50 +02:00
2019-11-28 17:32:51 +01:00
A user admin is not that useful in development, it only allows you to merge/delete entities, see any user contributions, and a few more things. But if needed, start by signing up a user :
2018-06-07 14:16:50 +02:00
2019-11-28 17:32:51 +01:00
```bash
curl http://localhost:3006/api/auth?action=signup -d '{"username": "yourusername", "password": "yourpassword", "email":"some+email@example .org"}'
```
Grab the new user id
```bash
user_id=$(curl --user yourusername:yourpassword http://localhost:3006/api/user | jq -r '._id')
```
2018-06-07 14:16:50 +02:00
2019-11-28 17:32:51 +01:00
Then you can either go to CouchDB GUI to manually add the `"admin": true` flag to your user document:
2018-06-07 14:16:50 +02:00
2019-11-28 17:32:51 +01:00
```sh
2020-02-20 18:40:08 +01:00
firefox "http://localhost:5984/_utils/document.html?users/${user_id}"
2019-11-28 17:32:51 +01:00
```
Or use the dedicated script, but you need to modify your local config to override the default `.db.actionsScripts` values:
2020-02-20 18:31:41 +01:00
```js
module.exports = {
db: {
actionsScripts: {
port: 5984,
2019-11-28 17:32:51 +01:00
suffix: null
2020-02-20 18:31:41 +01:00
}
}
}
2019-11-28 17:32:51 +01:00
```
2018-06-07 14:16:50 +02:00
2019-11-28 17:32:51 +01:00
```sh
./scripts/actions/make_user_admin_from_id.coffee $user_id
```
2018-05-09 18:19:47 +02:00
2020-02-20 18:31:41 +01:00
## Load wikidata entities into elasticsearch
2018-05-09 18:19:47 +02:00
2018-10-16 18:32:06 +02:00
Make sure ES import limit is above entities-search-engige import rate, by [closing the index ](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html ) first, raising the limit & reopen the index
2018-08-23 18:01:05 +02:00
2020-02-20 18:31:41 +01:00
```bash
2018-10-16 18:32:06 +02:00
curl -XPOST http://localhost:9200/wikidata/_close
curl -XPUT http://localhost:9200/wikidata/_settings -d '{"index.mapping.total_fields.limit": 20000}'
curl -XPOST http://localhost:9200/wikidata/_open
2018-08-23 18:01:05 +02:00
```
2020-02-20 18:40:08 +01:00
Index all wd items with statement `wdt:P31 wd:Q5` aka all humans :
2018-05-09 18:19:47 +02:00
2020-02-20 18:31:41 +01:00
```bash
2019-11-28 17:07:42 +01:00
docker-compose exec entities-search-engine ./bin/dump_wikidata_subset P31:Q5 humans
2018-05-09 18:19:47 +02:00
```
2019-11-28 17:07:42 +01:00
[More info on importing some wikidata items ](https://github.com/inventaire/inventaire-deploy/install_entities_search_engine )
2018-10-08 14:59:36 +02:00
2019-11-28 17:07:42 +01:00
More docs [wikidata filtered dump import ](https://github.com/inventaire/entities-search-engine/blob/master/docs/wikidata_filtered_dump_import.mdFv )
2018-05-09 18:19:47 +02:00
2020-02-20 18:40:08 +01:00
## Enable inventaire items to be searchable
To index inventaire items created locally, enable updater in `inventaire/config/locale.js` :
```js
entitiesSearchEngine: {
updateEnabled: true
}
```
2018-05-09 18:19:47 +02:00
## Fixtures
In case you would like to play with out-of-the-box data.
2018-09-12 13:48:44 +02:00
Run api tests to populate tests dbs (see Tests section)
2020-02-20 18:31:41 +01:00
```bash
2019-09-06 19:18:11 +02:00
docker-compose -f docker-compose.yml -f docker-compose.test.yml exec inventaire npm run test-api
2018-05-09 18:19:47 +02:00
```
- Replicate `*-tests` dbs documents into `*` dbs
2020-02-20 18:31:41 +01:00
```bash
2018-09-12 13:48:44 +02:00
`docker-compose exec inventaire npm run replicate-tests-db`
2018-05-09 18:19:47 +02:00
```
2018-09-12 13:48:44 +02:00
2018-10-14 21:47:48 +02:00
## Tests
2018-09-12 13:48:44 +02:00
2018-10-14 21:47:48 +02:00
Start services with test environnement with [multiple compose files ](https://docs.docker.com/compose/extends/#understanding-multiple-compose-files )
2020-02-20 18:31:41 +01:00
```bash
2018-10-14 21:47:48 +02:00
docker-compose -f docker-compose.yml -f docker-compose.test.yml up
```
2018-09-12 13:48:44 +02:00
Execute tests script
`docker-compose exec inventaire npm run test-api`
or execute directly the test command
2018-10-14 21:47:48 +02:00
`docker-compose exec inventaire ./node_modules/.bin/mocha --compilers coffee:coffee-script/register --timeout 20000 /opt/inventaire/path/to/test/file`
2018-10-08 14:59:36 +02:00
Tip : create a symbolic link on your machine between the inventaire folder and docker working directory on your machine at `/opt/` , in order to autocomplete path to test file to execute
2018-10-14 21:47:48 +02:00
`sudo ln ~/path/to/inventaire-docker/inventaire /opt -s`
2019-11-30 19:43:29 +01:00
## Troubleshooting
### Elastic `users` and `groups` indexes are not up to date
`couchdb2elastic4sync` is a small libary in charge of maintaining ES indexes up to date with couchdb documents (only for `users` and `groups` since `entities` are handdled by `entities-search-engine` ). If `couchdb2elastic4sync` does not find Elasticsearch search. Make sure configs files exists in `inventaire/scripts/couch2elastic4sync/configs` . They should be created during postinstall, but if the folder is empty, run the following scripts to create it :
2020-02-20 18:31:41 +01:00
```bash
2019-11-30 19:43:29 +01:00
docker-compose exec inventaire npm run couch2elastic4sync:init
docker-compose exec inventaire npm run couch2elastic4sync:load
```