diff --git a/docker-compose.yml b/docker-compose.yml index 38c3894..30b2144 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,6 +15,40 @@ services: timeout: 5s retries: 5 + consul: + image: hashicorp/consul:latest + profiles: ["infra"] + ports: + - "${CONSUL_HTTP_PORT}:8500" + - "${CONSUL_DNS_PORT}:8600/udp" + command: "agent -server -bootstrap -ui -client=0.0.0.0" + networks: + - app-network + healthcheck: + test: ["CMD", "consul", "members"] + interval: 10s + timeout: 5s + retries: 5 + + postgres: + image: postgres:16-alpine + profiles: ["infra"] + ports: + - "${POSTGRES_PORT}:5432" + environment: + - POSTGRES_USER=${POSTGRES_USER} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + - POSTGRES_DB=${POSTGRES_DB} + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - app-network + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] + interval: 10s + timeout: 5s + retries: 5 + # ================= BACKEND ================= suite-api: @@ -32,6 +66,19 @@ services: - KEEPALIVE_ATTENDANCE_SYSTEM_FRONTEND_HOST=${KEEPALIVE_ATTENDANCE_SYSTEM_FRONTEND_HOST} - KEEPALIVE_REPORTS_BACKEND_HOST=${KEEPALIVE_REPORTS_BACKEND_HOST} - KEEPALIVE_REPORTS_FRONTEND_HOST=${KEEPALIVE_REPORTS_FRONTEND_HOST} + - KEEPALIVE_USERS_BACKEND_HOST=${KEEPALIVE_USERS_BACKEND_HOST} + - KEEPALIVE_USERS_FRONTEND_HOST=${KEEPALIVE_USERS_FRONTEND_HOST} + networks: + - app-network + + users-api: + image: ${DOCKER_REPO}/sca-users-api:${IMAGEM_UNSTABLE_LATEST} + profiles: ["app"] + ports: + - "${BACKEND_USERS_API_INTERNAL_PORT}:${BACKEND_USERS_API_INTERNAL_PORT}" + environment: + - ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT} + - SystemBaseConn=${SYSTEM_BASE_CONN} networks: - app-network @@ -81,7 +128,9 @@ services: - BACKEND_PEOPLE_API_URL=${EXTERNAL_HOST}:${BACKEND_PEOPLE_API_EXTERNAL_PORT} - BACKEND_ACCOUNT_API_URL=${EXTERNAL_HOST}:${BACKEND_ACCOUNT_API_EXTERNAL_PORT} - BACKEND_REPORTS_API_URL=${EXTERNAL_HOST}:${BACKEND_REPORTS_API_EXTERNAL_PORT} + - BACKEND_USERS_API_URL=${EXTERNAL_HOST}:${BACKEND_USERS_API_EXTERNAL_PORT} - FRONTEND_REPORTS_URL=${EXTERNAL_HOST}:${FRONTEND_REPORTS_APP_EXTERNAL_PORT} + - FRONTEND_USERS_URL=${EXTERNAL_HOST}:${FRONTEND_USERS_APP_EXTERNAL_PORT} command: > sh -c "apk add --no-cache gettext && envsubst < /config.template.json > /output/config.json && @@ -146,4 +195,5 @@ networks: volumes: mongodb_data: + postgres_data: config-volume: \ No newline at end of file diff --git a/install.sh b/install.sh index df0b024..96f2912 100644 --- a/install.sh +++ b/install.sh @@ -4,7 +4,7 @@ # πŸš€ Instalador - AttendanceSystem # Uso: # bash <(curl -fsSL \ -# "https://git.seventh.com.br/seventh.p7/attendance-system.install/raw/branch/develop/install.sh") +# "https://git.seventh.com.br/seventh.p7/attendance-system.install/raw/branch/feature%2FSVTH-575---install-users/install.sh") # ============================================================== # ── Redireciona stdin para o terminal quando rodado via curl | bash ── @@ -28,7 +28,7 @@ NC='\033[0m' # ─── RepositΓ³rio Git ────────────────────────────────────────── INSTALL_DIR="attendancesystem" -BRANCH="${BRANCH:-develop}" +BRANCH="${BRANCH:-feature/SVTH-575---install-users}" ENV_FILE="" GIT_REPO="https://git.seventh.com.br/seventh.p7/attendance-system.install.git" @@ -226,6 +226,7 @@ collect_internal_ports() { ask BACKEND_ATTENDANCESYSTEM_API_INTERNAL_PORT "Backend AttendanceSystem API" "${BACKEND_ATTENDANCESYSTEM_API_INTERNAL_PORT:-10102}" 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:-10106}" 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}" @@ -242,6 +243,7 @@ collect_external_ports() { ask BACKEND_ATTENDANCESYSTEM_API_EXTERNAL_PORT "Backend AttendanceSystem API" "${BACKEND_ATTENDANCESYSTEM_API_EXTERNAL_PORT:-$BACKEND_ATTENDANCESYSTEM_API_INTERNAL_PORT}" 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 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}" @@ -249,11 +251,6 @@ collect_external_ports() { ask FRONTEND_REPORTS_APP_EXTERNAL_PORT "Frontend Reports" "${FRONTEND_REPORTS_APP_EXTERNAL_PORT:-$FRONTEND_REPORTS_APP_INTERNAL_PORT}" } -collect_database() { - print_section "5. Banco de Dados" - ask MONGO_PORT "MongoDB (porta interna)" "${MONGO_PORT:-27017}" -} - # ══════════════════════════════════════════════════════════════ # Wizard principal β€” coleta com navegaΓ§Γ£o # ══════════════════════════════════════════════════════════════ @@ -278,15 +275,15 @@ collect_config() { BACKEND_ATTENDANCESYSTEM_API_EXTERNAL_PORT="$BACKEND_ATTENDANCESYSTEM_API_INTERNAL_PORT" 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" 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" print_ok "Portas externas definidas iguais Γ s internas." fi - - collect_database } # ══════════════════════════════════════════════════════════════ @@ -309,15 +306,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 : ${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}" - echo -e " Frontend Suite/People/Attendance/Account/Reports : ${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}" + 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 "" echo -e " ${BOLD}[4] Portas Externas${NC}" - echo -e " Backend Suite/People/Attendance/Account/Reports : ${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}" - echo -e " Frontend Suite/People/Attendance/Account/Reports : ${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}" - echo "" - echo -e " ${BOLD}[5] Banco de Dados${NC}" - echo -e " MongoDB : ${BOLD}${MONGO_PORT}${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 "" echo -e " ──────────────────────────────────────────────────────────────" echo -e " ${GREEN}${BOLD}[C]${NC} Confirmar e continuar ${RED}${BOLD}[X]${NC} Cancelar instalaΓ§Γ£o" @@ -331,7 +325,6 @@ show_summary() { 2) collect_system_base ;; 3) collect_internal_ports ;; 4) collect_external_ports ;; - 5) collect_database ;; C) break ;; X) echo "" @@ -339,7 +332,7 @@ show_summary() { exit 0 ;; *) - print_warn "OpΓ§Γ£o invΓ‘lida. Digite 1-5, C ou X." + print_warn "OpΓ§Γ£o invΓ‘lida. Digite 1-4, C ou X." ;; esac done @@ -370,10 +363,20 @@ IMAGEM_RELEASE=2.0 NGINX_DEFAULT_PORT=80 # ── MongoDB ─────────────────────────────────────────────── -MONGO_PORT=${MONGO_PORT} +MONGO_PORT=27017 MONGODB_CONNECTION_STRING=mongodb://mongodb:27017/suitedb MONGODB_DATABASE=suitedb +# ── PostgreSQL ──────────────────────────────────────────── +POSTGRES_PORT=5432 +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +POSTGRES_DB=attendancesystem + +# ── Consul ──────────────────────────────────────────────── +CONSUL_HTTP_PORT=8500 +CONSUL_DNS_PORT=8600 + # ── Sistema Base ────────────────────────────────────────── SYSTEM_BASE_CONN=${SYSTEM_BASE_CONN} SYSTEM_BASE_HOST=${SYSTEM_BASE_HOST} @@ -452,7 +455,7 @@ start_environment() { echo -e " ${BOLD}make install${NC} β†’ sobe o projeto" echo -e " ${BOLD}make update${NC} β†’ atualiza o projeto" echo -e " ${BOLD}make app${NC} β†’ sobe apenas a aplicaΓ§Γ£o" - echo -e " ${BOLD}make infra${NC} β†’ sobe apenas a infra (MongoDB)" + echo -e " ${BOLD}make infra${NC} β†’ sobe apenas a infra (MongoDB, PostgreSQL, Consul)" echo -e " ${BOLD}make nuke-project${NC} β†’ limpa o projeto" echo -e " ${BOLD}make nuke${NC} β†’ limpa tudo (cuidado!)" echo ""