- deploy/docker-compose.dev.yml 新增 media-server 服务 + coturn(profiles:public),
全部服务参数改为 env 变量注入,go-service 依赖 media-server
- deploy/.env.example / .env.local.example / .env.public.example 三份模板,
公网模板用 _REPLACE_WITH_*_ 占位符防"示例值上生产"
- scripts/start.sh / stop.sh / status.sh 新增 full 子命令对接 docker compose --profile public
- scripts/deploy-public.sh 新建:env 校验 + 端口 checklist + Docker 自检 +
--profile public up -d --build + 健康检查闭环
- docs/deployment/meeting-mvp.md 新建:双态部署全流程 + 强密码生成 + 防火墙 + FAQ
- 双模式 docker compose config 校验通过;deploy-public.sh 三种错误场景按预期退出
同步更新 CURRENT_STATUS / implementation.plan / project-context
Task 0-14 ✅ / 剩余 Task 15-16
Made-with: Cursor
68 lines
2.0 KiB
Bash
Executable File
68 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# EchoChat 服务状态查看脚本
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
RUN_DIR="$ROOT_DIR/.run"
|
||
|
||
COLOR_GREEN='\033[0;32m'
|
||
COLOR_RED='\033[0;31m'
|
||
COLOR_YELLOW='\033[0;33m'
|
||
COLOR_RESET='\033[0m'
|
||
|
||
check_port() {
|
||
local name="$1"
|
||
local port="$2"
|
||
local url="$3"
|
||
local pid
|
||
pid="$(lsof -iTCP:"$port" -sTCP:LISTEN -n -P -t 2>/dev/null | head -n1 || true)"
|
||
if [[ -n "$pid" ]]; then
|
||
printf " %-22s ${COLOR_GREEN}● RUNNING${COLOR_RESET} PID=%-8s %s\n" "$name (:$port)" "$pid" "$url"
|
||
else
|
||
printf " %-22s ${COLOR_RED}○ STOPPED${COLOR_RESET} %-12s %s\n" "$name (:$port)" "" "$url"
|
||
fi
|
||
}
|
||
|
||
check_container() {
|
||
local name="$1"
|
||
local port="$2"
|
||
local status
|
||
status="$(docker inspect -f '{{.State.Status}}' "$name" 2>/dev/null || echo 'missing')"
|
||
case "$status" in
|
||
running)
|
||
printf " %-22s ${COLOR_GREEN}● RUNNING${COLOR_RESET} container=%s\n" "$name (:$port)" "$name"
|
||
;;
|
||
missing)
|
||
printf " %-22s ${COLOR_YELLOW}? NOT-CREATED${COLOR_RESET}\n" "$name (:$port)"
|
||
;;
|
||
*)
|
||
printf " %-22s ${COLOR_RED}○ %s${COLOR_RESET}\n" "$name (:$port)" "$status"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
echo ""
|
||
echo "===== EchoChat 应用层 ====="
|
||
check_port "Go 后端" 8085 "http://localhost:8085"
|
||
check_port "媒体服务器 SFU" 3300 "http://localhost:3300/healthz"
|
||
check_port "前台用户端" 5173 "http://localhost:5173"
|
||
check_port "后台管理端" 3100 "http://localhost:3100"
|
||
|
||
echo ""
|
||
echo "===== Docker 中间件 ====="
|
||
check_container "echochat-postgres" 5432
|
||
check_container "echochat-redis" 6379
|
||
check_container "echochat-minio" 9000
|
||
|
||
echo ""
|
||
echo "===== 容器化应用(docker compose full) ====="
|
||
check_container "echochat-go-service" 8085
|
||
check_container "echochat-media-server" 3300
|
||
check_container "echochat-coturn" 3478
|
||
|
||
echo ""
|
||
echo "日志目录:$RUN_DIR/logs"
|
||
echo "compose 日志:docker compose -f deploy/docker-compose.dev.yml logs -f [service]"
|
||
echo ""
|