diff --git a/Dockerfile.inventaire b/Dockerfile.inventaire old mode 100755 new mode 100644 diff --git a/couchdb/Dockerfile.couchdb b/couchdb/Dockerfile.couchdb new file mode 100644 index 0000000..ad7666e --- /dev/null +++ b/couchdb/Dockerfile.couchdb @@ -0,0 +1,14 @@ +FROM couchdb:3.4.2 + +COPY docker-custom-entrypoint.sh /usr/local/bin/docker-custom-entrypoint.sh +COPY init_users_db.sh /usr/local/bin/init_users_db.sh + +ENTRYPOINT ["tini", "--", "/usr/local/bin/docker-custom-entrypoint.sh"] + +EXPOSE 5984 + +# Copied from the couchdb image Dockerfile +# https://github.com/apache/couchdb-docker/blob/734c61f/3.4.2/Dockerfile#L104 +# as it would have been otherwise reset to an empty string +# See https://docs.docker.com/reference/dockerfile/#understand-how-cmd-and-entrypoint-interact +CMD ["/opt/couchdb/bin/couchdb"] diff --git a/couchdb/docker-custom-entrypoint.sh b/couchdb/docker-custom-entrypoint.sh new file mode 100755 index 0000000..d0dd298 --- /dev/null +++ b/couchdb/docker-custom-entrypoint.sh @@ -0,0 +1,3 @@ +#!/bin/bash +/usr/local/bin/init_users_db.sh & +tini -- /docker-entrypoint.sh "$@" \ No newline at end of file diff --git a/couchdb/init_users_db.sh b/couchdb/init_users_db.sh new file mode 100755 index 0000000..254300e --- /dev/null +++ b/couchdb/init_users_db.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +while :; do { + echo "[init_users_db.sh] Waiting for CouchDB to be online to initialize the _users database" + curl http://localhost:5984 && { + echo "[init_users_db.sh] CouchDB is online! Trying to initialize _users database" + curl --user "$COUCHDB_USER:$COUCHDB_PASSWORD" -XPUT http://localhost:5984/_users + break + } || { + sleep 1 + } +}; done diff --git a/docker-compose.yml b/docker-compose.yml index d9399ac..04f38e8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,31 +1,23 @@ -version: '3' services: inventaire: - build: - context: ./. - dockerfile: Dockerfile.inventaire + image: inventaire:latest volumes: - - ./inventaire:${PROJECT_ROOT} - working_dir: ${PROJECT_ROOT} - environment: - NODE_ENV: 'production' - NODE_APP_INSTANCE: 'federated' - COUCHDB_USER: ${COUCHDB_USER} - COUCHDB_PASSWORD: ${COUCHDB_PASSWORD} - PUBLIC_HOSTNAME: ${PUBLIC_HOSTNAME} + - ./inventaire:/opt/inventaire + env_file: .env depends_on: + - couchdb - elasticsearch tty: true logging: options: max-size: "10m" max-file: "3" - restart: "always" + restart: unless-stopped couchdb: - image: couchdb:3.4.2 - environment: - COUCHDB_USER: ${COUCHDB_USER} - COUCHDB_PASSWORD: ${COUCHDB_PASSWORD} + build: + context: ./couchdb + dockerfile: Dockerfile.couchdb + env_file: .env # Uncomment ports to get access to the db # ie. for database transformation, querying, UI access (http://localhost:5984/_utils/) # ports: @@ -34,7 +26,7 @@ services: - 'couchdb:/opt/couchdb/data' - './configs:/opt/couchdb/etc/local.d' tty: true - restart: "always" + restart: unless-stopped elasticsearch: image: elasticsearch:7.16.2 environment: @@ -47,7 +39,7 @@ services: - 'ES_JAVA_OPTS=-Xms1g -Xmx1g' volumes: - 'elasticsearch:/usr/share/elasticsearch/data' - restart: "always" + restart: unless-stopped nginx: build: context: ./nginx @@ -61,13 +53,11 @@ services: - ./inventaire:${PROJECT_ROOT} - certbot-www:/var/www/certbot - ./certbot/conf:/etc/letsencrypt - environment: - PROJECT_ROOT: ${PROJECT_ROOT} - PUBLIC_HOSTNAME: ${PUBLIC_HOSTNAME} - INVENTAIRE_PORT: ${INVENTAIRE_PORT} + env_file: .env depends_on: + # Required to be able to define the `inventaire` host as an upstream - inventaire - restart: "always" + restart: unless-stopped certbot: image: certbot/certbot:latest volumes: diff --git a/dotenv b/dotenv index 3878077..baa84c7 100644 --- a/dotenv +++ b/dotenv @@ -10,3 +10,8 @@ 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 + +NODE_ENV=production +NODE_APP_INSTANCE=federated +# Matching the port defined in inventaire/config/production-federated.cjs +INVENTAIRE_PORT=3016