diff --git a/.gitignore b/.gitignore index 82ba10d..593157c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ inventaire +.env data log configs/docker.ini diff --git a/Dockerfile.inventaire b/Dockerfile.inventaire new file mode 100755 index 0000000..953ebee --- /dev/null +++ b/Dockerfile.inventaire @@ -0,0 +1,12 @@ +FROM node:20 + +RUN apt-get update \ + && apt-get install -y curl zsh git graphicsmagick inotify-tools jq \ + && apt-get clean + +# Default to the same user as the host (override from command lin if needed) +# Known benefits: +# - allows to handle leveldb with level-party from both the host and container at the same time +USER 1000:1000 + +CMD ["npm", "run", "start"] diff --git a/README.md b/README.md index 6de1e08..1a68b73 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Run [Inventaire](https://github.com/inventaire/inventaire) in Docker -This repository is meant to support running Inventaire for testing and development. For production, see [inventaire-deploy](https://github.com/inventaire/inventaire-deploy). +This repository is packaging Inventaire for Docker production environement. To run it for production outside Docker, see [inventaire-deploy](https://github.com/inventaire/inventaire-deploy). ## Summary diff --git a/docker-compose.yml b/docker-compose.yml index 682c185..35e26f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,15 +1,36 @@ version: '3' services: + inventaire: + build: + context: ./. + dockerfile: Dockerfile.inventaire + ports: + - "3006:3006" + volumes: + - ./inventaire:${PROJECT_ROOT} + working_dir: ${PROJECT_ROOT} + environment: + NODE_ENV: 'production' + COUCHDB_USER: ${COUCHDB_USER} + COUCHDB_PASSWORD: ${COUCHDB_PASSWORD} + PUBLIC_HOSTNAME: ${PUBLIC_HOSTNAME} + depends_on: + - elasticsearch + tty: true + logging: + options: + max-size: "10m" + max-file: "3" couchdb: image: couchdb:3.4.2 ports: - "5984:5984" - environment: - COUCHDB_USER: "yourcouchdbusername" - COUCHDB_PASSWORD: "yourcouchdbpassword" volumes: - 'couchdb:/opt/couchdb/data' - './configs:/opt/couchdb/etc/local.d' + environment: + COUCHDB_USER: ${COUCHDB_USER} + COUCHDB_PASSWORD: ${COUCHDB_PASSWORD} tty: true elasticsearch: image: elasticsearch:7.16.2 @@ -18,11 +39,13 @@ services: - 'transport.host=127.0.0.1' # See https://www.elastic.co/guide/en/elasticsearch/reference/7.16/docker.html - 'discovery.type=single-node' + # Limit memory usage to 1Go, + # See https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html - 'ES_JAVA_OPTS=-Xms1g -Xmx1g' volumes: - 'elasticsearch:/usr/share/elasticsearch/data' ports : - - '127.0.0.1:9200:9200' + - '9200:9200' volumes: couchdb: - elasticsearch: \ No newline at end of file + elasticsearch: diff --git a/dotenv b/dotenv new file mode 100644 index 0000000..3878077 --- /dev/null +++ b/dotenv @@ -0,0 +1,12 @@ +# Your website domain name +PUBLIC_HOSTNAME=an-inventaire-site.org + +# Root path within docker container +PROJECT_ROOT=/opt/inventaire + +# Generic user, to modify only for good reason +COUCHDB_USER=couchdb + +# Consider passwords with no less than 32 charracters, for example: +# cat /dev/urandom | tr -dc A-Za-z0-9-_ | head -c 32 +COUCHDB_PASSWORD=your_password