Add tenant management container and update management script for improved tenant operations
This commit is contained in:
@@ -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
@@ -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
|
||||
|
||||
Executable
+3
@@ -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 "$@"
|
||||
Reference in New Issue
Block a user