From 91f4e95f655265aa5c0a613fa0147dd8cf32935b Mon Sep 17 00:00:00 2001 From: Kirill Shklyaev Date: Mon, 13 Nov 2023 21:50:56 +0300 Subject: [PATCH 1/3] Compatibility support, improvements and fixes --- .env | 2 +- Dockerfile-generateconfig | 23 +++-- Makefile | 50 ++--------- README.md | 7 +- docker-compose.yml | 84 +++++++++++-------- {etc => docker-generateconfig/etc}/common.yml | 0 .../etc}/consensusnode.yml | 0 .../etc}/coordinator.yml | 0 .../etc}/filenode.yml | 0 {etc => docker-generateconfig/etc}/node-1.yml | 0 {etc => docker-generateconfig/etc}/node-2.yml | 0 {etc => docker-generateconfig/etc}/node-3.yml | 0 .../generate_config.sh | 13 ++- docker-generateconfig/processing.sh | 48 +++++++++++ 14 files changed, 141 insertions(+), 86 deletions(-) rename {etc => docker-generateconfig/etc}/common.yml (100%) rename {etc => docker-generateconfig/etc}/consensusnode.yml (100%) rename {etc => docker-generateconfig/etc}/coordinator.yml (100%) rename {etc => docker-generateconfig/etc}/filenode.yml (100%) rename {etc => docker-generateconfig/etc}/node-1.yml (100%) rename {etc => docker-generateconfig/etc}/node-2.yml (100%) rename {etc => docker-generateconfig/etc}/node-3.yml (100%) rename gen.sh => docker-generateconfig/generate_config.sh (79%) create mode 100755 docker-generateconfig/processing.sh diff --git a/.env b/.env index 3cbbf92..fc2064c 100644 --- a/.env +++ b/.env @@ -48,4 +48,4 @@ MONGO_2_PORT=27002 MONGO_3_PORT=27003 MONGO_CONNECT=mongodb://mongo-1:${MONGO_1_PORT},mongo-2:${MONGO_2_PORT},mongo-3:${MONGO_3_PORT} REDIS_PORT=6379 -REDIS_URL=redis://redis:${REDIS_PORT}?dial_timeout=3&read_timeout=6s +REDIS_URL="redis://redis:${REDIS_PORT}?dial_timeout=3&read_timeout=6s" diff --git a/Dockerfile-generateconfig b/Dockerfile-generateconfig index 4b0f0d7..560c3a5 100644 --- a/Dockerfile-generateconfig +++ b/Dockerfile-generateconfig @@ -1,13 +1,18 @@ -FROM golang:1.19 +FROM golang:1.19 as generator +RUN wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && \ + chmod +x /usr/bin/yq && \ + go install github.com/anyproto/any-sync-tools/anyconf@latest -# git {{ -RUN apt-get update && apt-get install -y ca-certificates git-core -# }} +WORKDIR /opt/generateconfig +COPY --chmod=777 docker-generateconfig/generate_config.sh .env . +RUN ./generate_config.sh -RUN wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && chmod +x /usr/bin/yq +FROM alpine:3.18.4 +RUN apk add --no-cache bash perl +WORKDIR /opt/processing +COPY docker-generateconfig/etc/ etc/ +COPY --chmod=777 docker-generateconfig/processing.sh . +COPY --from=generator /opt/generateconfig/ generateconfig/ -WORKDIR /generateconfig -COPY .env /.env -COPY gen.sh /gen.sh +CMD ./processing.sh -RUN go install github.com/anyproto/any-sync-tools/anyconf@latest diff --git a/Makefile b/Makefile index 159634b..daaa49f 100644 --- a/Makefile +++ b/Makefile @@ -1,46 +1,15 @@ .DEFAULT_GOAL := start -SHELL := /bin/bash include .env -generate_etc: - install -d \ - tmp/etc/any-sync-node-{1..3}/ \ - tmp/etc/any-sync-filenode/ \ - tmp/etc/any-sync-coordinator/ \ - tmp/etc/any-sync-consensusnode/ - docker compose --file docker-compose-generateconfig.yml up --build --remove-orphans --detach - sleep 2 - sed 's|^| |; 1s|^|network:\n|' tmp/generateconfig/nodes.yml > tmp/etc/network.yml - cat tmp/etc/network.yml etc/common.yml tmp/generateconfig/account0.yml etc/node-1.yml > tmp/etc/any-sync-node-1/config.yml - cat tmp/etc/network.yml etc/common.yml tmp/generateconfig/account1.yml etc/node-2.yml > tmp/etc/any-sync-node-2/config.yml - cat tmp/etc/network.yml etc/common.yml tmp/generateconfig/account2.yml etc/node-3.yml > tmp/etc/any-sync-node-3/config.yml - cat tmp/etc/network.yml etc/common.yml tmp/generateconfig/account3.yml etc/coordinator.yml > tmp/etc/any-sync-coordinator/config.yml - cat tmp/etc/network.yml etc/common.yml tmp/generateconfig/account4.yml etc/filenode.yml > tmp/etc/any-sync-filenode/config.yml - cat tmp/etc/network.yml etc/common.yml tmp/generateconfig/account5.yml etc/consensusnode.yml > tmp/etc/any-sync-consensusnode/config.yml - cp tmp/generateconfig/nodes.yml tmp/etc/any-sync-coordinator/network.yml - perl -i -pe's|%ANY_SYNC_NODE_1_ADDRESSES%|${ANY_SYNC_NODE_1_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_NODE_2_ADDRESSES%|${ANY_SYNC_NODE_2_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_NODE_3_ADDRESSES%|${ANY_SYNC_NODE_3_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_COORDINATOR_ADDRESSES%|${ANY_SYNC_COORDINATOR_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_FILENODE_ADDRESSES%|${ANY_SYNC_FILENODE_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_CONSENSUSNODE_ADDRESSES%|${ANY_SYNC_CONSENSUSNODE_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_NODE_1_QUIC_ADDRESSES%|${ANY_SYNC_NODE_1_QUIC_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_NODE_2_QUIC_ADDRESSES%|${ANY_SYNC_NODE_2_QUIC_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_NODE_3_QUIC_ADDRESSES%|${ANY_SYNC_NODE_3_QUIC_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_COORDINATOR_QUIC_ADDRESSES%|${ANY_SYNC_COORDINATOR_QUIC_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_FILENODE_QUIC_ADDRESSES%|${ANY_SYNC_FILENODE_QUIC_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%ANY_SYNC_CONSENSUSNODE_QUIC_ADDRESSES%|${ANY_SYNC_CONSENSUSNODE_QUIC_ADDRESSES}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%MONGO_CONNECT%|${MONGO_CONNECT}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%REDIS_URL%|${REDIS_URL}|g' tmp/etc/network.yml tmp/etc/*/*.yml - perl -i -pe's|%AWS_PORT%|${AWS_PORT}|g' tmp/etc/network.yml tmp/etc/*/*.yml - docker compose --file docker-compose-generateconfig.yml stop +generate_config: + docker build -t generateconfig -f Dockerfile-generateconfig . + docker run --rm -v ${CURDIR}/config:/opt/processing/config --name any-sync-generator generateconfig -start: generate_etc - docker compose up --force-recreate --build --remove-orphans --detach --pull always +start: generate_config + docker compose up -d stop: docker compose stop - docker compose --file docker-compose-generateconfig.yml stop clean: docker system prune --all @@ -50,15 +19,14 @@ pull: down: docker compose down - docker compose --file docker-compose-generateconfig.yml down # build with "plain" log for debug build: docker compose build --no-cache --progress plain -restart: stop start -update: stop pull start -upgrade: stop clean start +restart: down start +update: down pull start +upgrade: down clean start cleanTmp: - rm -rf tmp/ + rm -rf config/ diff --git a/README.md b/README.md index 76f4789..22f08c7 100644 --- a/README.md +++ b/README.md @@ -37,13 +37,18 @@ Self-host for any-sync, designed for review and testing purposes. docker-compose logs -f any-sync-filenode docker-compose logs -f ``` -* attach to vm: +* attach to container: ``` docker compose exec mongo-1 bash docker compose exec any-sync-node-1 bash docker compose exec any-sync-coordinator bash ``` +* restart certain container: + ``` + docker compose restart any-sync-node-1 + ``` + * get current network config ``` docker compose exec mongo-1 mongosh coordinator diff --git a/docker-compose.yml b/docker-compose.yml index 4f28984..13a49a5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,69 +1,78 @@ version: "3.9" + services: mongo-1: - image: mongo + image: mongo:7.0.2 command: --replSet rs0 --port ${MONGO_1_PORT} ports: - "${MONGO_1_PORT}:${MONGO_1_PORT}" volumes: - - ./tmp/mongo-1/:/data/db + - ./data/mongo-1/:/data/db healthcheck: test: test $$(echo "rs.initiate({_id:'rs0',members:[{_id:0,host:\"mongo-1:${MONGO_1_PORT}\"},{_id:1,host:\"mongo-2:${MONGO_2_PORT}\"},{_id:2,host:\"mongo-3:${MONGO_3_PORT}\"}]}).ok || rs.status().ok" | mongosh --port ${MONGO_1_PORT} --quiet) -eq 1 interval: 10s start_period: 30s + mongo-2: - image: mongo + image: mongo:7.0.2 command: --replSet rs0 --port ${MONGO_2_PORT} ports: - "${MONGO_2_PORT}:${MONGO_2_PORT}" volumes: - - ./tmp/mongo-2/:/data/db + - ./data/mongo-2/:/data/db + mongo-3: - image: mongo + image: mongo:7.0.2 command: --replSet rs0 --port ${MONGO_3_PORT} ports: - "${MONGO_3_PORT}:${MONGO_3_PORT}" volumes: - - ./tmp/mongo-3/:/data/db + - ./data/mongo-3/:/data/db + redis: container_name: redis - image: redis/redis-stack-server:latest + image: redis/redis-stack-server:7.2.0-v6 restart: always command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy noeviction --protected-mode no --loadmodule /opt/redis-stack/lib/redisbloom.so ports: - "${REDIS_PORT}:${REDIS_PORT}" volumes: - - ./tmp/redis/:/data/ + - ./data/redis/:/data/ + s3-emulator: - image: stanislavt/s3-emulator + image: stanislavt/s3-emulator:0.0.1 ports: - - "${AWS_PORT}:${AWS_PORT}" + - "${AWS_PORT}:4569" volumes: - - ./tmp/s3_root:/s3_root + - ./data/s3_root:/s3_root + any-sync-coordinator_bootstrap: - image: "ghcr.io/anyproto/any-sync-coordinator:${ANY_SYNC_COORDINATOR_VERSION}" - depends_on: [mongo-1] - restart: "no" - volumes: - - ./tmp/etc/any-sync-coordinator/:/etc/any-sync-coordinator/ - command: bash -c "sleep 10; /bin/any-sync-confapply -c /etc/any-sync-coordinator/config.yml -n /etc/any-sync-coordinator/network.yml -e" - any-sync-coordinator: image: "ghcr.io/anyproto/any-sync-coordinator:${ANY_SYNC_COORDINATOR_VERSION}" depends_on: - mongo-1 + volumes: + - ./config/any-sync-coordinator/:/etc/any-sync-coordinator/ + restart: no + command: bash -c "sleep 10; /bin/any-sync-confapply -c /etc/any-sync-coordinator/config.yml -n /etc/any-sync-coordinator/network.yml -e" + + any-sync-coordinator: + image: "ghcr.io/anyproto/any-sync-coordinator:${ANY_SYNC_COORDINATOR_VERSION}" + depends_on: - any-sync-coordinator_bootstrap ports: - "${ANY_SYNC_COORDINATOR_PORT}:${ANY_SYNC_COORDINATOR_PORT}" - "${ANY_SYNC_COORDINATOR_QUIC_PORT}:${ANY_SYNC_COORDINATOR_QUIC_PORT}" - 8005:8000 volumes: - - ./tmp/etc/any-sync-coordinator/:/etc/any-sync-coordinator/ - - ./tmp/networkStore/any-sync-coordinator/:/networkStore/ + - ./config/any-sync-coordinator/:/etc/any-sync-coordinator/ + - ./data/networkStore/any-sync-coordinator/:/networkStore/ deploy: resources: limits: memory: 500M + restart: on-failure command: bash -c "sleep 10; /bin/any-sync-coordinator -c /etc/any-sync-coordinator/config.yml" + any-sync-filenode: image: "ghcr.io/anyproto/any-sync-filenode:${ANY_SYNC_FILENODE_VERSION}" depends_on: @@ -75,14 +84,16 @@ services: - "${ANY_SYNC_FILENODE_QUIC_PORT}:${ANY_SYNC_FILENODE_QUIC_PORT}" - 8004:8000 volumes: - - ./tmp/etc/any-sync-filenode/:/etc/any-sync-filenode/ + - ./config/any-sync-filenode/:/etc/any-sync-filenode/ - ./.aws:/root/.aws:ro - - ./tmp/networkStore/any-sync-filenode/:/networkStore/ + - ./data/networkStore/any-sync-filenode/:/networkStore/ deploy: resources: limits: memory: 500M + restart: on-failure command: bash -c "sleep 15; /bin/any-sync-filenode -c /etc/any-sync-filenode/config.yml" + any-sync-node-1: image: "ghcr.io/anyproto/any-sync-node:${ANY_SYNC_NODE_VERSION}" depends_on: @@ -93,14 +104,16 @@ services: - 8081:8080 - 8001:8000 volumes: - - ./tmp/etc/any-sync-node-1/:/etc/any-sync-node/ - - ./tmp/storage/any-sync-node-1/:/storage/ - - ./tmp/networkStore/any-sync-node-1/:/networkStore/ + - ./config/any-sync-node-1/:/etc/any-sync-node/ + - ./data/storage/any-sync-node-1/:/storage/ + - ./data/networkStore/any-sync-node-1/:/networkStore/ deploy: resources: limits: memory: 500M + restart: on-failure command: bash -c "sleep 15; /bin/any-sync-node -c /etc/any-sync-node/config.yml" + any-sync-node-2: image: "ghcr.io/anyproto/any-sync-node:${ANY_SYNC_NODE_VERSION}" depends_on: @@ -111,14 +124,16 @@ services: - 8082:8080 - 8002:8000 volumes: - - ./tmp/etc/any-sync-node-2/:/etc/any-sync-node/ - - ./tmp/storage/any-sync-node-2/:/storage/ - - ./tmp/networkStore/any-sync-node-2/:/networkStore/ + - ./config/any-sync-node-2/:/etc/any-sync-node/ + - ./data/storage/any-sync-node-2/:/storage/ + - ./data/networkStore/any-sync-node-2/:/networkStore/ deploy: resources: limits: memory: 500M + restart: on-failure command: bash -c "sleep 15; /bin/any-sync-node -c /etc/any-sync-node/config.yml" + any-sync-node-3: image: "ghcr.io/anyproto/any-sync-node:${ANY_SYNC_NODE_VERSION}" depends_on: @@ -129,14 +144,16 @@ services: - 8083:8080 - 8003:8000 volumes: - - ./tmp/etc/any-sync-node-3/:/etc/any-sync-node/ - - ./tmp/storage/any-sync-node-3/:/storage/ - - ./tmp/networkStore/any-sync-node-3/:/networkStore/ + - ./config/any-sync-node-3/:/etc/any-sync-node/ + - ./data/storage/any-sync-node-3/:/storage/ + - ./data/networkStore/any-sync-node-3/:/networkStore/ deploy: resources: limits: memory: 500M + restart: on-failure command: bash -c "sleep 15; /bin/any-sync-node -c /etc/any-sync-node/config.yml" + any-sync-consensusnode: image: "ghcr.io/anyproto/any-sync-consensusnode:${ANY_SYNC_CONSENSUSNODE_VERSION}" depends_on: @@ -146,10 +163,11 @@ services: - "${ANY_SYNC_CONSENSUSNODE_QUIC_PORT}:${ANY_SYNC_CONSENSUSNODE_QUIC_PORT}" - 8006:8000 volumes: - - ./tmp/etc/any-sync-consensusnode/:/etc/any-sync-consensusnode/ - - ./tmp/networkStore/any-sync-consensusnode/:/networkStore/ + - ./config/any-sync-consensusnode/:/etc/any-sync-consensusnode/ + - ./data/networkStore/any-sync-consensusnode/:/networkStore/ deploy: resources: limits: memory: 500M + restart: on-failure command: bash -c "sleep 15; /bin/any-sync-consensusnode -c /etc/any-sync-consensusnode/config.yml" diff --git a/etc/common.yml b/docker-generateconfig/etc/common.yml similarity index 100% rename from etc/common.yml rename to docker-generateconfig/etc/common.yml diff --git a/etc/consensusnode.yml b/docker-generateconfig/etc/consensusnode.yml similarity index 100% rename from etc/consensusnode.yml rename to docker-generateconfig/etc/consensusnode.yml diff --git a/etc/coordinator.yml b/docker-generateconfig/etc/coordinator.yml similarity index 100% rename from etc/coordinator.yml rename to docker-generateconfig/etc/coordinator.yml diff --git a/etc/filenode.yml b/docker-generateconfig/etc/filenode.yml similarity index 100% rename from etc/filenode.yml rename to docker-generateconfig/etc/filenode.yml diff --git a/etc/node-1.yml b/docker-generateconfig/etc/node-1.yml similarity index 100% rename from etc/node-1.yml rename to docker-generateconfig/etc/node-1.yml diff --git a/etc/node-2.yml b/docker-generateconfig/etc/node-2.yml similarity index 100% rename from etc/node-2.yml rename to docker-generateconfig/etc/node-2.yml diff --git a/etc/node-3.yml b/docker-generateconfig/etc/node-3.yml similarity index 100% rename from etc/node-3.yml rename to docker-generateconfig/etc/node-3.yml diff --git a/gen.sh b/docker-generateconfig/generate_config.sh similarity index 79% rename from gen.sh rename to docker-generateconfig/generate_config.sh index 0a00adc..a3ebfa4 100755 --- a/gen.sh +++ b/docker-generateconfig/generate_config.sh @@ -1,17 +1,24 @@ #!/bin/bash -source /.env +source .env # generate networkId if ! [[ -s .networkId ]]; then anyconf create-network + echo "Create network" cat nodes.yml | grep '^networkId:' | awk '{print $NF}' > .networkId cat account.yml | yq '.account.signingKey' > .networkSigningKey + + if [ $? -ne 0 ]; then + echo "Failed network creations!" + exit 1 + fi fi NETWORK_ID=$( cat .networkId) NETWORK_SIGNING_KEY=$( cat .networkSigningKey ) if ! [[ -s account0.yml ]]; then + echo "Generate nodes and accounts" anyconf generate-nodes \ --t tree \ --t tree \ @@ -26,6 +33,10 @@ if ! [[ -s account0.yml ]]; then --addresses ${ANY_SYNC_FILENODE_ADDRESSES} \ --addresses ${ANY_SYNC_CONSENSUSNODE_ADDRESSES} \ + if [ $? -ne 0 ]; then + echo "Failed to generate nodes and accounts!" + exit 1 + fi fi yq --indent 4 --inplace ".networkId |= \"${NETWORK_ID}\"" nodes.yml diff --git a/docker-generateconfig/processing.sh b/docker-generateconfig/processing.sh new file mode 100755 index 0000000..ef86db5 --- /dev/null +++ b/docker-generateconfig/processing.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +source generateconfig/.env + +# Set file paths +DEST_PATH="config" +NETWORK_FILE="${DEST_PATH}/network.yml" + +# Create directories for all node +for i in {1..3}; do + mkdir -p "${DEST_PATH}/any-sync-node-${i}" +done + +# Create directories for other node types +for node_type in filenode coordinator consensusnode; do + mkdir -p "${DEST_PATH}/any-sync-${node_type}" +done + +# Generate network file +sed 's|^| |; 1s|^|network:\n|' "generateconfig/nodes.yml" > "${NETWORK_FILE}" + +# Generate config files for 3 nodes +for i in {0..2}; do + NODE_FILE="${DEST_PATH}/any-sync-node-$((i+1))/config.yml" + cat "${NETWORK_FILE}" etc/common.yml generateconfig/account${i}.yml etc/node-$((i+1)).yml > "${NODE_FILE}" +done + +# Generate config files for coordinator, filenode, consensusnode +cat "${NETWORK_FILE}" etc/common.yml generateconfig/account3.yml etc/coordinator.yml > ${DEST_PATH}/any-sync-coordinator/config.yml +cat "${NETWORK_FILE}" etc/common.yml generateconfig/account4.yml etc/filenode.yml > ${DEST_PATH}/any-sync-filenode/config.yml +cat "${NETWORK_FILE}" etc/common.yml generateconfig/account5.yml etc/consensusnode.yml > ${DEST_PATH}/any-sync-consensusnode/config.yml + +# Copy network file to coordinator directory +cp "generateconfig/nodes.yml" "${DEST_PATH}/any-sync-coordinator/network.yml" + +# Replace placeholders in config files +for node_type in node_1 node_2 node_3 coordinator filenode consensusnode; do + ADDRESSES_VAR="ANY_SYNC_${node_type^^}_ADDRESSES" + QUIC_ADDRESSES_VAR="ANY_SYNC_${node_type^^}_QUIC_ADDRESSES" + perl -i -pe "s|%${ADDRESSES_VAR}%|${!ADDRESSES_VAR}|g" "${NETWORK_FILE}" "${DEST_PATH}/"/*/*.yml + perl -i -pe "s|%${QUIC_ADDRESSES_VAR}%|${!QUIC_ADDRESSES_VAR}|g" "${NETWORK_FILE}" "${DEST_PATH}/"/*/*.yml +done + +# Replace other placeholders +PLACEHOLDERS=( "MONGO_CONNECT" "REDIS_URL" "AWS_PORT" ) +for placeholder in "${PLACEHOLDERS[@]}"; do + perl -i -pe "s|%${placeholder}%|${!placeholder}|g" "${NETWORK_FILE}" "${DEST_PATH}/"/*/*.yml +done From 7e307b1bd32421d874a378c0e1f72816ffb2ccdd Mon Sep 17 00:00:00 2001 From: Kirill Shklyaev Date: Tue, 14 Nov 2023 19:10:03 +0300 Subject: [PATCH 2/3] added versions to env, fixed variable names in script, fixes in Makefile --- .env | 4 +++ Dockerfile-generateconfig | 2 +- Makefile | 7 ++-- README.md | 6 ++-- docker-compose.yml | 52 ++++++++++++++--------------- docker-generateconfig/processing.sh | 36 ++++++++++---------- 6 files changed, 56 insertions(+), 51 deletions(-) diff --git a/.env b/.env index fc2064c..c59a188 100644 --- a/.env +++ b/.env @@ -7,6 +7,10 @@ ANY_SYNC_FILENODE_VERSION=latest ANY_SYNC_COORDINATOR_VERSION=latest ANY_SYNC_CONSENSUSNODE_VERSION=latest +MONGO_VERSION=7.0.2 +REDIS_VERSION=7.2.0-v6 +S3_EMULATOR_VERSION=0.0.1 + ANY_SYNC_NODE_1_HOST=any-sync-node-1 ANY_SYNC_NODE_1_PORT=1001 ANY_SYNC_NODE_1_ADDRESSES=${ANY_SYNC_NODE_1_HOST}:${ANY_SYNC_NODE_1_PORT} diff --git a/Dockerfile-generateconfig b/Dockerfile-generateconfig index 560c3a5..9f7f3b7 100644 --- a/Dockerfile-generateconfig +++ b/Dockerfile-generateconfig @@ -10,7 +10,7 @@ RUN ./generate_config.sh FROM alpine:3.18.4 RUN apk add --no-cache bash perl WORKDIR /opt/processing -COPY docker-generateconfig/etc/ etc/ +COPY docker-generateconfig/etc/ tmp-etc/ COPY --chmod=777 docker-generateconfig/processing.sh . COPY --from=generator /opt/generateconfig/ generateconfig/ diff --git a/Makefile b/Makefile index daaa49f..1e7bb52 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ include .env generate_config: docker build -t generateconfig -f Dockerfile-generateconfig . - docker run --rm -v ${CURDIR}/config:/opt/processing/config --name any-sync-generator generateconfig + docker run --rm -v ${CURDIR}/etc:/opt/processing/etc --name any-sync-generator generateconfig start: generate_config docker compose up -d @@ -28,5 +28,6 @@ restart: down start update: down pull start upgrade: down clean start -cleanTmp: - rm -rf config/ +cleanEtcStorage: + rm -rf etc/ + rm -rf storage/ diff --git a/README.md b/README.md index 22f08c7..80c8a7e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Self-host for any-sync, designed for review and testing purposes. * install docker and docker-compose https://docs.docker.com/compose/install/linux/ ## Usage -* start stand: +* start stand - at the first run the directories `etc/` of configuration files and `storage/` for data storage will be generated: ``` make start ``` @@ -27,9 +27,9 @@ Self-host for any-sync, designed for review and testing purposes. ``` make clean ``` -* clean tmp files - deleting data for redis, mongo, s3, any-sync-*: +* clean config and storage files - deleting data for redis, mongo, s3, any-sync-*: ``` - make cleanTmp + make cleanEtcStorage ``` * show logs: ``` diff --git a/docker-compose.yml b/docker-compose.yml index 13a49a5..297d6de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,56 +2,56 @@ version: "3.9" services: mongo-1: - image: mongo:7.0.2 + image: "mongo:${MONGO_VERSION}" command: --replSet rs0 --port ${MONGO_1_PORT} ports: - "${MONGO_1_PORT}:${MONGO_1_PORT}" volumes: - - ./data/mongo-1/:/data/db + - ./storage/mongo-1/:/data/db healthcheck: test: test $$(echo "rs.initiate({_id:'rs0',members:[{_id:0,host:\"mongo-1:${MONGO_1_PORT}\"},{_id:1,host:\"mongo-2:${MONGO_2_PORT}\"},{_id:2,host:\"mongo-3:${MONGO_3_PORT}\"}]}).ok || rs.status().ok" | mongosh --port ${MONGO_1_PORT} --quiet) -eq 1 interval: 10s start_period: 30s mongo-2: - image: mongo:7.0.2 + image: "mongo:${MONGO_VERSION}" command: --replSet rs0 --port ${MONGO_2_PORT} ports: - "${MONGO_2_PORT}:${MONGO_2_PORT}" volumes: - - ./data/mongo-2/:/data/db + - ./storage/mongo-2/:/data/db mongo-3: - image: mongo:7.0.2 + image: "mongo:${MONGO_VERSION}" command: --replSet rs0 --port ${MONGO_3_PORT} ports: - "${MONGO_3_PORT}:${MONGO_3_PORT}" volumes: - - ./data/mongo-3/:/data/db + - ./storage/mongo-3/:/data/db redis: container_name: redis - image: redis/redis-stack-server:7.2.0-v6 + image: "redis/redis-stack-server:${REDIS_VERSION}" restart: always command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy noeviction --protected-mode no --loadmodule /opt/redis-stack/lib/redisbloom.so ports: - "${REDIS_PORT}:${REDIS_PORT}" volumes: - - ./data/redis/:/data/ + - ./storage/redis/:/data/ s3-emulator: - image: stanislavt/s3-emulator:0.0.1 + image: "stanislavt/s3-emulator:${S3_EMULATOR_VERSION}" ports: - "${AWS_PORT}:4569" volumes: - - ./data/s3_root:/s3_root + - ./storage/s3_root:/s3_root any-sync-coordinator_bootstrap: image: "ghcr.io/anyproto/any-sync-coordinator:${ANY_SYNC_COORDINATOR_VERSION}" depends_on: - mongo-1 volumes: - - ./config/any-sync-coordinator/:/etc/any-sync-coordinator/ + - ./etc/any-sync-coordinator/:/etc/any-sync-coordinator/ restart: no command: bash -c "sleep 10; /bin/any-sync-confapply -c /etc/any-sync-coordinator/config.yml -n /etc/any-sync-coordinator/network.yml -e" @@ -64,8 +64,8 @@ services: - "${ANY_SYNC_COORDINATOR_QUIC_PORT}:${ANY_SYNC_COORDINATOR_QUIC_PORT}" - 8005:8000 volumes: - - ./config/any-sync-coordinator/:/etc/any-sync-coordinator/ - - ./data/networkStore/any-sync-coordinator/:/networkStore/ + - ./etc/any-sync-coordinator/:/etc/any-sync-coordinator/ + - ./storage/networkStore/any-sync-coordinator/:/networkStore/ deploy: resources: limits: @@ -84,9 +84,9 @@ services: - "${ANY_SYNC_FILENODE_QUIC_PORT}:${ANY_SYNC_FILENODE_QUIC_PORT}" - 8004:8000 volumes: - - ./config/any-sync-filenode/:/etc/any-sync-filenode/ + - ./etc/any-sync-filenode/:/etc/any-sync-filenode/ - ./.aws:/root/.aws:ro - - ./data/networkStore/any-sync-filenode/:/networkStore/ + - ./storage/networkStore/any-sync-filenode/:/networkStore/ deploy: resources: limits: @@ -104,9 +104,9 @@ services: - 8081:8080 - 8001:8000 volumes: - - ./config/any-sync-node-1/:/etc/any-sync-node/ - - ./data/storage/any-sync-node-1/:/storage/ - - ./data/networkStore/any-sync-node-1/:/networkStore/ + - ./etc/any-sync-node-1/:/etc/any-sync-node/ + - ./storage/any-sync-node-1/:/storage/ + - ./storage/networkStore/any-sync-node-1/:/networkStore/ deploy: resources: limits: @@ -124,9 +124,9 @@ services: - 8082:8080 - 8002:8000 volumes: - - ./config/any-sync-node-2/:/etc/any-sync-node/ - - ./data/storage/any-sync-node-2/:/storage/ - - ./data/networkStore/any-sync-node-2/:/networkStore/ + - ./etc/any-sync-node-2/:/etc/any-sync-node/ + - ./storage/any-sync-node-2/:/storage/ + - ./storage/networkStore/any-sync-node-2/:/networkStore/ deploy: resources: limits: @@ -144,9 +144,9 @@ services: - 8083:8080 - 8003:8000 volumes: - - ./config/any-sync-node-3/:/etc/any-sync-node/ - - ./data/storage/any-sync-node-3/:/storage/ - - ./data/networkStore/any-sync-node-3/:/networkStore/ + - ./etc/any-sync-node-3/:/etc/any-sync-node/ + - ./storage/any-sync-node-3/:/storage/ + - ./storage/networkStore/any-sync-node-3/:/networkStore/ deploy: resources: limits: @@ -163,8 +163,8 @@ services: - "${ANY_SYNC_CONSENSUSNODE_QUIC_PORT}:${ANY_SYNC_CONSENSUSNODE_QUIC_PORT}" - 8006:8000 volumes: - - ./config/any-sync-consensusnode/:/etc/any-sync-consensusnode/ - - ./data/networkStore/any-sync-consensusnode/:/networkStore/ + - ./etc/any-sync-consensusnode/:/etc/any-sync-consensusnode/ + - ./storage/networkStore/any-sync-consensusnode/:/networkStore/ deploy: resources: limits: diff --git a/docker-generateconfig/processing.sh b/docker-generateconfig/processing.sh index ef86db5..1e0dd63 100755 --- a/docker-generateconfig/processing.sh +++ b/docker-generateconfig/processing.sh @@ -3,46 +3,46 @@ source generateconfig/.env # Set file paths -DEST_PATH="config" -NETWORK_FILE="${DEST_PATH}/network.yml" +dest_path="etc" +network_file="${dest_path}/network.yml" # Create directories for all node for i in {1..3}; do - mkdir -p "${DEST_PATH}/any-sync-node-${i}" + mkdir -p "${dest_path}/any-sync-node-${i}" done # Create directories for other node types for node_type in filenode coordinator consensusnode; do - mkdir -p "${DEST_PATH}/any-sync-${node_type}" + mkdir -p "${dest_path}/any-sync-${node_type}" done # Generate network file -sed 's|^| |; 1s|^|network:\n|' "generateconfig/nodes.yml" > "${NETWORK_FILE}" +sed 's|^| |; 1s|^|network:\n|' "generateconfig/nodes.yml" > "${network_file}" # Generate config files for 3 nodes for i in {0..2}; do - NODE_FILE="${DEST_PATH}/any-sync-node-$((i+1))/config.yml" - cat "${NETWORK_FILE}" etc/common.yml generateconfig/account${i}.yml etc/node-$((i+1)).yml > "${NODE_FILE}" + node_file="${dest_path}/any-sync-node-$((i+1))/config.yml" + cat "${network_file}" tmp-etc/common.yml generateconfig/account${i}.yml tmp-etc/node-$((i+1)).yml > "${node_file}" done # Generate config files for coordinator, filenode, consensusnode -cat "${NETWORK_FILE}" etc/common.yml generateconfig/account3.yml etc/coordinator.yml > ${DEST_PATH}/any-sync-coordinator/config.yml -cat "${NETWORK_FILE}" etc/common.yml generateconfig/account4.yml etc/filenode.yml > ${DEST_PATH}/any-sync-filenode/config.yml -cat "${NETWORK_FILE}" etc/common.yml generateconfig/account5.yml etc/consensusnode.yml > ${DEST_PATH}/any-sync-consensusnode/config.yml +cat "${network_file}" tmp-etc/common.yml generateconfig/account3.yml tmp-etc/coordinator.yml > ${dest_path}/any-sync-coordinator/config.yml +cat "${network_file}" tmp-etc/common.yml generateconfig/account4.yml tmp-etc/filenode.yml > ${dest_path}/any-sync-filenode/config.yml +cat "${network_file}" tmp-etc/common.yml generateconfig/account5.yml tmp-etc/consensusnode.yml > ${dest_path}/any-sync-consensusnode/config.yml # Copy network file to coordinator directory -cp "generateconfig/nodes.yml" "${DEST_PATH}/any-sync-coordinator/network.yml" +cp "generateconfig/nodes.yml" "${dest_path}/any-sync-coordinator/network.yml" # Replace placeholders in config files for node_type in node_1 node_2 node_3 coordinator filenode consensusnode; do - ADDRESSES_VAR="ANY_SYNC_${node_type^^}_ADDRESSES" - QUIC_ADDRESSES_VAR="ANY_SYNC_${node_type^^}_QUIC_ADDRESSES" - perl -i -pe "s|%${ADDRESSES_VAR}%|${!ADDRESSES_VAR}|g" "${NETWORK_FILE}" "${DEST_PATH}/"/*/*.yml - perl -i -pe "s|%${QUIC_ADDRESSES_VAR}%|${!QUIC_ADDRESSES_VAR}|g" "${NETWORK_FILE}" "${DEST_PATH}/"/*/*.yml + addresses="ANY_SYNC_${node_type^^}_ADDRESSES" + quic_addresses="ANY_SYNC_${node_type^^}_QUIC_ADDRESSES" + perl -i -pe "s|%${addresses}%|${!addresses}|g" "${network_file}" "${dest_path}/"/*/*.yml + perl -i -pe "s|%${quic_addresses}%|${!quic_addresses}|g" "${network_file}" "${dest_path}/"/*/*.yml done # Replace other placeholders -PLACEHOLDERS=( "MONGO_CONNECT" "REDIS_URL" "AWS_PORT" ) -for placeholder in "${PLACEHOLDERS[@]}"; do - perl -i -pe "s|%${placeholder}%|${!placeholder}|g" "${NETWORK_FILE}" "${DEST_PATH}/"/*/*.yml +placeholders=( "MONGO_CONNECT" "REDIS_URL" "AWS_PORT" ) +for placeholder in "${placeholders[@]}"; do + perl -i -pe "s|%${placeholder}%|${!placeholder}|g" "${network_file}" "${dest_path}/"/*/*.yml done From 05e0a3527ffe0a41d47a6fb868bb24e561fa034d Mon Sep 17 00:00:00 2001 From: Grigory Efimov Date: Tue, 14 Nov 2023 13:17:24 -0300 Subject: [PATCH 3/3] .gitignore added etc/ and storage/ --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9605b66..2261a70 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ -tmp/ +etc/ +storage/ repos/ docker-compose.override.yml