Run Inventaire in Docker
This repository is meant to support running Inventaire for testing and development. For production, see inventaire-deploy.
- docker-compose up and ready
- git
git clone https://github.com/inventaire/docker-inventaire.git
cd docker-inventaire
Rename dotenv
file to .env
, and customize the variables (mainly adding the domain name, and a couchdb password):
cp dotenv .env
vim .env
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:
cd inventaire
npm install tsx && npm install
cd ..
Configure inventaire so that it can connect to CouchDB. For that, create a file config/local-production.cjs
with the following command:
echo "module.exports = {
hostname: 'inventaire',
port: '$(grep 'INVENTAIRE_PORT' .env | sed -E 's/.*=//')'
db: {
hostname: 'couchdb',
username: '$(grep 'COUCHDB_USER' .env | sed -E 's/.*=//')',
password: '$(grep 'COUCHDB_PASSWORD' .env | sed -E 's/.*=//')'
},
elasticsearch: {
origin: 'http://elasticsearch:9200',
},
publicHostname: '$(grep 'DOMAIN_NAME' .env | sed -E 's/.*=//')',
}
" > ./inventaire/config/local-production.cjs
Set the email server by editing the file config/local-production.cjs
. For example:
mailer: {
disabled: false,
nodemailer: {
host: 'smtp.sendgrid.net',
port: 587,
auth: {
user: 'user',
pass: 'password'
},
},
},
Generate the first SSL certificate with Let's Encrypt
docker run -it --rm --name certbot -p 80:80 -v "$(pwd)/certbot/conf:/etc/letsencrypt" certbot/certbot certonly --standalone
Start CouchDB, Elasticsearch, Nginx and the Inventaire server in production mode
docker-compose up
Go to the sign up page (https://DOMAIN_NAME/signup
) and create a user
Make the newly created user an admin (replace your_username
in the command below by the user username) :
docker exec $(docker ps -f name=_inventaire --format "{{.ID}}") npm run db-actions:update-user-role-from-username your_username add admin
General tips on how to run Inventaire can be found in the server repository docs. Here after are some additional Docker-specific tips.
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`
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
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 [email protected]:inventaire/inventaire.git
cd client
git remote set-url origin [email protected]:inventaire/inventaire-client.git
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:
- have NodeJS >= v16 installed on your machine, which should make both
node
andnpm
executables accessible in your terminal
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
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
: fix by running the commandsudo sysctl -w vm.max_map_count=262144
on your host machine
See also Elasticsearch with Docker
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
docker exec $(docker ps -f name=couchdb --format "{{.ID}}") curl -H 'Content-Type:application/json' -H 'Accept: application/json' -XPUT "http://couchdb:password@localhost:5984/_users"