Enhance multi-tenant support: update scripts to handle multi-tenant Docker compose files and secure admin credentials
This commit is contained in:
+4
-3
@@ -48,11 +48,12 @@ case "$COMMAND" in
|
|||||||
APP_CONTAINER=$(docker ps -qf "name=app" | head -n 1)
|
APP_CONTAINER=$(docker ps -qf "name=app" | head -n 1)
|
||||||
if [ -n "$APP_CONTAINER" ]; then
|
if [ -n "$APP_CONTAINER" ]; then
|
||||||
docker exec $APP_CONTAINER python3 -c "
|
docker exec $APP_CONTAINER python3 -c "
|
||||||
import sys; sys.path.insert(0, '/app/Web'); import settings; from pymongo import MongoClient
|
import sys; sys.path.insert(0, '/app/Web'); import settings; from pymongo import MongoClient; import hashlib
|
||||||
client = MongoClient(settings.MONGODB_HOST, int(settings.MONGODB_PORT))
|
client = MongoClient(settings.MONGODB_HOST, int(settings.MONGODB_PORT))
|
||||||
db = client[f'{settings.MONGODB_DB}_{sys.argv[1]}']
|
db = client[f'{settings.MONGODB_DB}_{sys.argv[1]}']
|
||||||
db.users.insert_one({'username': 'admin', 'password': 'hashed_password_here', 'role': 'admin'})
|
hashed_pw = hashlib.sha512('admin123'.encode()).hexdigest()
|
||||||
print(f'Tenant {sys.argv[1]} database initialized.')
|
db.users.insert_one({'Username': 'admin', 'Password': hashed_pw, 'Role': 'admin', 'Name': 'Admin', 'Nachname': 'User'})
|
||||||
|
print(f'Tenant {sys.argv[1]} database initialized. Default admin: admin / admin123')
|
||||||
" "$TENANT_ID"
|
" "$TENANT_ID"
|
||||||
echo "Tenant '$TENANT_ID' successfully added. Ready to use."
|
echo "Tenant '$TENANT_ID' successfully added. Ready to use."
|
||||||
else
|
else
|
||||||
|
|||||||
+2
-1
@@ -3,5 +3,6 @@ set -euo pipefail
|
|||||||
|
|
||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
|
||||||
"$SCRIPT_DIR/stop.sh"
|
"$SCRIPT_DIR/stop.sh" "$@"
|
||||||
|
"$SCRIPT_DIR/start.sh" "$@"
|
||||||
"$SCRIPT_DIR/start.sh"
|
"$SCRIPT_DIR/start.sh"
|
||||||
@@ -18,6 +18,7 @@ HTTP_PORT_VALUE="80"
|
|||||||
HTTPS_PORT_VALUE="443"
|
HTTPS_PORT_VALUE="443"
|
||||||
CRON_SETUP_VALUE="${INVENTAR_SETUP_CRON:-1}"
|
CRON_SETUP_VALUE="${INVENTAR_SETUP_CRON:-1}"
|
||||||
APP_IMAGE_VALUE="${INVENTAR_APP_IMAGE:-$APP_IMAGE_REPO:latest}"
|
APP_IMAGE_VALUE="${INVENTAR_APP_IMAGE:-$APP_IMAGE_REPO:latest}"
|
||||||
|
COMPOSE_FILE="docker-compose.yml"
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
@@ -26,6 +27,7 @@ Usage: $0 [options]
|
|||||||
Options:
|
Options:
|
||||||
--no-cron Do not create or update cron jobs
|
--no-cron Do not create or update cron jobs
|
||||||
--with-cron Create/update cron jobs (default)
|
--with-cron Create/update cron jobs (default)
|
||||||
|
--multitenant Use the multi-tenant architecture deployment
|
||||||
-h, --help Show this help message
|
-h, --help Show this help message
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@@ -41,6 +43,10 @@ parse_args() {
|
|||||||
CRON_SETUP_VALUE="1"
|
CRON_SETUP_VALUE="1"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
--multitenant)
|
||||||
|
COMPOSE_FILE="docker-compose-multitenant.yml"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
@@ -450,7 +456,7 @@ stack_owns_host_port() {
|
|||||||
local container_port="$2"
|
local container_port="$2"
|
||||||
local mapped_port
|
local mapped_port
|
||||||
|
|
||||||
mapped_port="$(docker compose --env-file "$ENV_FILE" port nginx "$container_port" 2>/dev/null | tail -n1 || true)"
|
mapped_port="$(docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" port nginx "$container_port" 2>/dev/null | tail -n1 || true)"
|
||||||
if [ -z "$mapped_port" ]; then
|
if [ -z "$mapped_port" ]; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -550,7 +556,7 @@ EOF
|
|||||||
|
|
||||||
verify_stack_health() {
|
verify_stack_health() {
|
||||||
local compose_args running_services retry_count=0
|
local compose_args running_services retry_count=0
|
||||||
compose_args=(--env-file "$ENV_FILE")
|
compose_args=(-f "$COMPOSE_FILE" --env-file "$ENV_FILE")
|
||||||
|
|
||||||
# Try health check with optional restart on first failure
|
# Try health check with optional restart on first failure
|
||||||
while [[ $retry_count -lt 2 ]]; do
|
while [[ $retry_count -lt 2 ]]; do
|
||||||
@@ -605,7 +611,7 @@ ensure_app_image_loaded
|
|||||||
write_env_file
|
write_env_file
|
||||||
|
|
||||||
echo "Starting Inventarsystem Docker stack (app + mongodb)..."
|
echo "Starting Inventarsystem Docker stack (app + mongodb)..."
|
||||||
docker compose --env-file "$ENV_FILE" up -d --remove-orphans
|
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d --remove-orphans
|
||||||
|
|
||||||
verify_stack_health
|
verify_stack_health
|
||||||
|
|
||||||
|
|||||||
@@ -4,12 +4,26 @@ set -euo pipefail
|
|||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
cd "$SCRIPT_DIR"
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
COMPOSE_FILE="docker-compose.yml"
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--multitenant)
|
||||||
|
COMPOSE_FILE="docker-compose-multitenant.yml"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
if ! command -v docker >/dev/null 2>&1; then
|
if ! command -v docker >/dev/null 2>&1; then
|
||||||
echo "Error: docker command not found. Install Docker first."
|
echo "Error: docker command not found. Install Docker first."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Stopping Inventarsystem Docker stack..."
|
echo "Stopping Inventarsystem Docker stack..."
|
||||||
docker compose down
|
docker compose -f "$COMPOSE_FILE" down
|
||||||
|
|
||||||
echo "Stack stopped."
|
echo "Stack stopped."
|
||||||
|
|||||||
Reference in New Issue
Block a user