2023-04-28 12:02:16 +02:00
2021-02-07 16:23:57 +01:00
2022-02-12 17:54:05 +01:00
2022-02-12 17:52:09 +01:00
2023-04-28 12:02:16 +02:00

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
cd docker-inventaire

Clone inventaire core application server

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

Build

docker-compose build

Download Node dependencies and install the client repository:

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

Start CouchDB, Elasticsearch, and the Inventaire server in development mode (modifications to the server files will reload the server), by default on port 3006

docker-compose up -d

To also work on the client, you need to also start the webpack dev server:

cd inventaire/client
npm run watch

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

Tips

Push git commits

To keep things simple, this installation steps above clone repositories in https, but if you want to push to a branch with ssh, you will probably need to change the repositories origin:

cd inventaire
git remote set-url origin git@github.com:inventaire/inventaire.git
cd client
git remote set-url origin git@github.com:inventaire/inventaire-client.git

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

Description
Inventaire Docker Compose (fork for Coolify)
Readme 137 KiB
Languages
Shell 100%