From 9fd28bbbf15be41015c038d4c2883a2a9a871643 Mon Sep 17 00:00:00 2001 From: amandilaras Date: Thu, 25 Apr 2024 14:38:36 +0300 Subject: [PATCH] Finish Postgres initialization and deployment --- deployment/.env | 7 +- deployment/docker-compose.override.yml | 484 +++++++++++++------------ deployment/docker-compose.yml | 164 ++++----- deployment/postgres/Dockerfile | 10 + deployment/postgres/keycloak_init.sql | Bin 141953 -> 105549 bytes deployment/postgres/opendmp_init.sql | Bin 131919 -> 103131 bytes deployment/postgres/postgres.env | 6 +- deployment/postgres/user_init.sql | 4 + 8 files changed, 347 insertions(+), 328 deletions(-) create mode 100644 deployment/postgres/Dockerfile create mode 100644 deployment/postgres/user_init.sql diff --git a/deployment/.env b/deployment/.env index c686f26fb..9ecdb5e95 100644 --- a/deployment/.env +++ b/deployment/.env @@ -1,7 +1,7 @@ ###################### GENERAL ######################### #User that is used to deploy the containers -DEPLOY_USER=root - +DEPLOY_USER=1000 +DEPLOY_GROUP=1000 #version selections PROXY_TAG=mainline-alpine MAIN_APP_TAG=2.1.3 @@ -10,10 +10,11 @@ ANNOTATION_APP_TAG=2.1.3 DOCX_APP_TAG=0.0.8 JSON_APP_TAG=0.0.6 ZENODO_APP_TAG=2.0.4 +POSTGRES_TAG=16-alpine ELK_VERSION=8.13.12 KEYCLOAK_TAG=24.0.2 +RABBITMQ_TAG=3.13-management GOTENBERG_TAG=8.4.0 -POSTGRES_TAG=16-alpine #Application configuration DOCKER_REGISTRY=crepo.cite.gr/ diff --git a/deployment/docker-compose.override.yml b/deployment/docker-compose.override.yml index b9af6b701..ea6163e6b 100644 --- a/deployment/docker-compose.override.yml +++ b/deployment/docker-compose.override.yml @@ -1,153 +1,151 @@ -version: "2.4" - services: ############################## PROXY ######################################## - opendmp.proxy: - user: ${DEPLOY_USER}:${DEPLOY_USER} - restart: unless-stopped - cpus: 1 - mem_limit: 256m - ports: - - "${PROXY_APP_PORT}:8081" - - "${PROXY_MS_PORT}:8082" - env_file: - - /proxy/proxy.env - volumes: - - /proxy/nginx.conf:/etc/nginx/nginx.conf - - /proxy/ProxyNginx.conf:/etc/nginx/conf.d/default.conf - - /proxy/nginx-selfsigned.crt:/certifcates/cert.crt - - /proxy/nginx-selfsigned.key:/certifcates/key.key - - /logs/proxy:/tmp/logs - networks: - - opendmp-proxy-network + # opendmp.proxy: + # user: ${DEPLOY_USER}:${DEPLOY_GROUP} + # restart: unless-stopped + # cpus: 1 + # mem_limit: 256m + # ports: + # - "${PROXY_APP_PORT}:8081" + # - "${PROXY_MS_PORT}:8082" + # env_file: + # - proxy/proxy.env + # volumes: + # - proxy/nginx.conf:/etc/nginx/nginx.conf + # - proxy/ProxyNginx.conf:/etc/nginx/conf.d/default.conf + # - proxy/nginx-selfsigned.crt:/certifcates/cert.crt + # - proxy/nginx-selfsigned.key:/certifcates/key.key + # - logs/proxy:/tmp/logs + # networks: + # - opendmp-proxy-network ############################## OPENDMP APP ################################# - opendmp.backend: - user: ${DEPLOY_USER}:${DEPLOY_USER} - restart: unless-stopped - cpus: 1 - mem_limit: 2048m - environment: - - PROFILE=${PROFILE} - ports: - - "8080" - volumes: - - /opendmp/backend/config:/config - - /opendmp/backend/certificates:/certificates - - /opendmp/backend/i18n:/i18n - - /opendmp/backend/material:/material - - /opendmp/backend/Semantics.json:/Semantics.json - - /storage/backend:/storage - - /logs/backend:/logs - networks: - - opendmp-proxy-network - - opendmp-backend-network - - opendmp-plugins-network - - opendmp-gotenberg-shared-network - - opendmp-elastic-shared-network - - opendmp-keycloak-shared-network - - opendmp-postgres-shared-network - - opendmp-rabbitmq-shared-network +# opendmp.backend: +# user: ${DEPLOY_USER}:${DEPLOY_GROUP} +# restart: unless-stopped +# cpus: 1 +# mem_limit: 2048m +# environment: +# - PROFILE=${PROFILE} +# ports: +# - "8080" +# volumes: +# - opendmp/backend/config:/config +# - opendmp/backend/certificates:/certificates +# - opendmp/backend/i18n:/i18n +# - opendmp/backend/material:/material +# - opendmp/backend/Semantics.json:/Semantics.json +# - storage/backend:/storage +# - logs/backend:/logs +# networks: +# - opendmp-proxy-network +# - opendmp-backend-network +# - opendmp-plugins-network +# - opendmp-gotenberg-shared-network +# - opendmp-elastic-shared-network +# - opendmp-keycloak-shared-network +# - opendmp-postgres-shared-network +# - opendmp-rabbitmq-shared-network - opendmp.frontend: - restart: unless-stopped - cpus: 1 - mem_limit: 2048m - ports: - - "8080" - volumes: - - /opendmp/webapp/config.json:/usr/share/nginx/html/assets/config/config.json - - /opendmp/webapp/nginx.conf:/etc/nginx/nginx.conf - - /opendmp/webapp/WebAppNginx.conf:/etc/nginx/conf.d/default.conf - networks: - - opendmp-proxy-network +# opendmp.frontend: +# restart: unless-stopped +# cpus: 1 +# mem_limit: 2048m +# ports: +# - "8080" +# volumes: +# - opendmp/webapp/config.json:/usr/share/nginx/html/assets/config/config.json +# - opendmp/webapp/nginx.conf:/etc/nginx/nginx.conf +# - opendmp/webapp/WebAppNginx.conf:/etc/nginx/conf.d/default.conf +# networks: +# - opendmp-proxy-network - opendmp.notification: - user: ${DEPLOY_USER}:${DEPLOY_USER} - cpus: 1 - mem_limit: 1024m - restart: unless-stopped - ports: - - "8080" - environment: - - PROFILE=${PROFILE} - volumes: - - /opendmp/notification-api/config:/config - - /opendmp/notification-api/messages:/messages - - /opendmp/notification-api/notification_templates:/notification_templates - - /logs/notification-api:/logs - networks: - - opendmp-proxy-network - - opendmp-backend-network - - opendmp-plugins-network - - opendmp-rabbitmq-shared-network - - opendmp-keycloak-shared-network - - opendmp-postgres-shared-network +# opendmp.notification: +# user: ${DEPLOY_USER}:${DEPLOY_GROUP} +# cpus: 1 +# mem_limit: 1024m +# restart: unless-stopped +# ports: +# - "8080" +# environment: +# - PROFILE=${PROFILE} +# volumes: +# - opendmp/notification-api/config:/config +# - opendmp/notification-api/messages:/messages +# - opendmp/notification-api/notification_templates:/notification_templates +# - logs/notification-api:/logs +# networks: +# - opendmp-proxy-network +# - opendmp-backend-network +# - opendmp-plugins-network +# - opendmp-rabbitmq-shared-network +# - opendmp-keycloak-shared-network +# - opendmp-postgres-shared-network - opendmp.annotation: - user: ${DEPLOY_USER}:${DEPLOY_USER} - cpus: 1 - mem_limit: 1024m - restart: unless-stopped - ports: - - "8080" - environment: - - PROFILE=${PROFILE} - volumes: - - /opendmp/annotation-api/config:/config - - /opendmp/annotation-api/messages:/messages - - /logs/annotation-api:/logs - networks: - - opendmp-proxy-network - - opendmp-backend-network - - opendmp-plugins-network - - opendmp-rabbitmq-shared-network - - opendmp-keycloak-shared-network - - opendmp-postgres-shared-network +# opendmp.annotation: +# user: ${DEPLOY_USER}:${DEPLOY_GROUP} +# cpus: 1 +# mem_limit: 1024m +# restart: unless-stopped +# ports: +# - "8080" +# environment: +# - PROFILE=${PROFILE} +# volumes: +# - opendmp/annotation-api/config:/config +# - opendmp/annotation-api/messages:/messages +# - logs/annotation-api:/logs +# networks: +# - opendmp-proxy-network +# - opendmp-backend-network +# - opendmp-plugins-network +# - opendmp-rabbitmq-shared-network +# - opendmp-keycloak-shared-network +# - opendmp-postgres-shared-network -############################## FILE-TRANSFORMER ################################# +# ############################## FILE-TRANSFORMER ################################# - opendmp.file.transformer.docx: - user: ${DEPLOY_USER}:${DEPLOY_USER} - restart: unless-stopped - cpus: 1 - mem_limit: 1024m - expose: - - "8080" - environment: - - SERVER_PORT=${SERVER_PORT} - - PROFILE=${PROFILE} - volumes: - - /opendmp/file-transformer-docx/config:/config - - /logs/file-transformer-docx:/logs - - /storage/file-transformer-docx:/storage - networks: - - opendmp-backend-network - - opendmp-plugins-network - - opendmp-gotenberg-shared-network - - opendmp.file.transformer.rdajson: - user: ${DEPLOY_USER}:${DEPLOY_USER} - restart: unless-stopped - cpus: 1 - mem_limit: 1024m - expose: - - "8080" - environment: - - SERVER_PORT=${SERVER_PORT} - - PROFILE=${PROFILE} - volumes: - - /opendmp/file-transformer-rda-json/config:/config - - /opendmp/file-transformer-rda-json/internal:/internal - - /logs/file-transformer-rda-json:/logs - - /storage/file-transformer-rda-json:/storage - networks: - - opendmp-backend-network - - opendmp-plugins-network +# opendmp.file.transformer.docx: +# user: ${DEPLOY_USER}:${DEPLOY_GROUP} +# restart: unless-stopped +# cpus: 1 +# mem_limit: 1024m +# expose: +# - "8080" +# environment: +# - SERVER_PORT=${SERVER_PORT} +# - PROFILE=${PROFILE} +# volumes: +# - opendmp/file-transformer-docx/config:/config +# - logs/file-transformer-docx:/logs +# - storage/file-transformer-docx:/storage +# networks: +# - opendmp-backend-network +# - opendmp-plugins-network +# - opendmp-gotenberg-shared-network + +# opendmp.file.transformer.rdajson: +# user: ${DEPLOY_USER}:${DEPLOY_GROUP} +# restart: unless-stopped +# cpus: 1 +# mem_limit: 1024m +# expose: +# - "8080" +# environment: +# - SERVER_PORT=${SERVER_PORT} +# - PROFILE=${PROFILE} +# volumes: +# - opendmp/file-transformer-rda-json/config:/config +# - opendmp/file-transformer-rda-json/internal:/internal +# - logs/file-transformer-rda-json:/logs +# - storage/file-transformer-rda-json:/storage +# networks: +# - opendmp-backend-network +# - opendmp-plugins-network ############################## ZENODO ####################################### # opendmp.zenodo: - # user: ${DEPLOY_USER}:${DEPLOY_USER} + # user: ${DEPLOY_USER}:${DEPLOY_GROUP} # restart: unless-stopped # cpus: 1 # mem_limit: 1024m @@ -166,79 +164,77 @@ services: ############################## POSTGRES 16 ################################# opendmp.postgres: - user: ${DEPLOY_USER}:${DEPLOY_USER} + user: ${DEPLOY_USER}:${DEPLOY_GROUP} restart: unless-stopped mem_limit: 2048M ports: - # - "127.0.0.1:${POSTGRES_PORT}:5432" + # - "127.0.0.1:${POSTGRES_PORT}:5432" # If you want to make it accessible locally only - "${POSTGRES_PORT}:5432" env_file: - postgres/postgres.env volumes: - - /postgres/opendmp_init.sql:/docker-entrypoint-initdb.d/opendmp_init.sql - - /postgres/keycloak_init.sql:/docker-entrypoint-initdb.d/keycloak_init.sql - - /storage/postgres/data:/var/lib/postgresql/data + - ./storage/postgres/data:/var/lib/postgresql/data networks: - - opendmp-keycloak-shared-network + - opendmp-postgres-shared-network ################################# ELK ################################################# - opendmp.elasticsearch: - user: ${DEPLOY_USER}:${DEPLOY_USER} - group_add: - - 0 - restart: unless-stopped - cpus: 2 - mem_limit: 1024m - env_file: - - /elk/config-elk/elasticsearch/elastic.env - environment: - - "ES_JAVA_OPTS=-Xmx512m -Xms512m" - ulimits: - nproc: 65535 - memlock: - soft: -1 - hard: -1 - volumes: - - /elk/config-elk/elasticsearch/certificates:/usr/share/elasticsearch/config/certificates - - /elk/config-elk/elasticsearch/config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties:ro - - /elk/config-elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro - - /elk/data-elk/elasticsearch-data:/usr/share/elasticsearch/data - - /elk/data-elk/elasticsearch-log:/usr/share/elasticsearch/logs - expose: - - "9200" - - "9300" - networks: - - opendmp-elastic-network - - opendmp-elastic-shared-network - healthcheck: - test: curl --cacert /usr/share/elasticsearch/config/certificates/ca/ca.crt -s https://localhost:9200 >/dev/null; if [[ $$? == 52 ]]; then echo 0; else echo 1; fi - interval: 30s - timeout: 10s - retries: 5 +# opendmp.elasticsearch: +# user: ${DEPLOY_USER}:${DEPLOY_GROUP} +# group_add: +# - 0 +# restart: unless-stopped +# cpus: 2 +# mem_limit: 1024m +# env_file: +# - elk/config-elk/elasticsearch/elastic.env +# environment: +# - "ES_JAVA_OPTS=-Xmx512m -Xms512m" +# ulimits: +# nproc: 65535 +# memlock: +# soft: -1 +# hard: -1 +# volumes: +# - elk/config-elk/elasticsearch/certificates:/usr/share/elasticsearch/config/certificates +# - elk/config-elk/elasticsearch/config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties:ro +# - elk/config-elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro +# - elk/data-elk/elasticsearch-data:/usr/share/elasticsearch/data +# - elk/data-elk/elasticsearch-log:/usr/share/elasticsearch/logs +# expose: +# - "9200" +# - "9300" +# networks: +# - opendmp-elastic-network +# - opendmp-elastic-shared-network +# healthcheck: +# test: curl --cacert /usr/share/elasticsearch/config/certificates/ca/ca.crt -s https://localhost:9200 >/dev/null; if [[ $$? == 52 ]]; then echo 0; else echo 1; fi +# interval: 30s +# timeout: 10s +# retries: 5 - # opendmp.logstash: - # volumes: - # - /elk/data-elk/logstash-log:/usr/share/logstash/logs +# # opendmp.logstash: +# # volumes: +# # - /elk/data-elk/logstash-log:/usr/share/logstash/logs - opendmp.kibana: - user: ${DEPLOY_USER}:${DEPLOY_USER} - restart: unless-stopped - cpus: 2 - mem_limit: 1024m - environment: - - xpack.license.self_generated.type=basic - - xpack.security.enabled=true - volumes: - - /elk/config-elk/kibana/certificates:/usr/share/kibana/certificates - - /elk/config-elk/kibana/certificates/ca:/usr/share/kibana/certificate_authorities - - /elk/config-elk/kibana/config:/usr/share/kibana/config:ro - expose: - - "5601" - networks: - - opendmp-elastic-network +# opendmp.kibana: +# user: ${DEPLOY_USER}:${DEPLOY_GROUP} +# restart: unless-stopped +# cpus: 2 +# mem_limit: 1024m +# environment: +# - xpack.license.self_generated.type=basic +# - xpack.security.enabled=true +# volumes: +# - elk/config-elk/kibana/certificates:/usr/share/kibana/certificates +# - elk/config-elk/kibana/certificates/ca:/usr/share/kibana/certificate_authorities +# - elk/config-elk/kibana/config:/usr/share/kibana/config:ro +# expose: +# - "5601" +# networks: +# - opendmp-elastic-network + +# # opendmp.filebeat: - # opendmp.filebeat: - ############################## KEYCLOAK ############################################### opendmp.keycloak: @@ -249,66 +245,72 @@ services: security_opt: - seccomp:unconfined env_file: - - /keycloak/keycloak.env + - keycloak/keycloak.env environment: - JAVA_OPTS_APPEND="-Djava.net.preferIPv4Stack=true" volumes: - - /logs/keycloak:/tmp/logs - - /keycloak/imports/opendmp-realm.json:/opt/keycloak/data/import/opendmp-realm.json - - /keycloak/certs/keycloak-selfsigned.crt:/tmp/keycloak-selfsigned.crt:ro - - /keycloak/certs/keycloak-selfsigned.key:/tmp/keycloak-selfsigned.key:ro + - logs/keycloak:/tmp/logs + - keycloak/imports/opendmp-realm.json:/opt/keycloak/data/import/opendmp-realm.json + - keycloak/certs/keycloak-selfsigned.crt:/tmp/keycloak-selfsigned.crt:ro + - keycloak/certs/keycloak-selfsigned.key:/tmp/keycloak-selfsigned.key:ro expose: - "8443" networks: - opendmp-proxy-network + - opendmp-postgres-shared-network - opendmp-keycloak-shared-network -############################## RABBITMQ ############################################### - opendmp.rabbitmq: - labels: - NAME: "rabbitmq" - cpus: 1 - mem_limit: 512m - restart: unless-stopped - expose: - - "15672" - - "5672" - env_file: - - /rabbitmq/rabbitmq.env -# volumes: -# - /rabbitmq/rabbitmq.config:/etc/rabbitmq/rabbitmq.config:ro - networks: - - opendmp-proxy-network - - opendmp-rabbitmq-shared-network +# ############################## RABBITMQ ############################################### +# opendmp.rabbitmq: +# labels: +# NAME: "rabbitmq" +# cpus: 1 +# mem_limit: 512m +# restart: unless-stopped +# expose: +# - "15672" +# - "5672" +# env_file: +# - rabbitmq/rabbitmq.env +# # volumes: +# # - /rabbitmq/rabbitmq.config:/etc/rabbitmq/rabbitmq.config:ro +# networks: +# - opendmp-proxy-network +# - opendmp-rabbitmq-shared-network -############################## GOTENBERG ############################################## - opendmo.gotenberg: - mem_limit: 2048m - restart: unless-stopped - expose: - - "3000" - hostname: gotenberg - env_file: - - /gotenberg/gotenberg.env - networks: - - opendmp-gotenberg-shared-network +# ############################## GOTENBERG ############################################## +# opendmp.gotenberg: +# mem_limit: 2048m +# restart: unless-stopped +# expose: +# - "3000" +# hostname: gotenberg +# env_file: +# - gotenberg/gotenberg.env +# networks: +# - opendmp-gotenberg-shared-network networks: + opendmp-elastic-network: + name: opendmp-elastic-network opendmp-proxy-network: + name: opendmp-proxy-network opendmp-backend-network: + name: opendmp-backend-network opendmp-plugins-network: + name: opendmp-plugins-network opendmp-keycloak-shared-network: - external: - name: opendmp-keycloak-shared-network + external: true + name: opendmp-keycloak-shared-network opendmp-gotenberg-shared-network: - external: - name: opendmp-gotenberg-shared-network + external: true + name: opendmp-gotenberg-shared-network opendmp-rabbitmq-shared-network: - external: - name: opendmp-rabbitmq-shared-network + external: true + name: opendmp-rabbitmq-shared-network opendmp-elastic-shared-network: - external: - name: opendmp-elastic-shared-network + external: true + name: opendmp-elastic-shared-network opendmp-postgres-shared-network: - external: - name: opendmp-postgres-shared-network \ No newline at end of file + external: true + name: opendmp-postgres-shared-network diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml index 1d9db08fa..0341ada59 100644 --- a/deployment/docker-compose.yml +++ b/deployment/docker-compose.yml @@ -1,52 +1,50 @@ -version: "2.4" - services: ############################## PROXY ######################################## - opendmp.proxy: - container_name: opendmp.proxy - image: nginx:${PROXY_TAG} +# opendmp.proxy: +# container_name: opendmp.proxy +# image: nginx:${PROXY_TAG} -############################## OPENDMP APP ################################# +# ############################## OPENDMP APP ################################# - opendmp.frontend: - container_name: opendmp.frontend - image: ${DOCKER_REGISTRY}open-dmp-webapp:${MAIN_APP_TAG} - depends_on: - - opendmp.backend - - opendmp.notification - - opendmp.annotation +# opendmp.frontend: +# container_name: opendmp.frontend +# image: ${DOCKER_REGISTRY}open-dmp-webapp:${MAIN_APP_TAG} +# depends_on: +# - opendmp.backend +# - opendmp.notification +# - opendmp.annotation - opendmp.backend: - container_name: opendmp.backend - image: ${DOCKER_REGISTRY}open-dmp-api:${MAIN_APP_TAG} - depends_on: - - opendmp.postgres +# opendmp.backend: +# container_name: opendmp.backend +# image: ${DOCKER_REGISTRY}open-dmp-api:${MAIN_APP_TAG} +# depends_on: +# - opendmp.postgres - opendmp.notification: - container_name: opendmp.notification - image: ${DOCKER_REGISTRY}open-dmp-notification-api:${NOTIFICATION_APP_TAG} - depends_on: - - opendmp.postgres +# opendmp.notification: +# container_name: opendmp.notification +# image: ${DOCKER_REGISTRY}open-dmp-notification-api:${NOTIFICATION_APP_TAG} +# depends_on: +# - opendmp.postgres - opendmp.annotation: - container_name: opendmp.annotation - image: ${DOCKER_REGISTRY}open-dmp-annotation-api:${ANNOTATION_APP_TAG} - depends_on: - - opendmp.postgres +# opendmp.annotation: +# container_name: opendmp.annotation +# image: ${DOCKER_REGISTRY}open-dmp-annotation-api:${ANNOTATION_APP_TAG} +# depends_on: +# - opendmp.postgres -############################## FILE-TRANSFORMERS ####################################### +# ############################## FILE-TRANSFORMERS ####################################### - opendmp.file.transformer.docx: - container_name: opendmp.file.transformer.docx - image: ${DOCKER_REGISTRY}file-transformation-docx-api:${DOCX_APP_TAG} - depends_on: - - opendmp.backend +# opendmp.file.transformer.docx: +# container_name: opendmp.file.transformer.docx +# image: ${DOCKER_REGISTRY}file-transformation-docx-api:${DOCX_APP_TAG} +# depends_on: +# - opendmp.backend - opendmp.file.transformer.rdajson: - container_name: opendmp.file.transformer.rdajson - image: ${DOCKER_REGISTRY}file-transformation-rda-json-api:${JSON_APP_TAG} - depends_on: - - opendmp.backend +# opendmp.file.transformer.rdajson: +# container_name: opendmp.file.transformer.rdajson +# image: ${DOCKER_REGISTRY}file-transformation-rda-json-api:${JSON_APP_TAG} +# depends_on: +# - opendmp.backend ################################ ZENODO ############################################### # opendmp.zenodo: @@ -59,57 +57,61 @@ services: opendmp.postgres: container_name: opendmp.postgres image: postgres:${POSTGRES_TAG} + build: + context: ./postgres/ + args: + POSTGRES_TAG: $POSTGRES_TAG ################################# ELK ################################################# - opendmp.elasticsearch: - container_name: opendmp.elasticsearch - image: elasticsearch - build: - context: /elk/elasticsearch/ - args: - ELK_VERSION: $ELK_VERSION +# opendmp.elasticsearch: +# container_name: opendmp.elasticsearch +# image: elasticsearch +# build: +# context: /elk/elasticsearch/ +# args: +# ELK_VERSION: $ELK_VERSION - # opendmp.logstash: - # container_name: opendmp.logstash - # image: logstash - # build: - # context: /elk/logstash/ - # args: - # ELK_VERSION: $ELK_VERSION - # depends_on: - # - opendmp.elasticsearch +# # opendmp.logstash: +# # container_name: opendmp.logstash +# # image: logstash +# # build: +# # context: /elk/logstash/ +# # args: +# # ELK_VERSION: $ELK_VERSION +# # depends_on: +# # - opendmp.elasticsearch - opendmp.kibana: - container_name: opendmp.kibana - image: kibana - build: - context: /elk/kibana/ - args: - ELK_VERSION: $ELK_VERSION - depends_on: - - opendmp.elasticsearch +# opendmp.kibana: +# container_name: opendmp.kibana +# image: kibana +# build: +# context: /elk/kibana/ +# args: +# ELK_VERSION: $ELK_VERSION +# depends_on: +# - opendmp.elasticsearch - # opendmp.filebeat: - # container_name: opendmp.filebeat - # image: filebeat - # build: - # context: /elk/filebeat/ - # args: - # ELK_VERSION: $ELK_VERSION - # depends_on: - # - opendmp.logstash +# # opendmp.filebeat: +# # container_name: opendmp.filebeat +# # image: filebeat +# # build: +# # context: /elk/filebeat/ +# # args: +# # ELK_VERSION: $ELK_VERSION +# # depends_on: +# # - opendmp.logstash ############################## KEYCLOAK ############################################### opendmp.keycloak: container_name: opendmp.keycloak image: quay.io/keycloak/keycloak:${KEYCLOAK_TAG} -############################## RABBITMQ ############################################### - opendmp.rabbitmq: - container_name: opendmp.rabbitmq - image: rabbitmq:${RABBITMQ_TAG} +# ############################## RABBITMQ ############################################### +# opendmp.rabbitmq: +# container_name: opendmp.rabbitmq +# image: rabbitmq:${RABBITMQ_TAG} -############################## GOTENBERG ############################################## - opendmp.gotenberg: - image: gotenberg/gotenberg:${GOTENBERG_TAG} - container_name: opendmp.gotenberg +# ############################## GOTENBERG ############################################## +# opendmp.gotenberg: +# image: gotenberg/gotenberg:${GOTENBERG_TAG} +# container_name: opendmp.gotenberg diff --git a/deployment/postgres/Dockerfile b/deployment/postgres/Dockerfile new file mode 100644 index 000000000..9798ad94a --- /dev/null +++ b/deployment/postgres/Dockerfile @@ -0,0 +1,10 @@ +ARG POSTGRES_TAG +ARG DEPLOY_USER +ARG DEPLOY_GROUP +FROM postgres:${POSTGRES_TAG} +COPY ./opendmp_init.sql /docker-entrypoint-initdb.d/ +COPY ./keycloak_init.sql /docker-entrypoint-initdb.d/ +COPY ./user_init.sql /docker-entrypoint-initdb.d/ +ENTRYPOINT ["docker-entrypoint.sh"] +EXPOSE 5432 +CMD ["postgres"] \ No newline at end of file diff --git a/deployment/postgres/keycloak_init.sql b/deployment/postgres/keycloak_init.sql index 334cb8f660f3708838ba738911a0e8b98bf89a02..f07c5e55f10be4b6ade7b33135ab5dc299d22d30 100644 GIT binary patch literal 105549 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 literal 141953 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 DcWM*H literal 131919 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 Y3{CHJ4v}Y80}J3B{U<$%!g_@N4>3nzZU6uP diff --git a/deployment/postgres/postgres.env b/deployment/postgres/postgres.env index 7ec5f2c9f..abc761088 100644 --- a/deployment/postgres/postgres.env +++ b/deployment/postgres/postgres.env @@ -1,4 +1,4 @@ #################### POSTGRES ######################## -#POSTGRES_DB=keycloak -POSTGRES_USER=admin -POSTGRES_PASSWORD=changeme \ No newline at end of file +POSTGRES_USER=postgres +POSTGRES_PASSWORD=changeme +PGDATA=/var/lib/postgresql/data/ \ No newline at end of file diff --git a/deployment/postgres/user_init.sql b/deployment/postgres/user_init.sql new file mode 100644 index 000000000..fc5ed4714 --- /dev/null +++ b/deployment/postgres/user_init.sql @@ -0,0 +1,4 @@ +CREATE USER keycloak_psql WITH PASSWORD 'keycloak-admin'; +ALTER DATABASE keycloak OWNER TO keycloak_psql; +CREATE USER opendmp_psql WITH PASSWORD 'opendmp-admin'; +ALTER DATABASE "opendmp-test" OWNER TO opendmp_psql; \ No newline at end of file