From 4587e152a3fb6190ff9517df8266e108fb46c3d8 Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Wed, 3 Dec 2025 17:00:35 +0800 Subject: [PATCH 1/5] Avoid exposing redis and mysql ports --- docker-compose.mysql.yml.jinja | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docker-compose.mysql.yml.jinja b/docker-compose.mysql.yml.jinja index 1e796815..03beaa2a 100644 --- a/docker-compose.mysql.yml.jinja +++ b/docker-compose.mysql.yml.jinja @@ -45,8 +45,6 @@ services: restart: always volumes: - db-data:/var/lib/mysql - ports: - - '${DB_PORT}:${DB_PORT}' networks: - simoc-net environment: @@ -60,8 +58,6 @@ services: image: redis:latest {% endif %} restart: always - ports: - - 6379:6379 networks: - simoc-net environment: From fb3f297e5fffaf32b0abadad52b4e6721950d1c6 Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Wed, 3 Dec 2025 20:09:20 +0800 Subject: [PATCH 2/5] Support different project names --- simoc.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/simoc.py b/simoc.py index 1643e548..612707de 100644 --- a/simoc.py +++ b/simoc.py @@ -29,6 +29,7 @@ DEV_BE_COMPOSE_FILE = 'docker-compose.dev-be.yml' AGENT_DESC_COMPOSE_FILE = 'docker-compose.agent-desc.yml' TESTING_COMPOSE_FILE = 'docker-compose.testing.yml' +PROJECT_NAME = 'simoc' # used to handle multiple deployment DOCKER_COMPOSE_CMD = ['docker', 'compose', '-f', COMPOSE_FILE] @@ -302,7 +303,7 @@ def init_db(): def remove_db(): """Remove the volume for the MySQL DB.""" docker_compose('rm', '--stop', '-v', '-f', 'simoc-db') - docker('volume', 'rm', 'simoc_db-data') + docker('volume', 'rm', f'{PROJECT_NAME}_db-data') return True # the volume rm might return False if the volume is missing @@ -404,7 +405,8 @@ def test(*args): # add the testing yml that replaces the db DOCKER_COMPOSE_CMD.extend(['-f', TESTING_COMPOSE_FILE]) # check if the volume already exists - cp = subprocess.run(['docker', 'volume', 'inspect', 'simoc_db-testing'], + test_volume = f'{PROJECT_NAME}_db-testing' + cp = subprocess.run(['docker', 'volume', 'inspect', test_volume], capture_output=True) vol_info = json.loads(cp.stdout) if not vol_info: @@ -432,14 +434,17 @@ def adminer(db=None): DOCKER_COMPOSE_CMD.extend(['-f', TESTING_COMPOSE_FILE]) def show_info(): # show the volume that is currently connected to the db container + db_container = f'{PROJECT_NAME}-simoc-db-1' cp = subprocess.run(['docker', 'inspect', '-f', '{{range .Mounts}}{{.Name}}{{end}}', - 'simoc_simoc-db_1'], capture_output=True) + db_container], capture_output=True) print('* Starting adminer at: http://localhost:8081/') print('* Connecting to:', cp.stdout.decode('utf-8')) return True - cmd = ['run', '--network', 'simoc_simoc-net', - '--link', 'simoc_simoc-db_1:db', '-p', '8081:8080', + network_name = f'{PROJECT_NAME}_simoc-net' + db_container = f'{PROJECT_NAME}-simoc-db-1' + cmd = ['run', '--network', network_name, + '--link', f'{db_container}:db', '-p', '8081:8080', '-e', 'ADMINER_DESIGN=dracula', 'adminer'] return up() and show_info() and docker(*cmd) @@ -508,6 +513,10 @@ def create_help(cmds): '--env-file', metavar='FILE', type=pathlib.Path, default=ENV_FILE, help='the env file (default: %(default)r)' ) + parser.add_argument( + '--project-name', metavar='NAME', + help='the project name for docker compose' + ) parser.add_argument( '--with-dev-backend', action='store_true', help='use the dev backend flask container' @@ -533,6 +542,13 @@ def create_help(cmds): ENV_FILE = args.env_file ENVVARS = update_env(ENV_FILE) + if args.project_name: # use project name if specified + PROJECT_NAME = args.project_name + elif args.env_file: # or use env file name if specified + PROJECT_NAME = args.env_file.stem + # or use default 'simoc' + DOCKER_COMPOSE_CMD = ['docker', 'compose', '-f', COMPOSE_FILE, '-p', PROJECT_NAME] + if args.dev_backend_yml and not args.with_dev_backend: parser.error("Can't specify the dev backend yml without --with-dev-backend") From 07ca10f2aed65b97381b6634c7ff423939aaae99 Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Thu, 4 Dec 2025 18:03:50 +0800 Subject: [PATCH 3/5] Remove duplicated var --- simoc.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/simoc.py b/simoc.py index 612707de..0f7bb145 100644 --- a/simoc.py +++ b/simoc.py @@ -432,17 +432,16 @@ def adminer(db=None): # mount the 'simoc_db-testing' volume instead of the # default 'simoc_db-data' if 'testing' is passed as arg DOCKER_COMPOSE_CMD.extend(['-f', TESTING_COMPOSE_FILE]) + db_container = f'{PROJECT_NAME}-simoc-db-1' + network_name = f'{PROJECT_NAME}_simoc-net' def show_info(): # show the volume that is currently connected to the db container - db_container = f'{PROJECT_NAME}-simoc-db-1' cp = subprocess.run(['docker', 'inspect', '-f', '{{range .Mounts}}{{.Name}}{{end}}', db_container], capture_output=True) print('* Starting adminer at: http://localhost:8081/') print('* Connecting to:', cp.stdout.decode('utf-8')) return True - network_name = f'{PROJECT_NAME}_simoc-net' - db_container = f'{PROJECT_NAME}-simoc-db-1' cmd = ['run', '--network', network_name, '--link', f'{db_container}:db', '-p', '8081:8080', '-e', 'ADMINER_DESIGN=dracula', 'adminer'] From 18f26fd4919359d6a0f3598599b055f13e5033d8 Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Thu, 4 Dec 2025 18:13:07 +0800 Subject: [PATCH 4/5] Fix typo in comment --- simoc.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/simoc.py b/simoc.py index 0f7bb145..280afcee 100644 --- a/simoc.py +++ b/simoc.py @@ -25,11 +25,12 @@ CERTBOT_DIR = SCRIPT_DIR.parent.parent / 'certbot' CERTBOT_SYMLINK_DIR = SCRIPT_DIR / 'certbot' +# some of these are overridden in the __main__ section COMPOSE_FILE = 'docker-compose.mysql.yml' DEV_BE_COMPOSE_FILE = 'docker-compose.dev-be.yml' AGENT_DESC_COMPOSE_FILE = 'docker-compose.agent-desc.yml' TESTING_COMPOSE_FILE = 'docker-compose.testing.yml' -PROJECT_NAME = 'simoc' # used to handle multiple deployment +PROJECT_NAME = 'simoc' # used to handle multiple deployments DOCKER_COMPOSE_CMD = ['docker', 'compose', '-f', COMPOSE_FILE] From 9f3be7d0ea3fbdcae8ee5179d85087f8d7a8ab92 Mon Sep 17 00:00:00 2001 From: Ezio Melotti Date: Thu, 4 Dec 2025 18:14:15 +0800 Subject: [PATCH 5/5] Refactor ENV_FILE and PROJECT_NAME handling --- simoc.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/simoc.py b/simoc.py index 280afcee..daf2f211 100644 --- a/simoc.py +++ b/simoc.py @@ -509,14 +509,14 @@ def create_help(cmds): '--docker-file', metavar='FILE', default=COMPOSE_FILE, help='the docker compose yml file (default: %(default)r)' ) - parser.add_argument( - '--env-file', metavar='FILE', type=pathlib.Path, default=ENV_FILE, - help='the env file (default: %(default)r)' - ) parser.add_argument( '--project-name', metavar='NAME', help='the project name for docker compose' ) + parser.add_argument( + '--env-file', metavar='FILE', type=pathlib.Path, + help='the env file with the deployment-specific variables' + ) parser.add_argument( '--with-dev-backend', action='store_true', help='use the dev backend flask container' @@ -538,16 +538,16 @@ def create_help(cmds): COMPOSE_FILE = args.docker_file DOCKER_COMPOSE_CMD = ['docker', 'compose', '-f', COMPOSE_FILE] - if args.env_file: - ENV_FILE = args.env_file - ENVVARS = update_env(ENV_FILE) - if args.project_name: # use project name if specified PROJECT_NAME = args.project_name elif args.env_file: # or use env file name if specified PROJECT_NAME = args.env_file.stem - # or use default 'simoc' - DOCKER_COMPOSE_CMD = ['docker', 'compose', '-f', COMPOSE_FILE, '-p', PROJECT_NAME] + # or use default PROJECT_NAME + DOCKER_COMPOSE_CMD.extend(['-p', PROJECT_NAME]) + + if args.env_file: + ENV_FILE = args.env_file + ENVVARS = update_env(ENV_FILE) if args.dev_backend_yml and not args.with_dev_backend: parser.error("Can't specify the dev backend yml without --with-dev-backend")