From d266c07215a4d910f71a0dba64f977b2e179a7f9 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:32:23 +0000 Subject: [PATCH 01/13] add nginx ip filtering --- image_generation_subnet/base/miner.py | 24 +++++++++++++++++-- image_generation_subnet/miner/__init__.py | 2 ++ image_generation_subnet/miner/constants.py | 27 ++++++++++++++++++++++ image_generation_subnet/utils/config.py | 13 +++++++++++ 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 image_generation_subnet/miner/constants.py diff --git a/image_generation_subnet/base/miner.py b/image_generation_subnet/base/miner.py index 13cebde3..c535a32e 100644 --- a/image_generation_subnet/base/miner.py +++ b/image_generation_subnet/base/miner.py @@ -23,6 +23,7 @@ import bittensor as bt from image_generation_subnet.base.neuron import BaseNeuron +from image_generation_subnet.miner.constants import nginx_conf class BaseMinerNeuron(BaseNeuron): @@ -42,7 +43,9 @@ def __init__(self, config=None): bt.logging.warning( "You are allowing non-registered entities to send requests to your miner. This is a security risk." ) - + if self.config.miner.use_nginx: + self.config.axon.external_port = self.config.axon.port + self.config.axon.port = 8091 # The axon handles request processing, allowing validators to send this miner requests. self.axon = bt.axon(wallet=self.wallet, config=self.config) @@ -101,7 +104,6 @@ def run(self): f"Serving miner axon {self.axon} on network: {self.config.subtensor.chain_endpoint} with netuid: {self.config.netuid}" ) self.axon.serve(netuid=self.config.netuid, subtensor=self.subtensor) - # Start starts the miner's axon, making it active on the network. self.axon.start() @@ -198,3 +200,21 @@ def resync_metagraph(self): # Sync the metagraph. self.metagraph.sync(subtensor=self.subtensor) + if self.config.miner.use_nginx: + try: + axons = self.metagraph.axons + whitelist = [] + for k in self.volume_per_validator.keys(): + whitelist.append(f"allow {axons[int(k)].ip};") + whitelist = "\n".join(whitelist) + nginx_conf = nginx_conf.format( + external_axon_port=self.config.axon.external_port, + internal_axon_port=self.config.axon.port, + whitelist=whitelist, + ) + with open("/etc/nginx/nginx.conf", "w") as f: + f.write(nginx_conf) + bt.logging.info("Nginx configuration updated.") + except Exception as e: + bt.logging.error(f"Error in updating nginx configuration: {e}") + traceback.print_exc() diff --git a/image_generation_subnet/miner/__init__.py b/image_generation_subnet/miner/__init__.py index 81ce5c59..752d7bce 100644 --- a/image_generation_subnet/miner/__init__.py +++ b/image_generation_subnet/miner/__init__.py @@ -1,9 +1,11 @@ from .blacklist import check_limit, check_min_stake from .forward import set_info, generate +from .constants import nginx_conf __all__ = [ "check_limit", "check_min_stake", "set_info", "generate", + "nginx_conf", ] diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py new file mode 100644 index 00000000..a9eb3caf --- /dev/null +++ b/image_generation_subnet/miner/constants.py @@ -0,0 +1,27 @@ +nginx_conf = """ +worker_processes 1; +events { + worker_connections 1024; +} + +http { + server { + listen {external_axon_port}; # Port to listen on + + # Whitelist IP addresses + # allow 123.45.67.89; # Replace with your allowed IPs + # allow 98.76.54.32; # You can add multiple allowed IPs + {whitelist} + deny all; # Deny all other IPs + + location / { + proxy_pass http://127.0.0.1:{internal_axon_port}; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + } +} + +""" diff --git a/image_generation_subnet/utils/config.py b/image_generation_subnet/utils/config.py index 55233e94..d56c959f 100644 --- a/image_generation_subnet/utils/config.py +++ b/image_generation_subnet/utils/config.py @@ -422,6 +422,19 @@ def add_args(cls, parser): default=4, ) + parser.add_argument( + "--miner.use_nginx", + action="store_true", + help="If set, we will use nginx to serve requests.", + default=False, + ) + parser.add_argument( + "--miner.nginx_port", + type=int, + help="The port to run nginx on.", + default=8091, + ) + def config(cls): """ From b410e298b4d69fa6854e2f1e31931a7f1fda0205 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:34:32 +0000 Subject: [PATCH 02/13] update --- image_generation_subnet/base/miner.py | 2 +- image_generation_subnet/miner/__init__.py | 4 ++-- image_generation_subnet/miner/constants.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/image_generation_subnet/base/miner.py b/image_generation_subnet/base/miner.py index c535a32e..92e62437 100644 --- a/image_generation_subnet/base/miner.py +++ b/image_generation_subnet/base/miner.py @@ -23,7 +23,7 @@ import bittensor as bt from image_generation_subnet.base.neuron import BaseNeuron -from image_generation_subnet.miner.constants import nginx_conf +from image_generation_subnet.miner.constants import NGINX_CONF class BaseMinerNeuron(BaseNeuron): diff --git a/image_generation_subnet/miner/__init__.py b/image_generation_subnet/miner/__init__.py index 752d7bce..f91faad8 100644 --- a/image_generation_subnet/miner/__init__.py +++ b/image_generation_subnet/miner/__init__.py @@ -1,11 +1,11 @@ from .blacklist import check_limit, check_min_stake from .forward import set_info, generate -from .constants import nginx_conf +from .constants import NGINX_CONF __all__ = [ "check_limit", "check_min_stake", "set_info", "generate", - "nginx_conf", + "NGINX_CONF", ] diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py index a9eb3caf..da4a80a4 100644 --- a/image_generation_subnet/miner/constants.py +++ b/image_generation_subnet/miner/constants.py @@ -1,4 +1,4 @@ -nginx_conf = """ +NGINX_CONF = """ worker_processes 1; events { worker_connections 1024; From 64901006de6416d1b6384a21785c8faf46b23634 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:35:38 +0000 Subject: [PATCH 03/13] update --- image_generation_subnet/base/miner.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/image_generation_subnet/base/miner.py b/image_generation_subnet/base/miner.py index 92e62437..9828fb50 100644 --- a/image_generation_subnet/base/miner.py +++ b/image_generation_subnet/base/miner.py @@ -207,11 +207,12 @@ def resync_metagraph(self): for k in self.volume_per_validator.keys(): whitelist.append(f"allow {axons[int(k)].ip};") whitelist = "\n".join(whitelist) - nginx_conf = nginx_conf.format( + nginx_conf = NGINX_CONF.format( external_axon_port=self.config.axon.external_port, internal_axon_port=self.config.axon.port, whitelist=whitelist, ) + bt.logging.info(nginx_conf) with open("/etc/nginx/nginx.conf", "w") as f: f.write(nginx_conf) bt.logging.info("Nginx configuration updated.") From 13afbe2be9d18abae8dab405f0dd521cf97d769e Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:37:21 +0000 Subject: [PATCH 04/13] update --- image_generation_subnet/base/miner.py | 13 ++++++++----- image_generation_subnet/miner/constants.py | 6 +++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/image_generation_subnet/base/miner.py b/image_generation_subnet/base/miner.py index 9828fb50..c62d5965 100644 --- a/image_generation_subnet/base/miner.py +++ b/image_generation_subnet/base/miner.py @@ -24,7 +24,7 @@ from image_generation_subnet.base.neuron import BaseNeuron from image_generation_subnet.miner.constants import NGINX_CONF - +import os class BaseMinerNeuron(BaseNeuron): """ @@ -207,14 +207,17 @@ def resync_metagraph(self): for k in self.volume_per_validator.keys(): whitelist.append(f"allow {axons[int(k)].ip};") whitelist = "\n".join(whitelist) - nginx_conf = NGINX_CONF.format( - external_axon_port=self.config.axon.external_port, - internal_axon_port=self.config.axon.port, - whitelist=whitelist, + nginx_conf = ( + NGINX_CONF.replace("{{whitelist}}", whitelist) + .replace( + "{{external_axon_port}}", str(self.config.axon.external_port) + ) + .replace("{{internal_axon_port}}", str(self.config.axon.port)) ) bt.logging.info(nginx_conf) with open("/etc/nginx/nginx.conf", "w") as f: f.write(nginx_conf) + os.system("nginx") bt.logging.info("Nginx configuration updated.") except Exception as e: bt.logging.error(f"Error in updating nginx configuration: {e}") diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py index da4a80a4..59e7c8dc 100644 --- a/image_generation_subnet/miner/constants.py +++ b/image_generation_subnet/miner/constants.py @@ -6,16 +6,16 @@ http { server { - listen {external_axon_port}; # Port to listen on + listen {{external_axon_port}}; # Port to listen on # Whitelist IP addresses # allow 123.45.67.89; # Replace with your allowed IPs # allow 98.76.54.32; # You can add multiple allowed IPs - {whitelist} + {{whitelist}} deny all; # Deny all other IPs location / { - proxy_pass http://127.0.0.1:{internal_axon_port}; + proxy_pass http://127.0.0.1:{{internal_axon_port}}; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; From f74f06f21d878cc94d8a8210507746fa7debab48 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:44:55 +0000 Subject: [PATCH 05/13] update --- image_generation_subnet/base/miner.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/image_generation_subnet/base/miner.py b/image_generation_subnet/base/miner.py index c62d5965..a186b5b4 100644 --- a/image_generation_subnet/base/miner.py +++ b/image_generation_subnet/base/miner.py @@ -26,6 +26,7 @@ from image_generation_subnet.miner.constants import NGINX_CONF import os + class BaseMinerNeuron(BaseNeuron): """ Base class for Bittensor miners. @@ -217,7 +218,7 @@ def resync_metagraph(self): bt.logging.info(nginx_conf) with open("/etc/nginx/nginx.conf", "w") as f: f.write(nginx_conf) - os.system("nginx") + os.system("nginx -s reload") bt.logging.info("Nginx configuration updated.") except Exception as e: bt.logging.error(f"Error in updating nginx configuration: {e}") From 5c91013a07ef0e2902b06f4e490169a6dc59496d Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:47:34 +0000 Subject: [PATCH 06/13] update --- image_generation_subnet/base/miner.py | 1 - 1 file changed, 1 deletion(-) diff --git a/image_generation_subnet/base/miner.py b/image_generation_subnet/base/miner.py index a186b5b4..573c5b48 100644 --- a/image_generation_subnet/base/miner.py +++ b/image_generation_subnet/base/miner.py @@ -215,7 +215,6 @@ def resync_metagraph(self): ) .replace("{{internal_axon_port}}", str(self.config.axon.port)) ) - bt.logging.info(nginx_conf) with open("/etc/nginx/nginx.conf", "w") as f: f.write(nginx_conf) os.system("nginx -s reload") From 5db36fa83e5f8fea004c87cba0e5189ccadd4848 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:48:50 +0000 Subject: [PATCH 07/13] update --- neurons/miner/miner.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/neurons/miner/miner.py b/neurons/miner/miner.py index 9913a7d0..43cab6cd 100644 --- a/neurons/miner/miner.py +++ b/neurons/miner/miner.py @@ -185,17 +185,17 @@ async def priority(self, synapse: ImageGenerating) -> float: ) start_time = time.time() miner.total_request_in_interval = 0 - try: - bt.logging.debug("Syncing metagraph") - miner.resync_metagraph() - bt.logging.debug("Synced metagraph") - miner.volume_per_validator = image_generation_subnet.utils.volume_setting.get_volume_per_validator( - miner.metagraph, - miner.config.miner.total_volume, - miner.config.miner.size_preference_factor, - miner.config.miner.min_stake, - log=False, - ) - except Exception as e: - print(e) + try: + bt.logging.debug("Syncing metagraph") + miner.resync_metagraph() + bt.logging.debug("Synced metagraph") + miner.volume_per_validator = image_generation_subnet.utils.volume_setting.get_volume_per_validator( + miner.metagraph, + miner.config.miner.total_volume, + miner.config.miner.size_preference_factor, + miner.config.miner.min_stake, + log=False, + ) + except Exception as e: + print(e) time.sleep(60) From 2f7e34f0dab42776a7bdbea4487c4e4b22af7a81 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:51:55 +0000 Subject: [PATCH 08/13] update --- image_generation_subnet/miner/constants.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py index 59e7c8dc..992823a9 100644 --- a/image_generation_subnet/miner/constants.py +++ b/image_generation_subnet/miner/constants.py @@ -5,6 +5,9 @@ } http { + ignore_invalid_headers off; + client_max_body_size 0; + proxy_intercept_errors on; server { listen {{external_axon_port}}; # Port to listen on @@ -13,13 +16,11 @@ # allow 98.76.54.32; # You can add multiple allowed IPs {{whitelist}} deny all; # Deny all other IPs + access_log /var/log/nginx/access.log proxylog; + proxy_http_version 1.1; location / { proxy_pass http://127.0.0.1:{{internal_axon_port}}; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; } } } From dd03c52e5c98dcef17e36ad89ac88e97c6e0f5ae Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 05:52:50 +0000 Subject: [PATCH 09/13] update --- image_generation_subnet/miner/constants.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py index 992823a9..f553f410 100644 --- a/image_generation_subnet/miner/constants.py +++ b/image_generation_subnet/miner/constants.py @@ -16,8 +16,6 @@ # allow 98.76.54.32; # You can add multiple allowed IPs {{whitelist}} deny all; # Deny all other IPs - access_log /var/log/nginx/access.log proxylog; - proxy_http_version 1.1; location / { proxy_pass http://127.0.0.1:{{internal_axon_port}}; From 8e294e146619333e61402adcf028be8715988439 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 06:07:42 +0000 Subject: [PATCH 10/13] try limit conns --- image_generation_subnet/base/miner.py | 10 +++------- image_generation_subnet/miner/constants.py | 1 + 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/image_generation_subnet/base/miner.py b/image_generation_subnet/base/miner.py index 573c5b48..b196c954 100644 --- a/image_generation_subnet/base/miner.py +++ b/image_generation_subnet/base/miner.py @@ -208,13 +208,9 @@ def resync_metagraph(self): for k in self.volume_per_validator.keys(): whitelist.append(f"allow {axons[int(k)].ip};") whitelist = "\n".join(whitelist) - nginx_conf = ( - NGINX_CONF.replace("{{whitelist}}", whitelist) - .replace( - "{{external_axon_port}}", str(self.config.axon.external_port) - ) - .replace("{{internal_axon_port}}", str(self.config.axon.port)) - ) + nginx_conf = NGINX_CONF.replace( + "{{external_axon_port}}", str(self.config.axon.external_port) + ).replace("{{internal_axon_port}}", str(self.config.axon.port)) with open("/etc/nginx/nginx.conf", "w") as f: f.write(nginx_conf) os.system("nginx -s reload") diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py index f553f410..7afd1212 100644 --- a/image_generation_subnet/miner/constants.py +++ b/image_generation_subnet/miner/constants.py @@ -19,6 +19,7 @@ location / { proxy_pass http://127.0.0.1:{{internal_axon_port}}; + limit_conn addr 20; } } } From fc061eded0c98a74a3c82962de8dbc2a8981ecbb Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 06:08:39 +0000 Subject: [PATCH 11/13] fix --- image_generation_subnet/miner/constants.py | 1 - 1 file changed, 1 deletion(-) diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py index 7afd1212..ebaf744d 100644 --- a/image_generation_subnet/miner/constants.py +++ b/image_generation_subnet/miner/constants.py @@ -14,7 +14,6 @@ # Whitelist IP addresses # allow 123.45.67.89; # Replace with your allowed IPs # allow 98.76.54.32; # You can add multiple allowed IPs - {{whitelist}} deny all; # Deny all other IPs location / { From 0a178bc62329f70bfa5cccb06a12d11f672234e0 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 06:09:46 +0000 Subject: [PATCH 12/13] update --- image_generation_subnet/miner/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py index ebaf744d..1a68a662 100644 --- a/image_generation_subnet/miner/constants.py +++ b/image_generation_subnet/miner/constants.py @@ -14,7 +14,7 @@ # Whitelist IP addresses # allow 123.45.67.89; # Replace with your allowed IPs # allow 98.76.54.32; # You can add multiple allowed IPs - deny all; # Deny all other IPs + # deny all; # Deny all other IPs location / { proxy_pass http://127.0.0.1:{{internal_axon_port}}; From 23416c97c2a1a71936f655b5081d7f11012be1a1 Mon Sep 17 00:00:00 2001 From: toilaluan Date: Thu, 26 Sep 2024 06:13:09 +0000 Subject: [PATCH 13/13] update --- image_generation_subnet/miner/constants.py | 1 + 1 file changed, 1 insertion(+) diff --git a/image_generation_subnet/miner/constants.py b/image_generation_subnet/miner/constants.py index 1a68a662..bae2a80a 100644 --- a/image_generation_subnet/miner/constants.py +++ b/image_generation_subnet/miner/constants.py @@ -5,6 +5,7 @@ } http { + limit_conn_zone $binary_remote_addr zone=addr:10m; ignore_invalid_headers off; client_max_body_size 0; proxy_intercept_errors on;