Add tenant management container and update management script for improved tenant operations

This commit is contained in:
2026-04-20 15:36:02 +02:00
parent 3044b36e9f
commit eb912c3a73
3 changed files with 20 additions and 5 deletions
+12
View File
@@ -196,3 +196,15 @@ networks:
# - Medium (5-10 tenants): 4GB RAM, 2-4 CPU cores
# - Large (10-20 tenants): 8GB RAM, 4-8 CPU cores
# - Jumbo (20+ tenants): 16GB+ RAM, 8+ CPU cores with clustering
# Management Container for multi-tenant scripts
tenant-manager:
image: bash
container_name: tenant-manager
restart: "no"
profiles:
- tools
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- .:/workspace
entrypoint: ["bash", "-c", "cd /workspace && ./manage-tenant.sh \"$$@\"", "--"]
+5 -5
View File
@@ -45,7 +45,7 @@ case "$COMMAND" in
# Initialize tenant database via Python inside container
echo "Initializing database for $TENANT_ID..."
APP_CONTAINER=$(docker-compose -f docker-compose-multitenant.yml ps -q app | head -n 1)
APP_CONTAINER=$(docker ps -qf "name=app" | head -n 1)
if [ -n "$APP_CONTAINER" ]; then
docker exec $APP_CONTAINER python3 -c "
import sys; sys.path.insert(0, '/app/Web'); import tenant, settings
@@ -70,7 +70,7 @@ print(f'Tenant {sys.argv[1]} database initialized.')
read confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
echo "Removing tenant '$TENANT_ID'..."
APP_CONTAINER=$(docker-compose -f docker-compose-multitenant.yml ps -q app | head -n 1)
APP_CONTAINER=$(docker ps -qf "name=app" | head -n 1)
if [ -n "$APP_CONTAINER" ]; then
docker exec $APP_CONTAINER python3 -c "
import sys; sys.path.insert(0, '/app/Web'); import tenant, settings
@@ -95,7 +95,7 @@ print(f'Database for tenant {sys.argv[1]} dropped.')
echo "Restarting tenant '$TENANT_ID' (clearing session/cache)..."
# To restart a single tenant without restarting the global python processes,
# we can invalidate their cache or drop their sessions collection to sign everyone out
APP_CONTAINER=$(docker-compose -f docker-compose-multitenant.yml ps -q app | head -n 1)
APP_CONTAINER=$(docker ps -qf "name=app" | head -n 1)
if [ -n "$APP_CONTAINER" ]; then
docker exec $APP_CONTAINER python3 -c "
import sys; sys.path.insert(0, '/app/Web'); import tenant, settings
@@ -112,13 +112,13 @@ print(f'Tenant {sys.argv[1]} session cache cleared. Tenant restarted.')
restart-all)
echo "Restarting all application instances with zero-downtime rolling restart..."
docker-compose -f docker-compose-multitenant.yml restart app
docker restart $(docker ps -qf "name=app")
echo "Global restart complete."
;;
list)
echo "Listing active tenants (Databases):"
APP_CONTAINER=$(docker-compose -f docker-compose-multitenant.yml ps -q app | head -n 1)
APP_CONTAINER=$(docker ps -qf "name=app" | head -n 1)
if [ -n "$APP_CONTAINER" ]; then
docker exec $APP_CONTAINER python3 -c "
import sys; sys.path.insert(0, '/app/Web'); import tenant, settings
+3
View File
@@ -0,0 +1,3 @@
#!/bin/bash
# Wrapper to run tenant management fully containerized via docker-compose
docker-compose -f docker-compose-multitenant.yml --profile tools run --rm tenant-manager "$@"