#SVTH-575 - adição das configurações do rabbitmq e do módulo de tenants.

This commit is contained in:
2026-07-21 12:18:11 -03:00
parent 279085a18f
commit bb7eb2be85
3 changed files with 133 additions and 4 deletions

View File

@@ -227,12 +227,14 @@ collect_internal_ports() {
ask BACKEND_ACCOUNT_API_INTERNAL_PORT "Backend Account API" "${BACKEND_ACCOUNT_API_INTERNAL_PORT:-10103}"
ask BACKEND_REPORTS_API_INTERNAL_PORT "Backend Reports API" "${BACKEND_REPORTS_API_INTERNAL_PORT:-10105}"
ask BACKEND_USERS_API_INTERNAL_PORT "Backend Users API" "${BACKEND_USERS_API_INTERNAL_PORT:-10109}"
ask BACKEND_TENANTS_API_INTERNAL_PORT "Backend Tenants API" "${BACKEND_TENANTS_API_INTERNAL_PORT:-10110}"
ask FRONTEND_SUITE_APP_INTERNAL_PORT "Frontend Suite" "${FRONTEND_SUITE_APP_INTERNAL_PORT:-4200}"
ask FRONTEND_PEOPLE_APP_INTERNAL_PORT "Frontend People" "${FRONTEND_PEOPLE_APP_INTERNAL_PORT:-4201}"
ask FRONTEND_ATTENDANCESYSTEM_APP_INTERNAL_PORT "Frontend AttendanceSystem" "${FRONTEND_ATTENDANCESYSTEM_APP_INTERNAL_PORT:-4202}"
ask FRONTEND_ACCOUNT_APP_INTERNAL_PORT "Frontend Account" "${FRONTEND_ACCOUNT_APP_INTERNAL_PORT:-4203}"
ask FRONTEND_REPORTS_APP_INTERNAL_PORT "Frontend Reports" "${FRONTEND_REPORTS_APP_INTERNAL_PORT:-4205}"
ask FRONTEND_USERS_APP_INTERNAL_PORT "Frontend Users" "${FRONTEND_USERS_APP_INTERNAL_PORT:-4209}"
ask FRONTEND_TENANTS_APP_INTERNAL_PORT "Frontend Tenants" "${FRONTEND_TENANTS_APP_INTERNAL_PORT:-4210}"
}
collect_external_ports() {
@@ -245,12 +247,14 @@ collect_external_ports() {
ask BACKEND_ACCOUNT_API_EXTERNAL_PORT "Backend Account API" "${BACKEND_ACCOUNT_API_EXTERNAL_PORT:-$BACKEND_ACCOUNT_API_INTERNAL_PORT}"
ask BACKEND_REPORTS_API_EXTERNAL_PORT "Backend Reports API" "${BACKEND_REPORTS_API_EXTERNAL_PORT:-$BACKEND_REPORTS_API_INTERNAL_PORT}"
ask BACKEND_USERS_API_EXTERNAL_PORT "Backend Users API" "${BACKEND_USERS_API_EXTERNAL_PORT:-$BACKEND_USERS_API_INTERNAL_PORT}"
ask BACKEND_TENANTS_API_EXTERNAL_PORT "Backend Tenants API" "${BACKEND_TENANTS_API_EXTERNAL_PORT:-$BACKEND_TENANTS_API_INTERNAL_PORT}"
ask FRONTEND_SUITE_APP_EXTERNAL_PORT "Frontend Suite" "${FRONTEND_SUITE_APP_EXTERNAL_PORT:-$FRONTEND_SUITE_APP_INTERNAL_PORT}"
ask FRONTEND_PEOPLE_APP_EXTERNAL_PORT "Frontend People" "${FRONTEND_PEOPLE_APP_EXTERNAL_PORT:-$FRONTEND_PEOPLE_APP_INTERNAL_PORT}"
ask FRONTEND_ATTENDANCESYSTEM_APP_EXTERNAL_PORT "Frontend AttendanceSystem" "${FRONTEND_ATTENDANCESYSTEM_APP_EXTERNAL_PORT:-$FRONTEND_ATTENDANCESYSTEM_APP_INTERNAL_PORT}"
ask FRONTEND_ACCOUNT_APP_EXTERNAL_PORT "Frontend Account" "${FRONTEND_ACCOUNT_APP_EXTERNAL_PORT:-$FRONTEND_ACCOUNT_APP_INTERNAL_PORT}"
ask FRONTEND_REPORTS_APP_EXTERNAL_PORT "Frontend Reports" "${FRONTEND_REPORTS_APP_EXTERNAL_PORT:-$FRONTEND_REPORTS_APP_INTERNAL_PORT}"
ask FRONTEND_USERS_APP_EXTERNAL_PORT "Frontend Users" "${FRONTEND_USERS_APP_EXTERNAL_PORT:-$FRONTEND_USERS_APP_INTERNAL_PORT}"
ask FRONTEND_TENANTS_APP_EXTERNAL_PORT "Frontend Tenants" "${FRONTEND_TENANTS_APP_EXTERNAL_PORT:-$FRONTEND_TENANTS_APP_INTERNAL_PORT}"
}
collect_rabbitmq() {
@@ -284,12 +288,14 @@ collect_config() {
BACKEND_ACCOUNT_API_EXTERNAL_PORT="$BACKEND_ACCOUNT_API_INTERNAL_PORT"
BACKEND_REPORTS_API_EXTERNAL_PORT="$BACKEND_REPORTS_API_INTERNAL_PORT"
BACKEND_USERS_API_EXTERNAL_PORT="$BACKEND_USERS_API_INTERNAL_PORT"
BACKEND_TENANTS_API_EXTERNAL_PORT="$BACKEND_TENANTS_API_INTERNAL_PORT"
FRONTEND_SUITE_APP_EXTERNAL_PORT="$FRONTEND_SUITE_APP_INTERNAL_PORT"
FRONTEND_PEOPLE_APP_EXTERNAL_PORT="$FRONTEND_PEOPLE_APP_INTERNAL_PORT"
FRONTEND_ATTENDANCESYSTEM_APP_EXTERNAL_PORT="$FRONTEND_ATTENDANCESYSTEM_APP_INTERNAL_PORT"
FRONTEND_ACCOUNT_APP_EXTERNAL_PORT="$FRONTEND_ACCOUNT_APP_INTERNAL_PORT"
FRONTEND_REPORTS_APP_EXTERNAL_PORT="$FRONTEND_REPORTS_APP_INTERNAL_PORT"
FRONTEND_USERS_APP_EXTERNAL_PORT="$FRONTEND_USERS_APP_INTERNAL_PORT"
FRONTEND_TENANTS_APP_EXTERNAL_PORT="$FRONTEND_TENANTS_APP_INTERNAL_PORT"
print_ok "Portas externas definidas iguais às internas."
fi
@@ -316,12 +322,12 @@ show_summary() {
echo -e " Porta : ${BOLD}${SYSTEM_BASE_PORT}${NC}"
echo ""
echo -e " ${BOLD}[3] Portas Internas${NC}"
echo -e " Backend Suite/People/Attendance/Account/Reports/Users : ${BOLD}${BACKEND_SUITE_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_PEOPLE_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_ATTENDANCESYSTEM_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_ACCOUNT_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_REPORTS_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_USERS_API_INTERNAL_PORT}${NC}"
echo -e " Frontend Suite/People/Attendance/Account/Reports/Users : ${BOLD}${FRONTEND_SUITE_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_PEOPLE_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_ATTENDANCESYSTEM_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_ACCOUNT_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_REPORTS_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_USERS_APP_INTERNAL_PORT}${NC}"
echo -e " Backend Suite/People/Attendance/Account/Reports/Users/Tenants : ${BOLD}${BACKEND_SUITE_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_PEOPLE_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_ATTENDANCESYSTEM_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_ACCOUNT_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_REPORTS_API_INTERNAL_PORT}${NC} / ${BOLD}${BACKEND_USERS_API_INTERNAL_PORT}${NC}" / ${BOLD}${BACKEND_TENANTS_API_INTERNAL_PORT}${NC}"
echo -e " Frontend Suite/People/Attendance/Account/Reports/Users/Tenants : ${BOLD}${FRONTEND_SUITE_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_PEOPLE_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_ATTENDANCESYSTEM_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_ACCOUNT_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_REPORTS_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_USERS_APP_INTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_TENANTS_APP_INTERNAL_PORT}${NC}"
echo ""
echo -e " ${BOLD}[4] Portas Externas${NC}"
echo -e " Backend Suite/People/Attendance/Account/Reports/Users : ${BOLD}${BACKEND_SUITE_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_PEOPLE_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_ATTENDANCESYSTEM_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_ACCOUNT_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_REPORTS_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_USERS_API_EXTERNAL_PORT}${NC}"
echo -e " Frontend Suite/People/Attendance/Account/Reports/Users : ${BOLD}${FRONTEND_SUITE_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_PEOPLE_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_ATTENDANCESYSTEM_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_ACCOUNT_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_REPORTS_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_USERS_APP_EXTERNAL_PORT}${NC}"
echo -e " Backend Suite/People/Attendance/Account/Reports/Users/Tenants : ${BOLD}${BACKEND_SUITE_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_PEOPLE_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_ATTENDANCESYSTEM_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_ACCOUNT_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_REPORTS_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_USERS_API_EXTERNAL_PORT}${NC} / ${BOLD}${BACKEND_TENANTS_API_EXTERNAL_PORT}${NC}"
echo -e " Frontend Suite/People/Attendance/Account/Reports/Users/Tenants : ${BOLD}${FRONTEND_SUITE_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_PEOPLE_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_ATTENDANCESYSTEM_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_ACCOUNT_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_REPORTS_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_USERS_APP_EXTERNAL_PORT}${NC} / ${BOLD}${FRONTEND_TENANTS_APP_EXTERNAL_PORT}${NC}"
echo ""
echo -e " ${BOLD}[5] RabbitMQ${NC}"
echo -e " Usuário : ${BOLD}${RABBITMQ_USER}${NC}"
@@ -372,6 +378,9 @@ generate_envs() {
local KEEPALIVE_BACKEND_USERS="${EXTERNAL_HOST}:${BACKEND_USERS_API_EXTERNAL_PORT}"
local KEEPALIVE_FRONTEND_USERS="${EXTERNAL_HOST}:${FRONTEND_USERS_APP_EXTERNAL_PORT}"
local KEEPALIVE_BACKEND_TENANTS="${EXTERNAL_HOST}:${BACKEND_TENANTS_API_EXTERNAL_PORT}"
local KEEPALIVE_FRONTEND_TENANTS="${EXTERNAL_HOST}:${FRONTEND_TENANTS_APP_EXTERNAL_PORT}"
cat > "$BASE_DIR/.env.prod" <<EOF
ASPNETCORE_ENVIRONMENT=Production
DOCKER_REPO=seventhltda
@@ -402,6 +411,28 @@ RABBITMQ_VHOST=/
RABBITMQ_USER=${RABBITMQ_USER}
RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
# ── RabbitMQ (mensageria entre suite/users/reports) ──────
# Um vhost por serviço: quem consome é dono do vhost onde a fila mora.
# Usuário "owner" tem acesso total ao próprio vhost; "writer" só publica
# (write-only) no vhost de um serviço vizinho — ver rabbitmq/definitions.json.
RABBITMQ_SUITE_VHOST=suite
RABBITMQ_USERS_VHOST=users
RABBITMQ_REPORTS_VHOST=reports
RABBITMQ_SUITE_OWNER_USER=suite-owner
RABBITMQ_SUITE_OWNER_PASSWORD=suite-owner-secret
RABBITMQ_USERS_OWNER_USER=users-owner
RABBITMQ_USERS_OWNER_PASSWORD=users-owner-secret
RABBITMQ_REPORTS_OWNER_USER=reports-owner
RABBITMQ_REPORTS_OWNER_PASSWORD=reports-owner-secret
RABBITMQ_SUITE_WRITER_USER=suite-writer
RABBITMQ_SUITE_WRITER_PASSWORD=suite-writer-secret
RABBITMQ_USERS_WRITER_USER=users-writer
RABBITMQ_USERS_WRITER_PASSWORD=users-writer-secret
RABBITMQ_REPORTS_WRITER_USER=reports-writer
RABBITMQ_REPORTS_WRITER_PASSWORD=reports-writer-secret
# ── Sistema Base ──────────────────────────────────────────
SYSTEM_BASE_CONN=${SYSTEM_BASE_CONN}
SYSTEM_BASE_HOST=${SYSTEM_BASE_HOST}
@@ -430,6 +461,9 @@ BACKEND_REPORTS_API_EXTERNAL_PORT=${BACKEND_REPORTS_API_EXTERNAL_PORT}
BACKEND_USERS_API_INTERNAL_PORT=${BACKEND_USERS_API_INTERNAL_PORT}
BACKEND_USERS_API_EXTERNAL_PORT=${BACKEND_USERS_API_EXTERNAL_PORT}
BACKEND_TENANTS_API_INTERNAL_PORT=${BACKEND_TENANTS_API_INTERNAL_PORT}
BACKEND_TENANTS_API_EXTERNAL_PORT=${BACKEND_TENANTS_API_EXTERNAL_PORT}
BACKEND_ATTENDANCESYSTEM_API_APPLICATIONNAME=AttendanceSystem
BACKEND_ATTENDANCESYSTEM_API_NAME=attendancesystem-api
@@ -452,6 +486,9 @@ FRONTEND_REPORTS_APP_EXTERNAL_PORT=${FRONTEND_REPORTS_APP_EXTERNAL_PORT}
FRONTEND_USERS_APP_INTERNAL_PORT=${FRONTEND_USERS_APP_INTERNAL_PORT}
FRONTEND_USERS_APP_EXTERNAL_PORT=${FRONTEND_USERS_APP_EXTERNAL_PORT}
FRONTEND_TENANTS_APP_INTERNAL_PORT=${FRONTEND_TENANTS_APP_INTERNAL_PORT}
FRONTEND_TENANTS_APP_EXTERNAL_PORT=${FRONTEND_TENANTS_APP_EXTERNAL_PORT}
# ── Keepalive ─────────────────────────────────────────────
KEEPALIVE_ATTENDANCE_SYSTEM_BACKEND_HOST=${KEEPALIVE_BACKEND}
KEEPALIVE_ATTENDANCE_SYSTEM_FRONTEND_HOST=${KEEPALIVE_FRONTEND}
@@ -462,10 +499,54 @@ KEEPALIVE_REPORTS_FRONTEND_HOST=${KEEPALIVE_FRONTEND_REPORTS}
KEEPALIVE_USERS_BACKEND_HOST=${KEEPALIVE_BACKEND_USERS}
KEEPALIVE_USERS_FRONTEND_HOST=${KEEPALIVE_FRONTEND_USERS}
KEEPALIVE_TENANTS_BACKEND_HOST=${KEEPALIVE_BACKEND_TENANTS}
KEEPALIVE_TENANTS_FRONTEND_HOST=${KEEPALIVE_FRONTEND_TENANTS}
EOF
print_ok ".env.prod gerado"
}
# ══════════════════════════════════════════════════════════════
# Gerar definitions.json do RabbitMQ (vhosts/usuários/permissões)
# ══════════════════════════════════════════════════════════════
generate_rabbitmq_definitions() {
local BASE_DIR="$INSTALL_DIR"
mkdir -p "$BASE_DIR/rabbitmq"
cat > "$BASE_DIR/rabbitmq/definitions.json" <<EOF
{
"vhosts": [
{"name": "${RABBITMQ_SUITE_VHOST}"},
{"name": "${RABBITMQ_USERS_VHOST}"},
{"name": "${RABBITMQ_REPORTS_VHOST}"}
],
"users": [
{"name": "${RABBITMQ_SUITE_OWNER_USER}", "password": "${RABBITMQ_SUITE_OWNER_PASSWORD}", "tags": []},
{"name": "${RABBITMQ_USERS_OWNER_USER}", "password": "${RABBITMQ_USERS_OWNER_PASSWORD}", "tags": []},
{"name": "${RABBITMQ_REPORTS_OWNER_USER}", "password": "${RABBITMQ_REPORTS_OWNER_PASSWORD}", "tags": []},
{"name": "${RABBITMQ_SUITE_WRITER_USER}", "password": "${RABBITMQ_SUITE_WRITER_PASSWORD}", "tags": []},
{"name": "${RABBITMQ_USERS_WRITER_USER}", "password": "${RABBITMQ_USERS_WRITER_PASSWORD}", "tags": []},
{"name": "${RABBITMQ_REPORTS_WRITER_USER}", "password": "${RABBITMQ_REPORTS_WRITER_PASSWORD}", "tags": []}
],
"permissions": [
{"user": "${RABBITMQ_SUITE_OWNER_USER}", "vhost": "${RABBITMQ_SUITE_VHOST}", "configure": ".*", "write": ".*", "read": ".*"},
{"user": "${RABBITMQ_USERS_OWNER_USER}", "vhost": "${RABBITMQ_USERS_VHOST}", "configure": ".*", "write": ".*", "read": ".*"},
{"user": "${RABBITMQ_REPORTS_OWNER_USER}", "vhost": "${RABBITMQ_REPORTS_VHOST}", "configure": ".*", "write": ".*", "read": ".*"},
{"user": "${RABBITMQ_SUITE_WRITER_USER}", "vhost": "${RABBITMQ_SUITE_VHOST}", "configure": "^$", "write": ".*", "read": "^$"},
{"user": "${RABBITMQ_USERS_WRITER_USER}", "vhost": "${RABBITMQ_USERS_VHOST}", "configure": "^$", "write": ".*", "read": "^$"},
{"user": "${RABBITMQ_REPORTS_WRITER_USER}", "vhost": "${RABBITMQ_REPORTS_VHOST}", "configure": "^$", "write": ".*", "read": "^$"},
{"user": "${RABBITMQ_USER}", "vhost": "${RABBITMQ_SUITE_VHOST}", "configure": ".*", "write": ".*", "read": ".*"},
{"user": "${RABBITMQ_USER}", "vhost": "${RABBITMQ_USERS_VHOST}", "configure": ".*", "write": ".*", "read": ".*"},
{"user": "${RABBITMQ_USER}", "vhost": "${RABBITMQ_REPORTS_VHOST}", "configure": ".*", "write": ".*", "read": ".*"}
]
}
EOF
print_ok "rabbitmq/definitions.json gerado"
}
# ══════════════════════════════════════════════════════════════
# Subir ambiente
# ══════════════════════════════════════════════════════════════
@@ -508,6 +589,7 @@ main() {
show_summary # resumo com menu de edição
generate_envs
generate_rabbitmq_definitions
if confirm "Deseja subir o ambiente agora?"; then
start_environment