sha256:802f524ca3ea496c780263aeeae2c52a8b8ac08bab4232b3cace39bcfca887f7
Last pushed
16 days by aperturedata
Type
Compose
Manifest digest
sha256:802f524ca3ea496c780263aeeae2c52a8b8ac08bab4232b3cace39bcfca887f7
# aperturedb-compose version: 0.20.0-rc.1
services:
zoo1:
image: ${ZOOKEEPER_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}zookeeper:3.9.6}
restart: always
hostname: zoo1
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
ZOO_TICK_TIME: 8000
ZOO_CFG_EXTRA: extendedTypesEnabled=true
ZOO_DATA_LOG_DIR: /data
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}zookeeper_zoo1_data:/data"
zoo2:
image: ${ZOOKEEPER_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}zookeeper:3.9.6}
restart: always
hostname: zoo2
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
ZOO_TICK_TIME: 8000
ZOO_CFG_EXTRA: extendedTypesEnabled=true
ZOO_DATA_LOG_DIR: /data
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}zookeeper_zoo2_data:/data"
zoo3:
image: ${ZOOKEEPER_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}zookeeper:3.9.6}
restart: always
hostname: zoo3
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
ZOO_TICK_TIME: 8000
ZOO_CFG_EXTRA: extendedTypesEnabled=true
ZOO_DATA_LOG_DIR: /data
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}zookeeper_zoo3_data:/data"
aperturedb0:
cpus: ${ADB_CPUS:-0}
mem_limit: ${ADB_MEMORY_LIMIT:-0}
image: ${APERTUREDB_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/aperturedb:0.20.0-rc.1}
restart: always
depends_on:
- zoo1
- zoo2
- zoo3
environment:
ADB_STORAGE_TYPE: ${ADB_STORAGE_TYPE:?set ADB_STORAGE_TYPE (s3 or gs)}
ADB_STORAGE_BUCKET_NAME: ${ADB_STORAGE_BUCKET_NAME:?set ADB_STORAGE_BUCKET_NAME}
ADB_STORAGE_CREDENTIALS: ${ADB_STORAGE_CREDENTIALS:?set ADB_STORAGE_CREDENTIALS}
ADB_ZK_SERVERS: "zoo1:2181,zoo2:2181,zoo3:2181"
ADB_KVGD_DB_SIZE: ${ADB_KVGD_DB_SIZE:-204800}
ADB_DB_ROOT_PATH: "/aperturedb/db"
ADB_LOG_PATH: "/aperturedb/logs"
ADB_PORT: 55553
ADB_ENABLE_DEBUG: ${ADB_ENABLE_DEBUG:-0}
ADB_MAX_SIMULTANEOUS_CLIENTS: ${ADB_MAX_SIMULTANEOUS_CLIENTS:-52}
ADB_FORCE_SSL: false
ADB_TIMEOUT_RECEIVE: false
ADB_LOG_LEVEL: ${ADB_LOG_LEVEL:-1}
ADB_MASTER_KEY: ${ADB_MASTER_KEY:-admin}
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}aperturedb_0_logs:/aperturedb/logs"
promtail0:
profiles:
- telemetry
image: ${PROMTAIL_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/promtail:0.20.0-rc.1}
restart: always
environment:
POD_IP: aperturedb0
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}aperturedb_0_logs:/mnt/aperture"
aperturedb1:
cpus: ${ADB_CPUS:-0}
mem_limit: ${ADB_MEMORY_LIMIT:-0}
image: ${APERTUREDB_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/aperturedb:0.20.0-rc.1}
restart: always
depends_on:
- zoo1
- zoo2
- zoo3
environment:
ADB_STORAGE_TYPE: ${ADB_STORAGE_TYPE:?set ADB_STORAGE_TYPE (s3 or gs)}
ADB_STORAGE_BUCKET_NAME: ${ADB_STORAGE_BUCKET_NAME:?set ADB_STORAGE_BUCKET_NAME}
ADB_STORAGE_CREDENTIALS: ${ADB_STORAGE_CREDENTIALS:?set ADB_STORAGE_CREDENTIALS}
ADB_ZK_SERVERS: "zoo1:2181,zoo2:2181,zoo3:2181"
ADB_KVGD_DB_SIZE: ${ADB_KVGD_DB_SIZE:-204800}
ADB_DB_ROOT_PATH: "/aperturedb/db"
ADB_LOG_PATH: "/aperturedb/logs"
ADB_PORT: 55553
ADB_ENABLE_DEBUG: ${ADB_ENABLE_DEBUG:-0}
ADB_MAX_SIMULTANEOUS_CLIENTS: ${ADB_MAX_SIMULTANEOUS_CLIENTS:-52}
ADB_FORCE_SSL: false
ADB_TIMEOUT_RECEIVE: false
ADB_LOG_LEVEL: ${ADB_LOG_LEVEL:-1}
ADB_MASTER_KEY: ${ADB_MASTER_KEY:-admin}
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}aperturedb_1_logs:/aperturedb/logs"
promtail1:
profiles:
- telemetry
image: ${PROMTAIL_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/promtail:0.20.0-rc.1}
restart: always
environment:
POD_IP: aperturedb1
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}aperturedb_1_logs:/mnt/aperture"
checkpointer:
cpus: ${CHECKPOINTER_CPUS:-0}
mem_limit: ${CHECKPOINTER_MEMORY_LIMIT:-0}
image: ${CHECKPOINTER_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/checkpointer:0.20.0-rc.1}
restart: always
depends_on:
- zoo1
- zoo2
- zoo3
environment:
ADB_STORAGE_TYPE: ${ADB_STORAGE_TYPE:?set ADB_STORAGE_TYPE (s3 or gs)}
ADB_STORAGE_BUCKET_NAME: ${ADB_STORAGE_BUCKET_NAME:?set ADB_STORAGE_BUCKET_NAME}
ADB_STORAGE_CREDENTIALS: ${ADB_STORAGE_CREDENTIALS:?set ADB_STORAGE_CREDENTIALS}
ADB_ZK_SERVERS: "zoo1:2181,zoo2:2181,zoo3:2181"
ADB_KVGD_DB_SIZE: ${ADB_KVGD_DB_SIZE:-204800}
ADB_DB_ROOT_PATH: "/checkpointer/db"
ADB_LOG_PATH: "/checkpointer/logs"
ADB_LOG_LEVEL: ${CHECKPOINTER_LOG_LEVEL:-0}
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}checkpointer_checkpointer_logs:/checkpointer/logs"
loki:
profiles:
- telemetry
image: ${LOKI_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/loki:0.20.0-rc.1}
restart: always
user: 0:0
environment:
LOKI_RETENTION_PERIOD: ${LOKI_RETENTION_PERIOD:-672h}
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}loki:/loki"
prometheus:
profiles:
- telemetry
image: ${PROMETHEUS_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/prometheus:0.20.0-rc.1}
restart: always
user: 0:0
command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.path=/prometheus", "--storage.tsdb.retention.time=${PROMETHEUS_RETENTION_TIME:-28d}" ]
configs:
- source: monitoring_password
target: /etc/prometheus/auth/password
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}prometheus:/prometheus"
grafana:
profiles:
- telemetry
image: ${GRAFANA_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/grafana:0.20.0-rc.1}
restart: always
user: 0:0
environment:
GF_SERVER_ROOT_URL: ${GF_SERVER_ROOT_URL:-https://localhost:${HTTPS_PORT:-443}/grafana/}
GF_SECURITY_ADMIN_USER: ${GF_SECURITY_ADMIN_USER:-admin}
GF_SECURITY_ADMIN_PASSWORD: ${GF_SECURITY_ADMIN_PASSWORD:-admin}
GF_SERVER_SERVE_FROM_SUB_PATH: 'false'
volumes:
- "${DATA_DIR:+${DATA_DIR:-}/}grafana:/var/lib/grafana"
webui:
image: ${WEBUI_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/webui:0.20.0-rc.1}
restart: always
ca:
image: ${OPENSSL_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}alpine/openssl:3.5.9}
restart: on-failure
environment:
TLS_CERT_DIR: ${TLS_CERT_DIR:-}
TLS_CERT_FILENAME: ${TLS_CERT_FILENAME:-tls.crt}
TLS_KEY_FILENAME: ${TLS_KEY_FILENAME:-tls.key}
entrypoint: ["/bin/sh", "-ec"]
command:
- |
case "$$TLS_CERT_FILENAME" in
""|.|..|*[!a-zA-Z0-9._-]*)
echo "TLS_CERT_FILENAME must be a plain filename using letters, digits, dots, underscores or hyphens." >&2
exit 1 ;;
esac
case "$$TLS_KEY_FILENAME" in
""|.|..|*[!a-zA-Z0-9._-]*)
echo "TLS_KEY_FILENAME must be a plain filename using letters, digits, dots, underscores or hyphens." >&2
exit 1 ;;
esac
if [ "$$TLS_CERT_FILENAME" = "$$TLS_KEY_FILENAME" ]; then
echo "Certificate and private key filenames must differ." >&2
exit 1
fi
certificate="/cert/$$TLS_CERT_FILENAME"
private_key="/cert/$$TLS_KEY_FILENAME"
if [ -n "$$TLS_CERT_DIR" ]; then
case "$$TLS_CERT_DIR" in
/*) ;;
*) echo "TLS_CERT_DIR must be an absolute directory on the Docker host." >&2; exit 1 ;;
esac
if [ ! -s "$$certificate" ] || [ ! -s "$$private_key" ]; then
echo "TLS_CERT_DIR must contain both the supplied certificate and private key; no files will be generated." >&2
exit 1
fi
openssl rsa -in "$$private_key" -passin pass: -check -noout >/dev/null
certificate_modulus=$$(openssl x509 -in "$$certificate" -noout -modulus)
private_key_modulus=$$(openssl rsa -in "$$private_key" -passin pass: -noout -modulus)
if [ "$$certificate_modulus" != "$$private_key_modulus" ]; then
echo "The supplied certificate and RSA private key do not match." >&2
exit 1
fi
exit 0
fi
if [ -s "$$certificate" ] && [ -s "$$private_key" ]; then
exit 0
fi
if [ -e "$$certificate" ] || [ -e "$$private_key" ]; then
echo "Incomplete certificate pair in /cert; restore both files before starting." >&2
exit 1
fi
umask 077
openssl req -x509 -newkey rsa:4096 -days 3650 -nodes -keyout "$$private_key" -out "$$certificate" -subj "/C=US/O=ApertureData Inc./CN=localhost"
volumes:
- "${TLS_CERT_DIR:-certificate_volume}:/cert${TLS_CERT_DIR:+:ro}"
http-proxy:
image: ${HTTP_PROXY_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/http-proxy:0.20.0-rc.1}
restart: always
depends_on:
ca:
condition: service_completed_successfully
stop_grace_period: 310s
environment:
TLS_CERT_FILENAME: ${TLS_CERT_FILENAME:-tls.crt}
TLS_KEY_FILENAME: ${TLS_KEY_FILENAME:-tls.key}
ports:
- "${GATEWAY:-}:${HTTP_PORT:-80}:8081"
- "${GATEWAY:-}:${HTTPS_PORT:-443}:8443"
configs:
- source: http_config
target: /etc/aperturedb/http/config.json
volumes:
- "${TLS_CERT_DIR:-certificate_volume}:/etc/aperturedb/certificate:ro"
lenz:
cpus: ${LNZ_CPUS:-0}
mem_limit: ${LNZ_MEMORY_LIMIT:-0}
depends_on:
ca:
condition: service_completed_successfully
image: ${LENZ_IMAGE:-${IMAGE_REPOSITORY_PREFIX:-}aperturedata/lenz:0.20.0-rc.1}
ports:
- "${GATEWAY:-}:${ADB_TCP_PORT:-55555}:55551"
restart: always
environment:
LNZ_HEALTH_PORT: 58085
LNZ_TCP_PORT: 55551
LNZ_HTTP_PORT: 8080
LNZ_ADB_BACKENDS: '["aperturedb0:55553", "aperturedb1:55553"]'
LNZ_REPLICAS: 1
LNZ_ADB_MAX_CONCURRENCY: ${LNZ_ADB_MAX_CONCURRENCY:-48}
LNZ_FORCE_SSL: ${LNZ_FORCE_SSL:-false}
LNZ_CERTIFICATE_PATH: /etc/lenz/certificate/${TLS_CERT_FILENAME:-tls.crt}
LNZ_PRIVATE_KEY_PATH: /etc/lenz/certificate/${TLS_KEY_FILENAME:-tls.key}
LNZ_METRICS_PATH: /etc/lenz/metrics
LNZ_DB_PATH: /etc/lenz/db
configs:
- source: monitoring_password
target: /etc/lenz/metrics/password
- source: telemetry_db_password
target: /etc/lenz/db/password
volumes:
- "${TLS_CERT_DIR:-certificate_volume}:/etc/lenz/certificate:ro"
configs:
http_config:
content: |
{"tls":true,"https_port":${HTTPS_PORT:-443},"webui_host":"webui","grafana_host":"grafana","body_limit":${HTTP_BODY_LIMIT:-268435456},"timeout_seconds":${HTTP_TIMEOUT_SECONDS:-300}}
# Bearer password shared by Prometheus and Lenz for /api/servers and
# /api/metrics; set MONITORING_PASSWORD.
monitoring_password:
content: ${MONITORING_PASSWORD:-monitoring}
# Lenz collects metrics as the _telemetry database user, which authenticates
# with the master key; set ADB_MASTER_KEY.
telemetry_db_password:
content: ${ADB_MASTER_KEY:-admin}
volumes:
certificate_volume:
aperturedb_0_logs:
aperturedb_1_logs:
checkpointer_checkpointer_logs:
grafana:
loki:
prometheus:
zookeeper_zoo1_data:
zookeeper_zoo2_data:
zookeeper_zoo3_data:
docker compose -f oci://aperturedata/aperturedb-compose-distributed-cloud:0.20.0-rc.1 upUse the above command to pull and run the Compose file. Learn more.