version: '3.9' # Note: # 1. seed node should always be the first node to start, and the last node to stop. # Otherwise, kv data will become inconsistent (node crashing is okay). # 2. Default stop timeout is 10s, however we need much longer for all the nodes to # leave the ring gracefully (transferring keys to successor). # 3. To validate, `make dev-validate` should return the same serials in-between start # and stop. Also, /_internal/stats should not have keys that are belonging to the # invalid owner. services: # simulate let's encrypt acme pebble: image: ghcr.io/letsencrypt/pebble:latest command: -config /pebble/config.json environment: - PEBBLE_VA_NOSLEEP=1 - PEBBLE_VA_ALWAYS_VALID=1 - PEBBLE_WFE_NONCEREJECT=0 volumes: - ./dev/pebble:/pebble:ro - ./certs:/certs:ro ports: - 14000:14000 # ACME port - 15000:15000 # Management port networks: - specter dns: image: specter-dev restart: unless-stopped stop_grace_period: 120s depends_on: - seed ports: - "11153:1153/tcp" - "11153:1153/udp" environment: - DOH=false networks: - specter command: --verbose dns --acme acme://admin@example.com@hostedacme.com --acme-ns ns.hostedacme.com/127.0.0.1 --listen :1153 --rpc tcp://seed:1280 seed: image: specter-dev restart: unless-stopped stop_grace_period: 120s depends_on: - pebble ports: - "1113:1113/udp" - "1113:1113/tcp" - "11113:1112/tcp" volumes: - ./certs:/certs:ro - seed_kv:/app/data environment: - INTERNAL_USER=test - INTERNAL_PASS=test - ACME_CA=https://pebble:14000/dir - DOH=false - KV_PROVIDER=sqlite networks: - specter command: --verbose server --data /app/data --cert /certs --listen :1113 --advertise seed:1113 --listen-http 1112 --apex dev.con.nect.sh --virtual 3 ${SKIP:---acme acme://admin@example.com@hostedacme.com} --listen-rpc tcp://:1280 srva: image: specter-dev restart: unless-stopped stop_grace_period: 120s depends_on: - seed ports: - "2113:1113/udp" - "2113:1113/tcp" - "12113:1112/tcp" volumes: - ./certs:/certs:ro - srva_kv:/app/data environment: - INTERNAL_USER=test - INTERNAL_PASS=test - ACME_CA=https://pebble:14000/dir - DOH=false - KV_PROVIDER=sqlite networks: - specter command: --verbose server --data /app/data --cert /certs --listen :1113 --advertise srva:1113 --listen-http 1112 --apex dev.con.nect.sh --virtual 3 ${SKIP:---acme acme://admin@example.com@hostedacme.com} --join seed:1113 srvb: image: specter-dev restart: unless-stopped stop_grace_period: 120s depends_on: - seed ports: - "3113:1113/udp" - "3113:1113/tcp" - "13113:1112/tcp" volumes: - ./certs:/certs:ro - srvb_kv:/app/data environment: - INTERNAL_USER=test - INTERNAL_PASS=test - ACME_CA=https://pebble:14000/dir - DOH=false - KV_PROVIDER=sqlite networks: - specter command: --verbose server --data /app/data --cert /certs --listen :1113 --advertise srvb:1113 --listen-http 1112 --apex dev.con.nect.sh --virtual 3 ${SKIP:---acme acme://admin@example.com@hostedacme.com} --join seed:1113 srvc: image: specter-dev restart: unless-stopped stop_grace_period: 120s depends_on: - seed ports: - "4113:1113/udp" - "4113:1113/tcp" - "14113:1112/tcp" volumes: - ./certs:/certs:ro - srvc_kv:/app/data environment: - INTERNAL_USER=test - INTERNAL_PASS=test - ACME_CA=https://pebble:14000/dir - DOH=false - KV_PROVIDER=sqlite networks: - specter command: --verbose server --data /app/data --cert /certs --listen :1113 --advertise srvc:1113 --listen-http 1112 --apex dev.con.nect.sh --virtual 3 ${SKIP:---acme acme://admin@example.com@hostedacme.com} --join seed:1113 srvd: image: specter-dev restart: unless-stopped stop_grace_period: 120s depends_on: - seed ports: - "5113:1113/udp" - "5113:1113/tcp" - "15113:1112/tcp" volumes: - ./certs:/certs:ro - srvd_kv:/app/data environment: - INTERNAL_USER=test - INTERNAL_PASS=test - ACME_CA=https://pebble:14000/dir - DOH=false - KV_PROVIDER=sqlite networks: - specter command: --verbose server --data /app/data --cert /certs --listen :1113 --advertise srvd:1113 --listen-http 1112 --apex dev.con.nect.sh --virtual 3 ${SKIP:---acme acme://admin@example.com@hostedacme.com} --join seed:1113 volumes: seed_kv: srva_kv: srvb_kv: srvc_kv: srvd_kv: networks: specter: