From 6db7e714f9a17800e63d81ad95d07a1060c9f59c Mon Sep 17 00:00:00 2001 From: Zsolt Ero Date: Sun, 9 Jun 2024 14:16:34 +0200 Subject: [PATCH] loadbalancer --- init-server.py | 18 ++++++++++++++---- scripts/loadbalancer/setup.py | 13 +++++++++++++ ssh_lib/tasks.py | 27 +++++++++++++++++++++++++-- 3 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 scripts/loadbalancer/setup.py diff --git a/init-server.py b/init-server.py index f74f74c..a5fadf4 100755 --- a/init-server.py +++ b/init-server.py @@ -3,20 +3,18 @@ import click from fabric import Config, Connection -from ssh_lib import SCRIPTS_DIR, TILE_GEN_BIN, VENV_BIN, dotenv_val -from ssh_lib.planetiler import planetiler +from ssh_lib import SCRIPTS_DIR, TILE_GEN_BIN, dotenv_val from ssh_lib.tasks import ( prepare_http_host, prepare_shared, prepare_tile_gen, run_http_host_sync, setup_ledns_writer, + setup_loadbalancer, upload_http_host_config, - upload_http_host_files, ) from ssh_lib.utils import ( put, - sudo_cmd, ) @@ -111,6 +109,18 @@ def ledns_writer(hostname, user, port): setup_ledns_writer(c) +@cli.command() +@common_options +def loadbalancer(hostname, user, port): + if not click.confirm(f'Run script on {hostname}?'): + return + + c = get_connection(hostname, user, port) + prepare_shared(c) + + setup_loadbalancer(c) + + @cli.command() @common_options def debug(hostname, user, port): diff --git a/scripts/loadbalancer/setup.py b/scripts/loadbalancer/setup.py new file mode 100644 index 0000000..44bebe8 --- /dev/null +++ b/scripts/loadbalancer/setup.py @@ -0,0 +1,13 @@ +from setuptools import find_packages, setup + + +requirements = [ + 'click', +] + + +setup( + python_requires='>=3.10', + install_requires=requirements, + packages=find_packages(), +) diff --git a/ssh_lib/tasks.py b/ssh_lib/tasks.py index 18933ac..3bc106a 100644 --- a/ssh_lib/tasks.py +++ b/ssh_lib/tasks.py @@ -29,8 +29,6 @@ def prepare_shared(c): pkg_base(c) rclone(c) - kernel_tweaks_ofm(c) - c.sudo(f'mkdir -p {REMOTE_CONFIG}') c.sudo(f'chown ofm:ofm {REMOTE_CONFIG}') c.sudo(f'chown ofm:ofm {OFM_DIR}') @@ -118,6 +116,8 @@ def upload_http_host_config(c): def prepare_http_host(c): + kernel_tweaks_ofm(c) + nginx(c) certbot(c) @@ -172,6 +172,7 @@ def setup_ledns_writer(c): assert le_email assert domain_ledns assert (CONFIG_DIR / 'rclone.conf').exists() + assert (CONFIG_DIR / 'cloudflare.ini').exists() rclone(c) certbot(c) @@ -218,3 +219,25 @@ def setup_ledns_writer(c): f'--deploy-hook /data/ofm/ledns/rclone_write.sh ' f'-d {domain_ledns}', ) + + +def setup_loadbalancer(c): + load_balance_host_list = [ + h.strip() for h in dotenv_val('LOAD_BALANCE_HOST_LIST').split(',') if h.strip() + ] + assert (CONFIG_DIR / 'cloudflare.ini').exists() + + c.sudo(f'mkdir -p {REMOTE_CONFIG}') + + put( + c, + CONFIG_DIR / 'cloudflare.ini', + f'{REMOTE_CONFIG}/cloudflare.ini', + permissions=400, + ) + + + c.sudo('rm -rf /data/ofm/loadbalancer') + put_dir(c, SCRIPTS_DIR / 'loadbalancer', '/data/ofm/loadbalancer') + + c.sudo(f'{VENV_BIN}/pip install -e /data/ofm/loadbalancer')