feat(POS-FIX-6): completed feature
This commit is contained in:
@@ -28,14 +28,15 @@ Commands:
|
||||
start Install/build when needed, migrate, and start every service
|
||||
restart Stop managed processes, then start every service
|
||||
status Show PID, process state, HTTP status, and URLs
|
||||
check Verify all services are responding (exit 0 if all OK)
|
||||
stop Gracefully stop every managed HTTP process
|
||||
logs Follow all service logs (Ctrl-C exits without stopping services)
|
||||
urls Print localhost and LAN URLs
|
||||
watch Auto-respawn any dead service every WATCH_INTERVAL seconds
|
||||
|
||||
Environment overrides:
|
||||
LAN_IP, BACKEND_PORT, FRONTEND_PORT, ADMIN_PORT, STOREFRONT_PORT
|
||||
MDV_RUNTIME_DIR, START_TIMEOUT
|
||||
LAN_IP, BACKEND_PORT, ADMIN_PORT, TPV_PORT, FRONTEND_PORT, STOREFRONT_PORT
|
||||
MDV_RUNTIME_DIR, START_TIMEOUT, WATCH_INTERVAL
|
||||
EOF
|
||||
}
|
||||
|
||||
@@ -44,7 +45,7 @@ if [[ "$MODE" != "dev" && "$MODE" != "prod" ]]; then
|
||||
exit 2
|
||||
fi
|
||||
case "$ACTION" in
|
||||
start|restart|status|stop|logs|urls|watch) ;;
|
||||
start|restart|status|check|stop|logs|urls|watch) ;;
|
||||
*) usage >&2; exit 2 ;;
|
||||
esac
|
||||
|
||||
@@ -96,6 +97,17 @@ service_url() {
|
||||
printf 'http://%s:%s%s\n' "$host" "$(service_port "$service")" "$(service_path "$service")"
|
||||
}
|
||||
|
||||
service_domain() {
|
||||
# Returns the subdomain for Traefik/production access
|
||||
case "$1" in
|
||||
backend) echo "api-mv.rikrdo.com" ;;
|
||||
admin) echo "admin-mv.rikrdo.com" ;;
|
||||
tpv) echo "tpv-mv.rikrdo.com" ;;
|
||||
frontend) echo "shop-mv.rikrdo.com" ;;
|
||||
storefront) echo "seo-mv.rikrdo.com" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
pid_file() { printf '%s/%s.pid\n' "$RUNTIME_DIR" "$1"; }
|
||||
log_file() { printf '%s/%s.log\n' "$RUNTIME_DIR" "$1"; }
|
||||
|
||||
@@ -387,20 +399,71 @@ watch_loop() {
|
||||
done
|
||||
}
|
||||
|
||||
check_services() {
|
||||
# Verify all services are responding with HTTP 2xx or 3xx
|
||||
# Exit 0 if all OK, exit 1 if any service is down
|
||||
local service url code failed=0
|
||||
echo "Checking all services..."
|
||||
for service in "${SERVICES[@]}"; do
|
||||
url="$(service_url "$service")"
|
||||
code="$(curl --max-time 5 -sS -o /dev/null -w '%{http_code}' "$url" 2>/dev/null || true)"
|
||||
if [[ "$code" =~ ^[23] ]]; then
|
||||
echo "[OK] $service ($code) — $url"
|
||||
else
|
||||
echo "[FAIL] $service (HTTP $code) — $url"
|
||||
failed=1
|
||||
fi
|
||||
done
|
||||
echo
|
||||
if [[ $failed -eq 0 ]]; then
|
||||
echo "All services are up!"
|
||||
return 0
|
||||
else
|
||||
echo "Some services are down."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
print_urls() {
|
||||
# Detect if Traefik/production domains are reachable
|
||||
local api_domain="$(service_domain backend)"
|
||||
local admin_domain="$(service_domain admin)"
|
||||
local tpv_domain="$(service_domain tpv)"
|
||||
local shop_domain="$(service_domain frontend)"
|
||||
local seo_domain="$(service_domain storefront)"
|
||||
|
||||
cat <<EOF
|
||||
Mode: $MODE
|
||||
LAN IP: $LAN_ADDRESS
|
||||
|
||||
Backend (API): http://$LAN_ADDRESS:$BACKEND_PORT/health
|
||||
Admin backoffice: http://$LAN_ADDRESS:$ADMIN_PORT/
|
||||
POS TPV: http://$LAN_ADDRESS:$TPV_PORT/
|
||||
Customer frontend: http://$LAN_ADDRESS:$FRONTEND_PORT/
|
||||
SEO storefront: http://$LAN_ADDRESS:$STOREFRONT_PORT/
|
||||
Backend health: http://$LAN_ADDRESS:$BACKEND_PORT/health
|
||||
Swagger/OpenAPI: http://$LAN_ADDRESS:$BACKEND_PORT/docs
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
PORTS (local/dev)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ Service │ Port │ Local URL │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ Backend (API) │ $BACKEND_PORT │ http://127.0.0.1:$BACKEND_PORT/ │
|
||||
│ Admin │ $ADMIN_PORT │ http://127.0.0.1:$ADMIN_PORT/ │
|
||||
│ POS (TPV) │ $TPV_PORT │ http://127.0.0.1:$TPV_PORT/ │
|
||||
│ Frontend │ $FRONTEND_PORT │ http://127.0.0.1:$FRONTEND_PORT/ │
|
||||
│ Storefront │ $STOREFRONT_PORT │ http://127.0.0.1:$STOREFRONT_PORT/ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
Local equivalents use 127.0.0.1 with the same ports.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
DOMAINS (Traefik/production)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ Service │ Domain │ Auth │ Port │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ Backend (API) │ https://$api_domain │ Authelia │ $BACKEND_PORT │
|
||||
│ Admin │ https://$admin_domain │ Authelia │ $ADMIN_PORT │
|
||||
│ POS (TPV) │ https://$tpv_domain │ Authelia │ $TPV_PORT │
|
||||
│ Frontend │ https://$shop_domain │ Public │ $FRONTEND_PORT │
|
||||
│ Storefront │ https://$seo_domain │ Public │ $STOREFRONT_PORT │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
Backend health: https://$api_domain/health
|
||||
Swagger docs: https://$api_domain/docs
|
||||
EOF
|
||||
}
|
||||
|
||||
@@ -417,6 +480,7 @@ case "$ACTION" in
|
||||
start) start_all ;;
|
||||
restart) stop_all; start_all ;;
|
||||
status) status_all ;;
|
||||
check) check_services ;;
|
||||
stop) stop_all ;;
|
||||
logs) follow_logs ;;
|
||||
urls) print_urls ;;
|
||||
|
||||
Reference in New Issue
Block a user