111 lines
3.8 KiB
Bash
Executable File
111 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Keep this script rooted at the repository so `docker compose port` resolves the
|
|
# same compose project no matter which shell location invoked `make`.
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
cd "${PROJECT_ROOT}"
|
|
|
|
# Docker Desktop and Linux Docker expose published ports differently. The
|
|
# default keeps the output useful before containers are fully healthy or when
|
|
# Docker is not running yet.
|
|
published_port() {
|
|
local service="$1"
|
|
local container_port="$2"
|
|
local default_port="$3"
|
|
local published=""
|
|
|
|
published="$(docker compose port "${service}" "${container_port}" 2>/dev/null | head -n 1 || true)"
|
|
if [[ -z "${published}" ]]; then
|
|
printf '%s' "${default_port}"
|
|
return
|
|
fi
|
|
|
|
printf '%s' "${published##*:}"
|
|
}
|
|
|
|
# The host LAN address is useful when testing from another device on the same
|
|
# network. Docker service DNS below is still the address containers should use.
|
|
detect_lan_ip() {
|
|
if command -v ipconfig >/dev/null 2>&1; then
|
|
ipconfig getifaddr en0 2>/dev/null && return
|
|
ipconfig getifaddr en1 2>/dev/null && return
|
|
fi
|
|
|
|
if command -v hostname >/dev/null 2>&1; then
|
|
hostname -I 2>/dev/null | awk '{print $1}' && return
|
|
fi
|
|
|
|
printf '-'
|
|
}
|
|
|
|
format_address() {
|
|
local scheme="$1"
|
|
local host="$2"
|
|
local port="$3"
|
|
local path="${4:-}"
|
|
|
|
if [[ "${host}" == "-" ]]; then
|
|
printf '-'
|
|
return
|
|
fi
|
|
|
|
case "${scheme}" in
|
|
http|ws)
|
|
printf '%s://%s:%s%s' "${scheme}" "${host}" "${port}" "${path}"
|
|
;;
|
|
grpc|tcp)
|
|
printf '%s:%s' "${host}" "${port}"
|
|
;;
|
|
*)
|
|
printf '%s:%s' "${host}" "${port}"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
print_row() {
|
|
local service="$1"
|
|
local purpose="$2"
|
|
local scheme="$3"
|
|
local container_host="$4"
|
|
local container_port="$5"
|
|
local default_host_port="$6"
|
|
local path="${7:-}"
|
|
local host_port=""
|
|
local local_addr=""
|
|
local lan_addr=""
|
|
local docker_addr=""
|
|
|
|
host_port="$(published_port "${service}" "${container_port}" "${default_host_port}")"
|
|
local_addr="$(format_address "${scheme}" "127.0.0.1" "${host_port}" "${path}")"
|
|
lan_addr="$(format_address "${scheme}" "${LAN_IP}" "${host_port}" "${path}")"
|
|
docker_addr="$(format_address "${scheme}" "${container_host}" "${container_port}" "${path}")"
|
|
|
|
printf '%-18s %-18s %-30s %-30s %-30s\n' "${service}" "${purpose}" "${local_addr}" "${lan_addr}" "${docker_addr}"
|
|
}
|
|
|
|
LAN_IP="$(detect_lan_ip)"
|
|
|
|
printf '\nCompose service addresses\n'
|
|
printf '%-18s %-18s %-30s %-30s %-30s\n' "SERVICE" "PORT" "LOCAL" "HOST_LAN" "DOCKER_NETWORK"
|
|
printf '%-18s %-18s %-30s %-30s %-30s\n' "------------------" "------------------" "------------------------------" "------------------------------" "------------------------------"
|
|
|
|
print_row "gateway-service" "HTTP JSON" "http" "gateway-service" "13000" "13000"
|
|
print_row "room-service" "gRPC" "grpc" "room-service" "13001" "13001"
|
|
print_row "wallet-service" "gRPC" "grpc" "wallet-service" "13004" "13004"
|
|
print_row "user-service" "gRPC" "grpc" "user-service" "13005" "13005"
|
|
print_row "activity-service" "gRPC" "grpc" "activity-service" "13006" "13006"
|
|
print_row "cron-service" "gRPC" "grpc" "cron-service" "13007" "13007"
|
|
print_row "robot-service" "gRPC" "grpc" "robot-service" "13011" "13011"
|
|
print_row "game-service" "gRPC" "grpc" "game-service" "13008" "13008"
|
|
print_row "notice-service" "gRPC" "grpc" "notice-service" "13009" "13009"
|
|
print_row "statistics-service" "Health" "http" "statistics-service" "13110" "13110" "/healthz/ready"
|
|
print_row "rocketmq-namesrv" "NameServer" "tcp" "rocketmq-namesrv" "9876" "9876"
|
|
print_row "rocketmq-broker" "Broker" "tcp" "rocketmq-broker" "10911" "10911"
|
|
print_row "mysql" "MySQL" "tcp" "mysql" "3306" "23306"
|
|
print_row "redis" "Redis" "tcp" "redis" "6379" "13379"
|
|
|
|
printf '\nUse LOCAL from the host machine, HOST_LAN from another device on the same LAN, and DOCKER_NETWORK only between compose containers.\n'
|