From 2a3a929372c575b63af4ebdd907149f499fc44a7 Mon Sep 17 00:00:00 2001 From: "aynic.os" Date: Mon, 12 Feb 2024 00:15:50 +0000 Subject: [PATCH] add stack duniter/v2s --- make/apps/common.mk | 2 +- make/apps/def.mk | 10 ++++-- make/apps/ufw.mk | 17 +++++++--- make/def.app.mk | 10 +++--- make/env.mk | 4 +-- stack/duniter/v2s.mk | 19 +++++++++++ stack/duniter/v2s.yml | 76 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 122 insertions(+), 16 deletions(-) create mode 100644 stack/duniter/v2s.mk create mode 100644 stack/duniter/v2s.yml diff --git a/make/apps/common.mk b/make/apps/common.mk index cb244f1..997afe1 100644 --- a/make/apps/common.mk +++ b/make/apps/common.mk @@ -200,7 +200,7 @@ stack: ## the last part of % ## ex: stack-host-up will fire the docker-compose-up target in the host stack .PHONY: stack-% -stack-%: stack +stack-%: $(eval stack := $(subst -$(lastword $(subst -, ,$*)),,$*)) $(eval command := $(lastword $(subst -, ,$*))) $(if $(findstring -,$*), \ diff --git a/make/apps/def.mk b/make/apps/def.mk index 9372aa3..a9c2dab 100644 --- a/make/apps/def.mk +++ b/make/apps/def.mk @@ -1,9 +1,13 @@ APP_DIR ?= $(CURDIR) APP_DOCKER_DIR ?= $(DOCKER_DIR) APP_DOMAIN ?= $(patsubst %,$(APP_DOMAIN_PREFIX)%,$(DOMAIN)) -APP_DOMAIN_PREFIX ?= $(if $(HOST_STACK),,$(addsuffix .,$(filter-out $(ENV_DEPLOY),$(ENV)))$(USER).) -APP_HOST ?= $(patsubst %,$(APP_HOST_PREFIX)%,$(APP_DOMAIN))$(if $(HOST_LB),$(space)$(APP_DOMAIN)) -APP_HOST_PREFIX ?= $(addsuffix .,$(if $(HOST_STACK),$(HOSTNAME),$(if $(APP_LB),,$(APP_NAME)))) +APP_DOMAIN_PREFIX ?= $(if $(HOST_STACK),,$(addsuffix .,$(if $(APP_HOST_MULTI_ENV),$(filter-out $(ENV_DEPLOY),$(ENV))))$(if $(APP_HOST_MULTI_USER),$(USER).)) +APP_HOST ?= $(patsubst %,$(APP_HOST_PREFIX)%,$(APP_DOMAIN))$(if $(HOST_STACK),$(if $(HOST_LB),$(space)$(DOMAIN))) +APP_HOST_PREFIX ?= $(addsuffix .,$(if $(HOST_STACK),$(HOSTNAME),$(if $(APP_HOST_MULTI_APP),$(APP_NAME)))) +APP_HOST_MULTI ?= false +APP_HOST_MULTI_APP ?= $(if $(filter true,$(APP_HOST_MULTI)),true) +APP_HOST_MULTI_ENV ?= $(if $(filter true,$(APP_HOST_MULTI)),true) +APP_HOST_MULTI_USER ?= $(if $(filter true,$(APP_HOST_MULTI)),true) APP_INSTALLED ?= $(APPS) APP_PARENT ?= $(MONOREPO) APP_PARENT_DIR ?= $(MONOREPO_DIR) diff --git a/make/apps/ufw.mk b/make/apps/ufw.mk index caf7360..0bef64b 100644 --- a/make/apps/ufw.mk +++ b/make/apps/ufw.mk @@ -5,6 +5,12 @@ ufw: # target ufw-bootstrap: Eval ufw-docker app variables ufw-bootstrap: + $(eval APP_COMPOSE_FILE :=) + $(eval DOCKER_COMPOSE_PROJECT_NAME := $(HOST_COMPOSE_PROJECT_NAME)) + $(eval DOCKER_SERVICE := ufw-docker) + $(eval DOCKER_STACK :=) + $(eval MYOS_STACK :=) + $(eval MYOS_STACK_FILE :=) $(call app-bootstrap,$(lastword $(subst /, ,$(SETUP_UFW_REPOSITORY)))) # target ufw-build: Build ufw-docker docker @@ -26,21 +32,22 @@ ufw-install: $(call app-install,$(SETUP_UFW_REPOSITORY)) # target ufw-up: Start ufw-docker docker -ufw-up: COMPOSE_PROJECT_NAME := $(HOST_COMPOSE_PROJECT_NAME) ufw-up: DOCKER_RUN_NETWORK := -ufw-up: DOCKER_RUN_OPTIONS := --rm -d --cap-add NET_ADMIN -v /etc/ufw:/etc/ufw $(if wildcard /etc/default/ufw,-v /etc/default/ufw:/etc/default/ufw) --network host +ufw-up: DOCKER_RUN_OPTIONS := --restart always -d --cap-add NET_ADMIN -v /etc/ufw:/etc/ufw $(if wildcard /etc/default/ufw,-v /etc/default/ufw:/etc/default/ufw) --network host ufw-up: $(call app-up) # target ufw-update: Call ufw and ufw-docker foreach service UFW_UPDATE .PHONY: ufw-update -ufw-update: debug-UFW_UPDATE - $(eval name := $(COMPOSE_PROJECT_NAME)) +ufw-update: stack $(if $(HOST_STACK),setup-ufw) debug-UFW_UPDATE + $(eval APP_COMPOSE_FILE :=) + $(eval DOCKER_SERVICE := ufw-docker) + $(eval project_name := $(COMPOSE_PROJECT_NAME)) $(foreach UPDATE,$(call UPPERCASE,$(UFW_UPDATE)), \ $(eval ufw_update := $($(if $(HOST_STACK),HOST_)$(UPDATE)_UFW_UPDATE)) \ $(eval ufw_docker := $($(if $(HOST_STACK),HOST_)$(UPDATE)_UFW_DOCKER)) \ $(foreach port,$(ufw_docker), \ - $(call ufw-docker,$(if $(UFW_DELETE),delete) allow $(name)-$(call LOWERCASE,$(UPDATE)) $(port) ||:) \ + $(call ufw-docker,$(if $(UFW_DELETE),delete) allow $(project_name)-$(call LOWERCASE,$(UPDATE))$(if $(HOST_STACK),,-1) $(port) ||:) \ ) \ $(foreach port,$(ufw_update), \ $(call ufw,$(if $(UFW_DELETE),delete) allow $(port)) \ diff --git a/make/def.app.mk b/make/def.app.mk index d4b691c..98b62c0 100644 --- a/make/def.app.mk +++ b/make/def.app.mk @@ -19,13 +19,13 @@ define app-bootstrap $(eval APP := $(or $(1), $(APP))) $(eval APP_DIR := $(or $(2), $(RELATIVE)$(APP))) $(eval APP_NAME := $(or $(3),$(subst -,,$(subst .,,$(call LOWERCASE,$(APP)))))) - $(eval COMPOSE_PROJECT_NAME := $(if $(DOCKER_COMPOSE_PROJECT_NAME),$(DOCKER_COMPOSE_PROJECT_NAME),$(subst .,,$(call LOWERCASE,$(USER)-$(APP_NAME)-$(ENV)$(addprefix -,$(subst /,,$(subst -,,$(APP_PATH)))))))) - $(eval COMPOSE_SERVICE_NAME := $(if $(DOCKER_COMPOSE_SERVICE_NAME),$(DOCKER_COMPOSE_SERVICE_NAME),$(subst _,-,$(COMPOSE_PROJECT_NAME)))) + $(eval COMPOSE_PROJECT_NAME := $(or $(DOCKER_COMPOSE_PROJECT_NAME),$(subst .,,$(call LOWERCASE,$(USER)-$(APP_NAME)-$(ENV)$(addprefix -,$(subst /,,$(subst -,,$(APP_PATH)))))))) + $(eval COMPOSE_SERVICE_NAME := $(or $(DOCKER_COMPOSE_SERVICE_NAME),$(subst _,-,$(COMPOSE_PROJECT_NAME)))) $(eval DOCKER_BUILD_DIR := $(APP_DIR)) $(call compose-file,$(APP_DIR) $(APP_DIR)/$(or $(APP_DOCKER_DIR),$(DOCKER_DIR)),docker-compose) $(call compose-file,apps apps/$(APP),$(APP)) - $(eval APP_COMPOSE_FILE := $(COMPOSE_FILE)) - $(foreach stackz,$(STACK),$(call docker-stack,$(stackz))) + $(eval APP_COMPOSE_FILE ?= $(COMPOSE_FILE)) + $(foreach stackz,$(or $(DOCKER_STACK),$(STACK)),$(call docker-stack,$(stackz))) $(call compose-file,$(MYOS_STACK),$(MYOS_STACK_FILE)) $(call .env,$(APP_DIR)/.env,$(APP_DIR)/.env.dist $(APP_DIR)/.env.example $(APP_DIR)/.env.sample) endef @@ -86,7 +86,7 @@ define app-docker $(eval dockerfile := $(or $(1))) $(if $(wildcard $(dockerfile)), $(eval service := $(or $(DOCKER_SERVICE),$(subst .,,$(call LOWERCASE,$(lastword $(subst /, ,$(patsubst %/Dockerfile,%,$(dockerfile)))))),undefined)) - $(eval docker := ${COMPOSE_SERVICE_NAME}-$(service)) + $(eval docker := $(or $(DOCKER_COMPOSE_SERVICE_NAME),$(COMPOSE_SERVICE_NAME))-$(service)) $(eval DOCKER_IMAGE := $(DOCKER_REPOSITORY)/$(service):$(DOCKER_IMAGE_TAG)) $(eval DOCKER_LABELS := SERVICE_NAME=$(docker) SERVICE_TAGS=$(call urlprefix,$(APP_PATH),,$(service).$(APP_HOST))) $(eval DOCKER_NAME := $(docker)) diff --git a/make/env.mk b/make/env.mk index d29f8fd..546b585 100644 --- a/make/env.mk +++ b/make/env.mk @@ -83,7 +83,7 @@ endef # add variables definition to the .env file define .env_update $(call INFO,.env_update,$(env_file)$(comma) $(env_dist)$(comma) $(env_over)) - touch $(env_file) $(if $(VERBOSE)$(DEBUG),,2> /dev/null) + touch $(env_file) $(if $(VERBOSE)$(DEBUG),,2> /dev/null) ||: printenv \ |awk -F '=' 'NR == FNR { if($$1 !~ /^(#|$$)/) { A[$$1]; next } } !($$1 in A)' - $(env_dist) \ |cat $(env_over) - \ @@ -101,5 +101,5 @@ define .env_update awk '{while(match($$0,"[$$]{[^}]*}")) {var=substr($$0,RSTART+2,RLENGTH-3);gsub("[$$]{"var"}",ENVIRON[var])} print}') \ |sed -e /^$$/d -e /^#/d \ |sort \ - >> $(env_file); + >> $(env_file) $(if $(VERBOSE)$(DEBUG),,2> /dev/null) ||:; endef diff --git a/stack/duniter/v2s.mk b/stack/duniter/v2s.mk new file mode 100644 index 0000000..4ac969e --- /dev/null +++ b/stack/duniter/v2s.mk @@ -0,0 +1,19 @@ +ENV_VARS += DUNITER_UI_SERVICE_80_TAGS DUNITER_UI_WS_URL DUNITER_V2S_DUNITER_CHAIN_NAME DUNITER_V2S_DUNITER_NODE_NAME DUNITER_V2S_DUNITER_PUBLIC_ADDR DUNITER_V2S_DUNITER_PRUNING_PROFILE DUNITER_V2S_SERVICE_9615_TAGS DUNITER_V2S_SERVICE_9933_TAGS DUNITER_V2S_SERVICE_9944_TAGS DUNITER_V2S_SERVICE_30333_TAGS +DUNITER_UI_SERVICE_NAME ?= $(DUNITER_V2S_SERVICE_NAME) +DUNITER_UI_SERVICE_80_PATH ?= ui/ +DUNITER_UI_SERVICE_80_STRIP ?= /ui +DUNITER_UI_SERVICE_80_TAGS ?= $(call tagprefix,DUNITER_UI,80) +DUNITER_UI_WS_URL ?= wss://$(DUNITER_V2S_SERVICE_NAME).$(firstword $(APP_URIS))$(firstword $(DUNITER_V2S_SERVICE_9944_PATH)) +DUNITER_V2S_DUNITER_CHAIN_NAME ?= gdev +DUNITER_V2S_DUNITER_NODE_NAME ?= $(USER)-$(ENV)-$(DUNITER_V2S_DUNITER_PRUNING_PROFILE) +DUNITER_V2S_DUNITER_PUBLIC_ADDR ?= /dns/$(DUNITER_V2S_SERVICE_NAME).$(firstword $(APP_HOST))/tcp/443/wss +DUNITER_V2S_DUNITER_PRUNING_PROFILE ?= archive +DUNITER_V2S_SERVICE_NAME ?= $(DUNITER_V2S_DUNITER_CHAIN_NAME) +DUNITER_V2S_SERVICE_9615_PATH ?= metrics/ +DUNITER_V2S_SERVICE_9615_TAGS ?= $(call tagprefix,DUNITER_V2S,9615) +DUNITER_V2S_SERVICE_9933_PATH ?= http/ +DUNITER_V2S_SERVICE_9933_TAGS ?= $(call tagprefix,DUNITER_V2S,9933) +DUNITER_V2S_SERVICE_9944_PATH ?= ws/ +DUNITER_V2S_SERVICE_9944_STRIP ?= /ws +DUNITER_V2S_SERVICE_9944_TAGS ?= $(call tagprefix,DUNITER_V2S,9944) +DUNITER_V2S_SERVICE_30333_TAGS ?= $(call tagprefix,DUNITER_V2S,30333) diff --git a/stack/duniter/v2s.yml b/stack/duniter/v2s.yml new file mode 100644 index 0000000..7569d2a --- /dev/null +++ b/stack/duniter/v2s.yml @@ -0,0 +1,76 @@ +# This is a minimal docker-compose.yml template for running a Duniter instance +# For more detailed examples, look at docker/compose folder + +version: "3.5" + +services: + +# duniter-oracle: +# entrypoint: docker-distance-entrypoint +# environment: +# ORACLE_RPC_URL: "ws://duniter-v2s:9944" +# ORACLE_RESULT_DIR: "/var/lib/duniter/chains/${DUNITER_V2S_DUNITER_CHAIN_NAME:-gdev}/distance/" +# ORACLE_EXECUTION_INTERVAL: "1800" +# ORACLE_MAX_DEPTH: "5" +# ORACLE_LOG_LEVEL: "info" +# image: duniter/duniter-v2s-gdev:latest +# networks: +# - private +# restart: always +# volumes: +# - duniter-v2s-data:/var/lib/duniter + + duniter-ui: + environment: + - WS_URL=${DUNITER_UI_WS_URL:-duniter-v2s:9944} + image: jacogr/polkadot-js-apps:latest + labels: + - SERVICE_80_CHECK_HTTP=${DUNITER_UI_SERVICE_80_CHECK_HTTP:-/} + - SERVICE_80_NAME=${COMPOSE_SERVICE_NAME}-duniter-ui-80 + - SERVICE_80_TAGS=${DUNITER_UI_SERVICE_80_TAGS:-urlprefix-gdev.localhost/ui/*} + networks: + - private + ports: + - 80 + restart: always + + duniter-v2s: + environment: + - DUNITER_CHAIN_NAME=${DUNITER_V2S_DUNITER_CHAIN_NAME:-gdev} +# - DUNITER_LISTEN_ADDR=${DUNITER_V2S_DUNITER_LISTEN_ADDR:-/ip4/0.0.0.0/tcp/30333/ws} + - DUNITER_NODE_NAME=${DUNITER_V2S_DUNITER_NODE_NAME:-duniter_local} + - DUNITER_PRUNING_PROFILE=${DUNITER_V2S_DUNITER_PRUNING_PROFILE:-default} +# - DUNITER_PUBLIC_ADDR=${DUNITER_V2S_DUNITER_PUBLIC_ADDR:-/dns/localhost/tcp/30333/ws} + - DUNITER_VALIDATOR=${DUNITER_V2S_DUNITER_VALIDATOR:-false} + image: duniter/duniter-v2s-gdev:latest + labels: +# - SERVICE_9615_CHECK_HTTP=${DUNITER_V2S_SERVICE_9615_CHECK_HTTP:-/} +# - SERVICE_9615_NAME=${COMPOSE_SERVICE_NAME}-duniter-v2s-9615 +# - SERVICE_9615_TAGS=${DUNITER_V2S_SERVICE_9615_TAGS:-urlprefix-gdev.localhost/metrics/*} +# - SERVICE_9933_CHECK_HTTP=${DUNITER_V2S_SERVICE_9933_CHECK_HTTP:-/} +# - SERVICE_9933_CHECK_HTTP_METHOD=${DUNITER_V2S_SERVICE_9933_CHECK_HTTP_METHOD:-POST} +# - SERVICE_9933_NAME=${COMPOSE_SERVICE_NAME}-duniter-v2s-9933 +# - SERVICE_9933_TAGS=${DUNITER_V2S_SERVICE_9933_TAGS:-urlprefix-gdev.localhost/http/*} + - SERVICE_9944_CHECK_TCP=true + - SERVICE_9944_NAME=${COMPOSE_SERVICE_NAME}-duniter-v2s-9944 + - SERVICE_9944_TAGS=${DUNITER_V2S_SERVICE_9944_TAGS:-urlprefix-gdev.localhost/ws/*} + - SERVICE_30333_CHECK_TCP=true + - SERVICE_30333_NAME=${COMPOSE_SERVICE_NAME}-duniter-v2s-30333 + - SERVICE_30333_TAGS=${DUNITER_V2S_SERVICE_30333_TAGS:-urlprefix-gdev.localhost/*} + networks: + - private + ports: + # telemetry + - 9615 + # rpc + - 9933 + # rpc-ws + - 9944 + # p2p + - 30333 + volumes: + - duniter-v2s-data:/var/lib/duniter + restart: always + +volumes: + duniter-v2s-data: