first commit

This commit is contained in:
Sergey Antropoff
2026-10-09 07:08:09 +03:00
commit 4381350286
7 changed files with 973 additions and 0 deletions
+442
View File
@@ -0,0 +1,442 @@
name: nebula-stack
x-logging: &logging
driver: json-file
options:
max-size: "10m"
max-file: "3"
x-nebula: &nebula
restart: unless-stopped
cap_add:
- SYS_PTRACE
logging: *logging
x-es-env: &es-env
cluster.name: nebula-elasticsearch
discovery.seed_hosts: ${ES01_IP}:9300,${ES02_IP}:9300,${ES03_IP}:9300
cluster.initial_master_nodes: es01,es02,es03
bootstrap.memory_lock: "${ES_MEMORY_LOCK}"
network.host: "0.0.0.0"
xpack.security.enabled: "true"
xpack.security.http.ssl.enabled: "false"
xpack.security.transport.ssl.enabled: "true"
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-stack-ca.p12
xpack.security.transport.ssl.keystore.password: ${ES_CERT_PASSWORD}
xpack.security.transport.ssl.truststore.password: ${ES_CERT_PASSWORD}
ELASTIC_PASSWORD: ${ELASTIC_PASSWORD}
ES_JAVA_OPTS: ${ES_JAVA_OPTS}
TAKE_FILE_OWNERSHIP: "true"
cluster.routing.allocation.disk.threshold_enabled: "${ES_DISK_THRESHOLD}"
ingest.geoip.downloader.enabled: "false"
x-es-node: &es-node
image: docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION}
user: "0:0"
restart: unless-stopped
logging: *logging
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
depends_on:
es-certs:
condition: service_completed_successfully
healthcheck:
test:
- CMD-SHELL
- 'curl -fsS -u "elastic:$$ELASTIC_PASSWORD" http://127.0.0.1:9200/_cluster/health >/dev/null'
interval: 15s
timeout: 10s
retries: 20
start_period: 90s
services:
es-certs:
image: docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION}
user: "0:0"
restart: "no"
logging: *logging
environment:
ES_CERT_PASSWORD: ${ES_CERT_PASSWORD}
ES01_IP: ${ES01_IP}
ES02_IP: ${ES02_IP}
ES03_IP: ${ES03_IP}
entrypoint: ["bash", "-ec"]
command:
- |
if [ -s /certs/elastic-certificates.p12 ] && [ -s /certs/elastic-stack-ca.p12 ]; then
exit 0
fi
rm -f /certs/elastic-certificates.p12 /certs/elastic-stack-ca.p12
bin/elasticsearch-certutil ca \
--silent \
--out /certs/elastic-stack-ca.p12 \
--pass "$$ES_CERT_PASSWORD"
bin/elasticsearch-certutil cert \
--silent \
--ca /certs/elastic-stack-ca.p12 \
--ca-pass "$$ES_CERT_PASSWORD" \
--pass "$$ES_CERT_PASSWORD" \
--name nebula-es \
--dns es01,es02,es03 \
--ip "$$ES01_IP,$$ES02_IP,$$ES03_IP,127.0.0.1" \
--out /certs/elastic-certificates.p12
chown 1000:0 /certs/elastic-certificates.p12 /certs/elastic-stack-ca.p12
chmod 600 /certs/elastic-certificates.p12 /certs/elastic-stack-ca.p12
volumes:
- es_certs:/certs
networks:
- backend
es01:
<<: *es-node
hostname: es01
environment:
<<: *es-env
node.name: es01
network.publish_host: ${ES01_IP}
ports:
- "127.0.0.1:9200:9200"
volumes: &es-volumes
- esdata01:/usr/share/elasticsearch/data
- es_certs:/usr/share/elasticsearch/config/certs:ro
networks:
backend:
ipv4_address: ${ES01_IP}
es02:
<<: *es-node
hostname: es02
environment:
<<: *es-env
node.name: es02
network.publish_host: ${ES02_IP}
volumes:
- esdata02:/usr/share/elasticsearch/data
- es_certs:/usr/share/elasticsearch/config/certs:ro
networks:
backend:
ipv4_address: ${ES02_IP}
es03:
<<: *es-node
hostname: es03
environment:
<<: *es-env
node.name: es03
network.publish_host: ${ES03_IP}
volumes:
- esdata03:/usr/share/elasticsearch/data
- es_certs:/usr/share/elasticsearch/config/certs:ro
networks:
backend:
ipv4_address: ${ES03_IP}
metad0:
<<: *nebula
image: vesoft/nebula-metad:${NEBULA_VERSION}
hostname: metad0
environment:
USER: root
command: &meta-cmd
- --meta_server_addrs=${METAD0_IP}:9559,${METAD1_IP}:9559,${METAD2_IP}:9559
- --local_ip=${METAD0_IP}
- --ws_ip=${METAD0_IP}
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --logtostderr=true
- --redirect_stdout=false
healthcheck: &meta-health
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/${METAD0_IP}/9559'"]
interval: 10s
timeout: 5s
retries: 18
start_period: 20s
volumes:
- meta0:/data/meta
networks:
backend:
ipv4_address: ${METAD0_IP}
metad1:
<<: *nebula
image: vesoft/nebula-metad:${NEBULA_VERSION}
hostname: metad1
environment:
USER: root
command:
- --meta_server_addrs=${METAD0_IP}:9559,${METAD1_IP}:9559,${METAD2_IP}:9559
- --local_ip=${METAD1_IP}
- --ws_ip=${METAD1_IP}
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --logtostderr=true
- --redirect_stdout=false
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/${METAD1_IP}/9559'"]
interval: 10s
timeout: 5s
retries: 18
start_period: 20s
volumes:
- meta1:/data/meta
networks:
backend:
ipv4_address: ${METAD1_IP}
metad2:
<<: *nebula
image: vesoft/nebula-metad:${NEBULA_VERSION}
hostname: metad2
environment:
USER: root
command:
- --meta_server_addrs=${METAD0_IP}:9559,${METAD1_IP}:9559,${METAD2_IP}:9559
- --local_ip=${METAD2_IP}
- --ws_ip=${METAD2_IP}
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --logtostderr=true
- --redirect_stdout=false
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/${METAD2_IP}/9559'"]
interval: 10s
timeout: 5s
retries: 18
start_period: 20s
volumes:
- meta2:/data/meta
networks:
backend:
ipv4_address: ${METAD2_IP}
storaged0:
<<: *nebula
image: vesoft/nebula-storaged:${NEBULA_VERSION}
hostname: storaged0
environment:
USER: root
command: &storage-cmd
- --meta_server_addrs=${METAD0_IP}:9559,${METAD1_IP}:9559,${METAD2_IP}:9559
- --local_ip=${STORAGED0_IP}
- --ws_ip=${STORAGED0_IP}
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --logtostderr=true
- --redirect_stdout=false
depends_on: &meta-ready
metad0:
condition: service_healthy
metad1:
condition: service_healthy
metad2:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/${STORAGED0_IP}/9779'"]
interval: 10s
timeout: 5s
retries: 18
start_period: 20s
volumes:
- storage0:/data/storage
networks:
backend:
ipv4_address: ${STORAGED0_IP}
storaged1:
<<: *nebula
image: vesoft/nebula-storaged:${NEBULA_VERSION}
hostname: storaged1
environment:
USER: root
command:
- --meta_server_addrs=${METAD0_IP}:9559,${METAD1_IP}:9559,${METAD2_IP}:9559
- --local_ip=${STORAGED1_IP}
- --ws_ip=${STORAGED1_IP}
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --logtostderr=true
- --redirect_stdout=false
depends_on: *meta-ready
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/${STORAGED1_IP}/9779'"]
interval: 10s
timeout: 5s
retries: 18
start_period: 20s
volumes:
- storage1:/data/storage
networks:
backend:
ipv4_address: ${STORAGED1_IP}
storaged2:
<<: *nebula
image: vesoft/nebula-storaged:${NEBULA_VERSION}
hostname: storaged2
environment:
USER: root
command:
- --meta_server_addrs=${METAD0_IP}:9559,${METAD1_IP}:9559,${METAD2_IP}:9559
- --local_ip=${STORAGED2_IP}
- --ws_ip=${STORAGED2_IP}
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --logtostderr=true
- --redirect_stdout=false
depends_on: *meta-ready
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/${STORAGED2_IP}/9779'"]
interval: 10s
timeout: 5s
retries: 18
start_period: 20s
volumes:
- storage2:/data/storage
networks:
backend:
ipv4_address: ${STORAGED2_IP}
graphd:
<<: *nebula
image: vesoft/nebula-graphd:${NEBULA_VERSION}
hostname: graphd
environment:
USER: root
command:
- --meta_server_addrs=${METAD0_IP}:9559,${METAD1_IP}:9559,${METAD2_IP}:9559
- --local_ip=${GRAPHD_IP}
- --ws_ip=${GRAPHD_IP}
- --port=9669
- --ws_http_port=19669
- --logtostderr=true
- --redirect_stdout=false
depends_on: *meta-ready
ports:
- "127.0.0.1:9669:9669"
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/${GRAPHD_IP}/9669'"]
interval: 10s
timeout: 5s
retries: 18
start_period: 20s
networks:
backend:
ipv4_address: ${GRAPHD_IP}
storaged-listener:
image: vesoft/nebula-storaged:${NEBULA_VERSION}
hostname: storaged-listener
restart: unless-stopped
cap_add:
- SYS_PTRACE
logging: *logging
environment:
USER: root
entrypoint: ["bash", "-ec"]
command:
- |
mkdir -p /data/listener /logs
exec /usr/local/nebula/bin/nebula-storaged \
--daemonize=false \
--containerized=true \
--meta_server_addrs=${METAD0_IP}:9559,${METAD1_IP}:9559,${METAD2_IP}:9559 \
--local_ip=${LISTENER_IP} \
--ws_ip=${LISTENER_IP} \
--port=9789 \
--ws_http_port=19789 \
--heartbeat_interval_secs=10 \
--listener_path=/data/listener \
--data_path=/data \
--log_dir=/logs \
--logtostderr=true \
--redirect_stdout=false
depends_on: *meta-ready
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/${LISTENER_IP}/9789'"]
interval: 10s
timeout: 5s
retries: 18
start_period: 20s
volumes:
- listener0:/data
networks:
backend:
ipv4_address: ${LISTENER_IP}
studio:
image: vesoft/nebula-graph-studio:${STUDIO_VERSION}
hostname: studio
restart: unless-stopped
logging: *logging
depends_on:
- graphd
ports:
- "127.0.0.1:7001:7001"
networks:
- backend
console:
image: vesoft/nebula-console:${NEBULA_VERSION}
profiles: ["ops"]
entrypoint: ["nebula-console"]
command: ["-addr", "graphd", "-port", "9669", "-u", "root", "-p", "nebula"]
stdin_open: true
tty: true
networks:
- backend
ops:
image: vesoft/nebula-console:${NEBULA_VERSION}
profiles: ["ops"]
entrypoint: ["sh", "-c"]
environment:
ELASTIC_PASSWORD: ${ELASTIC_PASSWORD}
STORAGED0_IP: ${STORAGED0_IP}
STORAGED1_IP: ${STORAGED1_IP}
STORAGED2_IP: ${STORAGED2_IP}
ES01_IP: ${ES01_IP}
ES02_IP: ${ES02_IP}
ES03_IP: ${ES03_IP}
LISTENER_IP: ${LISTENER_IP}
OPS_COMMAND: verify
command:
- |
sed 's/\r$$//' /scripts/cluster.sh | sh -s "$${OPS_COMMAND:-verify}"
volumes:
- ./scripts/cluster.sh:/scripts/cluster.sh:ro
networks:
- backend
networks:
backend:
name: nebula-stack-net
driver: bridge
ipam:
config:
- subnet: ${DOCKER_SUBNET}
volumes:
es_certs:
esdata01:
esdata02:
esdata03:
meta0:
meta1:
meta2:
storage0:
storage1:
storage2:
listener0: