version: "3" services: # # API/Controller # api-dev: image: node:hydrogen environment: PORT: ${API_PORT} AGENT_ADMIN_URL: ${AGENT_ADMIN_URL} AGENT_ADMIN_API_KEY: ${AGENT_ADMIN_API_KEY} DB_SERVICE: ${DB_SERVICE} DB_NAME: ${MONGODB_DATABASE} DB_USER: ${MONGODB_USER} DB_PASSWORD: ${MONGODB_PASSWORD} DB_PORT: ${MONGODB_PORT} SERVER_SELECTION_TIMEOUT: ${SERVER_SELECTION_TIMEOUT} SMTP_HOST: ${SMTP_HOST} SMTP_PORT: ${SMTP_PORT} ADMIN_EMAIL: ${ADMIN_EMAIL} EMAIL_SUBJECT: ${EMAIL_SUBJECT} PUBLIC_SITE_URL: ${PUBLIC_SITE_URL} LOG_LEVEL: ${LOG_LEVEL} volumes: - ../api:/usr/src/api ports: - ${API_PORT}:${API_PORT} networks: - issuer_kit working_dir: /usr/src/api depends_on: - db command: npm run dev api: image: issuer-kit-api:latest environment: PORT: ${API_PORT} AGENT_ADMIN_URL: ${AGENT_ADMIN_URL} AGENT_ADMIN_API_KEY: ${AGENT_ADMIN_API_KEY} DB_SERVICE: ${DB_SERVICE} DB_NAME: ${MONGODB_DATABASE} DB_USER: ${MONGODB_USER} DB_PASSWORD: ${MONGODB_PASSWORD} DB_PORT: ${MONGODB_PORT} SERVER_SELECTION_TIMEOUT: ${SERVER_SELECTION_TIMEOUT} SMTP_HOST: ${SMTP_HOST} SMTP_PORT: ${SMTP_PORT} ADMIN_EMAIL: ${ADMIN_EMAIL} EMAIL_SUBJECT: ${EMAIL_SUBJECT} PUBLIC_SITE_URL: ${PUBLIC_SITE_URL} LOG_LEVEL: ${LOG_LEVEL} S2I_SCRIPTS_PATH: ${S2I_SCRIPTS_PATH} volumes: - ./api/config:/opt/app-root/src/config ports: - ${API_PORT}:${API_PORT} networks: - issuer_kit depends_on: - db command: > /bin/bash -c " echo waiting for database...; sleep 15; ${S2I_SCRIPTS_PATH}/run;" # # Admin frontend with hot-reloading # issuer-admin-dev: image: node:hydrogen volumes: - ../issuer-admin:/usr/src/issuer-admin working_dir: /usr/src/issuer-admin ports: - ${ISSUER_ADMIN_PORT}:${ISSUER_ADMIN_PORT} networks: - issuer_kit command: npm run serve issuer-admin: image: issuer-admin:latest environment: WEB_HOST_NAME: ${ADMIN_WEB_HOST_NAME} WEB_HOST_PORT: ${ADMIN_WEB_HOST_PORT} WEB_HOST_TLS: ${ADMIN_WEB_HOST_TLS} API_HOST: ${ADMIN_API_HOST} API_PORT: ${ADMIN_API_PORT} volumes: - ./issuer-admin/config/Caddyfile:/etc/caddy/Caddyfile - ./issuer-admin/config/admin:/srv/config ports: - ${ADMIN_WEB_HOST_PORT}:${ADMIN_WEB_HOST_PORT} networks: - issuer_kit # # Public frontend with hot-reloading # issuer-web-dev: image: node:hydrogen volumes: - ../issuer-web:/usr/src/issuer-web working_dir: /usr/src/issuer-web ports: - ${ISSUER_WEB_PORT}:${ISSUER_WEB_PORT} networks: - issuer_kit command: npm run serve issuer-web: image: issuer-web:latest environment: WEB_HOST_NAME: ${PUBLIC_WEB_HOST_NAME} WEB_HOST_PORT: ${PUBLIC_WEB_HOST_PORT} WEB_HOST_TLS: ${PUBLIC_WEB_HOST_TLS} API_HOST: ${PUBLIC_API_HOST} API_PORT: ${PUBLIC_API_PORT} volumes: - ./issuer-web/config/Caddyfile:/etc/caddy/Caddyfile - ./issuer-web/config/web:/srv/config ports: - ${PUBLIC_WEB_HOST_PORT}:${PUBLIC_WEB_HOST_PORT} networks: - issuer_kit # # db # db: image: centos/mongodb-36-centos7 environment: MONGODB_ADMIN_PASSWORD: ${MONGODB_ADMIN_PASSWORD} MONGODB_USER: ${MONGODB_USER} MONGODB_PASSWORD: ${MONGODB_PASSWORD} MONGODB_DATABASE: ${MONGODB_DATABASE} volumes: - db-data:/var/lib/mongodb/data ports: - ${MONGODB_PORT}:${MONGODB_PORT} networks: - issuer_kit # # keycloak service # keycloak: image: quay.io/keycloak/keycloak:22.0 command: start-dev --import-realm --http-relative-path=/auth environment: KC_DB: ${KEYCLOAK_DB_VENDOR} KC_DB_URL: jdbc:postgresql://${KEYCLOAK_DB_ADDR}/keycloak KC_DB_USERNAME: ${KEYCLOAK_DB_USER} KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD} KEYCLOAK_ADMIN: ${KEYCLOAK_USER} KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD} volumes: - ../docker/keycloak/config:/opt/keycloak/data/import ports: - 8180:8080 depends_on: - keycloak-db networks: - issuer_kit # # keycloak-db # keycloak-db: image: postgres:15-alpine environment: POSTGRES_USER: ${KEYCLOAK_DB_USER} POSTGRES_PASSWORD: ${KEYCLOAK_DB_PASSWORD} POSTGRES_DB: ${KEYCLOAK_DB_NAME} volumes: - keycloak-db-data:/var/lib/postgresql/data networks: - issuer_kit # # Issuer Kit Agent # agent: image: ghcr.io/hyperledger/aries-cloudagent-python:py3.9-0.9.0 environment: LEDGER_URL: ${LEDGER_URL} WALLET_TYPE: ${AGENT_STORAGE_WALLET_TYPE} POSTGRESQL_WALLET_HOST: ${WALLET_HOST} POSTGRESQL_WALLET_PORT: ${WALLET_PORT} POSTGRESQL_WALLET_USER: ${WALLET_USER} POSTGRESQL_WALLET_PASSWORD: ${WALLET_PASSWORD} WALLET_ENCRYPTION_KEY: ${AGENT_WALLET_ENCRYPTION_KEY} ACAPY_WALLET_SEED: ${ACAPY_WALLET_SEED} WEBHOOK_URL: ${AGENT_WEBHOOK_URL} HTTP_INTERFACE_PORT: ${AGENT_HTTP_INTERFACE_PORT} AGENT_ADMIN_PORT: ${AGENT_ADMIN_PORT} AGENT_NAME: ${AGENT_NAME} AGENT_ADMIN_API_KEY: ${AGENT_ADMIN_API_KEY} TAILS_SERVER_URL: ${TAILS_SERVER_URL} networks: - issuer_kit ports: - ${AGENT_HTTP_INTERFACE_PORT}:${AGENT_HTTP_INTERFACE_PORT} - ${AGENT_ADMIN_PORT}:${AGENT_ADMIN_PORT} depends_on: - wallet entrypoint: /bin/bash command: [ "-c", "curl -d '{\"seed\":\"${ACAPY_WALLET_SEED}\", \"role\":\"TRUST_ANCHOR\", \"alias\":\"${AGENT_NAME}\"}' -X POST ${LEDGER_URL}/register; \ sleep 5; \ aca-py start \ --inbound-transport http '0.0.0.0' ${AGENT_HTTP_INTERFACE_PORT} \ --outbound-transport http \ --endpoint ${AGENT_ENDPOINT} \ --genesis-url '${LEDGER_URL}/genesis' \ --auto-accept-invites \ --auto-accept-requests \ --auto-ping-connection \ --auto-respond-messages \ --auto-store-credential \ --auto-verify-presentation \ --auto-respond-presentation-proposal \ --auto-provision \ --wallet-type 'askar' \ --wallet-name '${AGENT_WALLET_NAME}' \ --wallet-key '${AGENT_WALLET_ENCRYPTION_KEY}' \ --wallet-storage-type '${AGENT_STORAGE_WALLET_TYPE}' \ --wallet-storage-config '{\"url\":\"${WALLET_HOST}:${WALLET_PORT}\",\"max_connections\":5}' \ --wallet-storage-creds '{\"account\":\"${WALLET_USER}\",\"password\":\"${WALLET_PASSWORD}\",\"admin_account\":\"${WALLET_USER}\",\"admin_password\":\"${WALLET_PASSWORD}\"}' \ --seed '${ACAPY_WALLET_SEED}' \ --admin '0.0.0.0' ${AGENT_ADMIN_PORT} \ --${AGENT_ADMIN_MODE} \ --label ${AGENT_NAME} \ --tails-server-base-url ${TAILS_SERVER_URL}", ] # # Issuer Kit Wallet # wallet: image: postgres:12-alpine environment: POSTGRES_USER: ${WALLET_USER} POSTGRES_PASSWORD: ${WALLET_PASSWORD} networks: - issuer_kit ports: - ${WALLET_PORT}:${WALLET_PORT} volumes: - wallet-data:/var/lib/postgresql/data tails-server: build: context: https://github.com/bcgov/indy-tails-server.git#main dockerfile: docker/Dockerfile.tails-server ports: - ${TAILS_SERVER_PORT}:${TAILS_SERVER_PORT} volumes: - tails-storage:/tmp networks: - issuer_kit command: > tails-server --host 0.0.0.0 --port $TAILS_SERVER_PORT --storage-path $TAILS_STORAGE_PATH --log-level $LOG_LEVEL maildev: image: maildev/maildev environment: MAILDEV_SMTP_PORT: 25 networks: - issuer_kit ports: - "8050:1080" networks: issuer_kit: volumes: keycloak-db-data: wallet-data: db-data: tails-storage: