Files
docker-inventaire/README.md
maxlath a1220581ad readme: moving paragraph on rootless docker down
as it makes the install flow more complex, and should thus rather be later tweaking of the install
2023-04-28 11:41:08 +02:00

5.1 KiB

Run your own inventaire in a docker environment Used only for testing and development purposes, so use in production at your own risk.

Requirements

Install

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

got to cd docker-inventaire

clone inventaire core application server -> setup

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

Build

docker-compose build

Download Node dependencies:

docker-compose run --rm inventaire npm install

Configure inventaire so that it can connect to CouchDB. For that, create a file config/local.cjs with the following command:

echo "module.exports = {
  db: {
    username: 'yourcouchdbusername',
    password: 'yourcouchdbpassword'
  }
}
" > ./inventaire/config/local.cjs

NB: Those username and password should match the COUCHDB_USER and COUCHDB_PASSWORD environment variables set in docker-compose.yml

Usage

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/_utils/document.html?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 entities into elasticsearch

Elasticsearch import limit may be below the indexation import rate

curl -XPOST http://localhost:9200/wikidata/_close
curl -H 'Content-Type:application/json' -H 'Accept: application/json' -XPUT http://localhost:9200/wikidata/_settings -d '{"index.mapping.total_fields.limit": 20000}'
curl -XPOST http://localhost:9200/wikidata/_open

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

Alternatively, as root in inventaire container:

mkdir /supervisor/path/to/inventaire
ln -s /opt/ /supervisor/path/to/inventaire

Docker tips

Rootless Docker

Docker Engine v20.10 is now available in rootless mode. If you would like to try it, you may follow the official guide (including command export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock).

Start the inventaire install steps above, before installing dependencies, make sure that the owner of inventaire folder is the same as the owner inside the container.

Delete network_host occurences from docker-compose.yml and adapt the config/local.cjs in consequence:

module.exports = {
  protocol: 'http',
  port: 3006,
  host: 'inventaire',
  db: {
    username: 'couchdb',
    password: 'password',
    protocol: 'http',
    hostname: 'couch'
  },
  elasticsearch: {
    host:'http://elasticsearch:9200'
  }
}

Troubleshooting

Elasticsearch errors

  • max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]: fix by running the command sudo sysctl -w vm.max_map_count=262144 on your host machine

See also Elasticsearch with Docker

Quieting CouchDB notice

CouchDB may warn constantly that _users database does not exist, as documented, you can create de database with:

curl -X PUT http://127.0.0.1:5984/_users