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
2021-08-25 15:37:10 +02:00
```sh
2021-02-09 16:03:13 +01:00
git clone https://github.com/inventaire/docker-inventaire.git
2023-04-28 11:53:15 +02:00
cd docker-inventaire
2018-05-09 18:19:47 +02:00
```
2023-04-28 11:53:15 +02:00
Clone `inventaire` core application [server ](https://github.com/inventaire/inventaire )
2018-05-09 18:19:47 +02:00
2021-08-25 15:37:10 +02:00
```sh
2018-05-09 18:19:47 +02:00
git clone https://github.com/inventaire/inventaire.git
```
2021-02-08 12:53:00 +01:00
Build
2019-08-24 20:18:07 +02:00
2021-08-25 15:37:10 +02:00
```sh
2019-08-24 20:18:07 +02:00
docker-compose build
```
2023-04-28 11:53:15 +02:00
Download Node dependencies and install the [client repository ](https://github.com/inventaire/inventaire-client ):
2019-08-24 20:18:07 +02:00
2021-08-25 15:37:10 +02:00
```sh
2019-09-06 19:18:11 +02:00
docker-compose run --rm inventaire npm install
2019-08-24 20:18:07 +02:00
```
2019-09-06 19:18:11 +02:00
2023-04-27 14:49:16 +02:00
Configure inventaire so that it can connect to CouchDB. For that, create a file `config/local.cjs` with the following command:
2020-02-20 18:40:08 +01:00
2021-08-25 15:37:10 +02:00
```sh
2020-02-20 18:31:41 +01:00
echo "module.exports = {
db: {
2023-04-28 11:17:29 +02:00
username: 'yourcouchdbusername',
password: 'yourcouchdbpassword'
2020-02-20 18:31:41 +01:00
}
}
2023-04-27 14:45:01 +02:00
" > ./inventaire/config/local.cjs
2019-08-24 20:18:07 +02:00
```
2023-04-28 11:17:29 +02:00
NB: Those username and password should match the `COUCHDB_USER` and `COUCHDB_PASSWORD` environment variables set in `docker-compose.yml`
2020-02-20 18:40:08 +01:00
## Usage
2018-05-09 18:19:47 +02:00
2023-04-28 11:53:15 +02:00
Start CouchDB, Elasticsearch, and the Inventaire [server ](https://github.com/inventaire/inventaire ) in development mode (modifications to the server files will reload the server), by default on port 3006
2021-08-25 15:37:10 +02:00
```sh
2019-09-06 19:18:11 +02:00
docker-compose up -d
2018-05-09 18:19:47 +02:00
```
2023-04-28 11:53:15 +02:00
To also work on the [client ](https://github.com/inventaire/inventaire-client ), you need to also start the webpack dev server:
```sh
cd inventaire/client
npm run watch
```
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
2021-08-25 15:37:10 +02:00
```sh
2019-11-28 17:32:51 +01:00
curl http://localhost:3006/api/auth?action=signup -d '{"username": "yourusername", "password": "yourpassword", "email":"some+email@example .org"}'
```
Grab the new user id
2021-08-25 15:37:10 +02:00
```sh
2019-11-28 17:32:51 +01:00
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
2020-12-16 21:14:43 +00:00
Elasticsearch import limit may be below the indexation import rate
2018-08-23 18:01:05 +02:00
2021-08-25 15:37:10 +02:00
```sh
2018-10-16 18:32:06 +02:00
curl -XPOST http://localhost:9200/wikidata/_close
2020-09-23 09:59:31 +00:00
curl -H 'Content-Type:application/json' -H 'Accept: application/json' -XPUT http://localhost:9200/wikidata/_settings -d '{"index.mapping.total_fields.limit": 20000}'
2018-10-16 18:32:06 +02:00
curl -XPOST http://localhost:9200/wikidata/_open
2018-08-23 18:01:05 +02:00
```
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
2021-08-25 15:37:10 +02:00
```sh
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
2021-08-25 15:37:10 +02:00
```sh
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 )
2021-08-25 15:37:10 +02:00
```sh
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
2021-08-25 15:37:10 +02:00
```sh
docker-compose exec inventaire npm run test-api
```
2018-09-12 13:48:44 +02:00
or execute directly the test command
2021-08-25 15:37:10 +02:00
```sh
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
2021-08-25 15:37:10 +02:00
```sh
sudo ln ~/path/to/inventaire-docker/inventaire /opt -s
```
2019-11-30 19:43:29 +01:00
2020-11-28 16:27:52 +01:00
Alternatively, as root in inventaire container:
2020-09-21 17:21:15 +02:00
2021-08-25 15:37:10 +02:00
```sh
mkdir /supervisor/path/to/inventaire
ln -s /opt/ /supervisor/path/to/inventaire
```
2020-09-21 17:21:15 +02:00
2023-04-28 12:02:16 +02:00
## 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` :
```sh
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
```
2023-04-28 11:41:08 +02:00
### 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 ](https://docs.docker.com/engine/security/rootless/ ) (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:
```js
module.exports = {
protocol: 'http',
port: 3006,
host: 'inventaire',
db: {
username: 'couchdb',
password: 'password',
protocol: 'http',
hostname: 'couch'
},
elasticsearch: {
host:'http://elasticsearch:9200'
}
}
```
2019-11-30 19:43:29 +01:00
## Troubleshooting
2021-02-09 16:03:13 +01:00
### 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 ](https://www.elastic.co/guide/en/elasticsearch/reference/7.9/docker.html )
2021-08-25 15:37:10 +02:00
### Quieting CouchDB notice
CouchDB may warn constantly that `_users` database does not exist, [as documented ](https://docs.couchdb.org/en/latest/setup/single-node.html ), you can create de database with:
2021-02-09 16:03:13 +01:00
`curl -X PUT http://127.0.0.1:5984/_users`