Run your own inventaire in a docker environment

Requirements

Install

git clone https://github.com/inventaire/inventaire-docker.git

got to cd inventaire-docker

clone the two repos inventaire needs to run :

  • inventaire core application server -> setup
  • entities-search-engine for querying entities -> go to repo
git clone https://github.com/inventaire/inventaire.git
git clone https://github.com/inventaire/entities-search-engine.git

Create empty folders for docker volumes to set themselves. In accordance with docker-compose volumes, example: mkdir data couch-test couch es

Start the magic, build everything !

docker-compose build

Then download de Node dependencies, thanks to the magnificient npm:

docker-compose run --rm inventaire npm install
docker-compose run --rm entities-search-engine npm install

Configure inventaire so that it can connect to CouchDB:

echo "module.exports =
  db:
    username: 'couchdb'
    password: 'password'
" > ./inventaire/config/local.coffee

This command run also the postinstall script which install the client

Install also the translation dependencies of inventaire-i18n [need more details]

Finally, start the build with

docker-compose up -d

Create a user admin

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 :

curl http://localhost:3006/api/auth?action=signup -d '{"username": "yourusername", "password": "yourpassword", "email":"some+email@example.org"}'

Grab the new user id

user_id=$(curl --user yourusername:yourpassword  http://localhost:3006/api/user | jq -r '._id')

Then you can either go to CouchDB GUI to manually add the "admin": true flag to your user document:

firefox "http://localhost:5984/users/${user_id}"

Or use the dedicated script, but you need to modify your local config to override the default .db.actionsScripts values:

module.exports =
  db:
    actionsScripts:
      port: 5984
      suffix: null
./scripts/actions/make_user_admin_from_id.coffee $user_id

Load wikidata into elasticsearch

Make sure ES import limit is above entities-search-engige import rate, by closing the index first, raising the limit & reopen the index

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

Make sure to have containers running then :

docker-compose exec entities-search-engine ./bin/dump_wikidata_subset P31:Q5 humans

More info on importing some wikidata items

More docs wikidata filtered dump import

Fixtures

In case you would like to play with out-of-the-box data.

Run api tests to populate tests dbs (see Tests section)

docker-compose -f docker-compose.yml -f docker-compose.test.yml exec inventaire npm run test-api
  • Replicate *-tests dbs documents into * dbs
`docker-compose exec inventaire npm run replicate-tests-db`

Tests

Start services with test environnement with multiple compose files

docker-compose -f docker-compose.yml -f docker-compose.test.yml up

Execute tests script

docker-compose exec inventaire npm run test-api

or execute directly the test command

docker-compose exec inventaire ./node_modules/.bin/mocha --compilers coffee:coffee-script/register --timeout 20000 /opt/inventaire/path/to/test/file

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

sudo ln ~/path/to/inventaire-docker/inventaire /opt -s

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 :

docker-compose exec inventaire npm run couch2elastic4sync:init
docker-compose exec inventaire npm run couch2elastic4sync:load
Description
Inventaire Docker Compose (fork for Coolify)
Readme 137 KiB
Languages
Shell 100%