Home

Awesome

Run Inventaire in Docker

This repository is meant to support running Inventaire for testing and development. For production, see inventaire-deploy.

Summary

<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> <!-- END doctoc generated TOC please keep comment here to allow auto update -->

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

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

cd inventaire/client
npm run watch

Tips

General tips on how to run Inventaire can be found in the server repository docs. Here after are some additional Docker-specific tips.

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
`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 npm test /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

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'
  }
}

Run inventaire server and client outside of Docker

It can sometimes be more convenient to keep CouchDB and Elasticsearch in Docker, but to run the Inventaire server and client outside. For this you will need to:

Then you can start CouchDB and Elasticsearch in the background

docker-compose up couchdb elasticsearch -d

Start the Inventaire server in development mode

cd inventaire
npm run watch

And in another terminal, start the client Webpack dev server

cd inventaire/client
npm run watch

Troubleshooting

Elasticsearch errors

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