Skip to content
Clone

chore(dev): check RocketMQ and drop the unused SSH host key plumbing

ZhenYi committed
parent fae3bed commit b8cfb78 Browse files

2 files changed

+33 −58

File tree 2
Modified scripts/dev.sh View scripts/dev.sh
@@ -1,7 +1,8 @@
11#!/usr/bin/env bash
22# GitData 本地开发编排脚本(macOS / Linux)。
33# 由 justfile 调用:just <cmd> [svc...] -> scripts/dev.sh <cmd> [svc...]
4# 依赖服务(PostgreSQL / Redis / S3)由 `just infra` 通过 docker compose 托管。
4# 依赖服务(PostgreSQL / Redis / S3)由 `just infra` 通过 docker compose 托管;
5# RocketMQ 不在 compose 里,需宿主机自行提供(端口见 rocketmq_port)。
56set -u
67
78ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
@@ -23,7 +24,6 @@
2324LOG_DIR="$DEV_DIR/logs"
2425PID_DIR="$DEV_DIR/pids"
2526BIN_DIR="$TARGET_DIR/debug"
26DEV_HOST_KEY="$DEV_DIR/ssh_host_ed25519"
2727COMPOSE_FILE="$ROOT/docker-compose.dev.yml"
2828
2929ORDER="apihost"
@@ -56,12 +56,6 @@
5656 esac
5757}
5858
59extra_port_of() {
60 case "$1" in
61 *) echo 0 ;;
62 esac
63}
64
6559alias_of() {
6660 case "$1" in
6761 api) echo apihost ;;
@@ -214,24 +208,26 @@
214208 printf '%s\n' "$found"
215209}
216210
217config_has_key() {
218 local file
219 for file in "$ROOT"/config/local/*.json; do
211# ---------- check ----------
212
213# RocketMQ 是启动必需项,但由宿主机提供、不在 docker compose 里。
214rocketmq_port() {
215 local file port
216 for file in "$ROOT/config/local/rocketmq.json" "$ROOT/config/default/rocketmq.json"; do
220217 [ -f "$file" ] || continue
221 grep -q "\"$1\"" "$file" 2>/dev/null && return 0
218 port="$(grep -oE '"name_server"[[:space:]]*:[[:space:]]*"[^"]*"' "$file" \
219 | head -n1 | sed -E 's/.*:([0-9]+)"/\1/')"
220 if [ -n "$port" ]; then printf '%s\n' "$port"; return 0; fi
222221 done
223 return 1
222 printf '9876\n'
224223}
225224
226# ---------- check ----------
227
228225cmd_check() {
229 local ok=1 t pair name port
230 ensure_path
226 local ok=1 t pair name port mq_port
231227 ensure_path
232228
233229 info '== 工具链 =='
234 for t in cargo ssh-keygen; do
230 for t in cargo; do
235231 if command -v "$t" >/dev/null 2>&1; then
236232 printf ' %-12s OK\n' "$t"
237233 else
@@ -255,6 +251,13 @@
255251 fi
256252 done
257253
254 mq_port="$(rocketmq_port)"
255 if port_open "$mq_port"; then
256 printf ' %-12s 127.0.0.1:%s OK\n' rocketmq "$mq_port"
257 else
258 fail " $(printf '%-12s 127.0.0.1:%s 不可用(需宿主机自行启动 RocketMQ)' rocketmq "$mq_port")"; ok=0
259 fi
260
258261 info "== 后端二进制 ($BIN_DIR) =="
259262 if [ -x "$BIN_DIR/kenapi" ]; then
260263 printf ' %-12s OK\n' kenapi
@@ -265,7 +268,7 @@
265268 if [ "$ok" = "0" ]; then
266269 info ''
267270 info 'just infra 启动依赖服务(docker compose)'
268 info 'just build 构建全部后端二进制(前端由 build.rs 自动构建并内嵌)'
271 info 'just build 构建全部后端二进制(前端产物需先 pnpm build 生成 view/dist)'
269272 return 1
270273 fi
271274 return 0
@@ -285,7 +288,7 @@
285288cmd_infra() {
286289 local action="${1:-up}" pair name port rc=0
287290
288 # 四个端口都已就绪时不再动 docker(例如本机已用 brew / systemd 装好了依赖服务)
291 # 三个端口都已就绪时不再动 docker(例如本机已用 brew / systemd 装好了依赖服务)
289292 if [ "$action" = "up" ] && infra_ports_ready; then
290293 info '[infra] 依赖服务已在运行(端口均已监听),跳过 docker compose'
291294 for pair in $INFRA; do
@@ -336,41 +339,16 @@
336339 return 0
337340}
338341
339# ---------- host key / env ----------
340
341ensure_host_key() {
342 if [ -f "$DEV_HOST_KEY" ]; then
343 printf '%s\n' "$DEV_HOST_KEY"; return 0
344 fi
345 ensure_dirs
346 info "[hostkey] 生成本地 SSH host key: $DEV_HOST_KEY"
347 ssh-keygen -q -t ed25519 -f "$DEV_HOST_KEY" -N '' -C gitdata-dev >/dev/null 2>&1
348 if [ ! -f "$DEV_HOST_KEY" ]; then
349 fail ' ssh-keygen 执行失败'
350 return 1
351 fi
352 printf '%s\n' "$DEV_HOST_KEY"
353}
342# ---------- 运行期环境 ----------
354343
355344service_env() {
356345 ensure_path
357346 ensure_dirs
358 if [ -z "${APP_GIT__SSH__HOST_KEY_PATH:-}" ]; then
359 APP_GIT__SSH__HOST_KEY_PATH="$(ensure_host_key)" || return 1
360 fi
361347 if [ -z "${APP_GIT__REPO_ROOT:-}" ]; then
362348 APP_GIT__REPO_ROOT="$DEV_DIR/git/repos"
363 fi
364 if [ -z "${APP_GIT__OBJECTS_ROOT:-}" ]; then
365 APP_GIT__OBJECTS_ROOT="$DEV_DIR/git/objects"
366 fi
367 export APP_GIT__SSH__HOST_KEY_PATH APP_GIT__REPO_ROOT APP_GIT__OBJECTS_ROOT
368 mkdir -p "$APP_GIT__REPO_ROOT" "$APP_GIT__OBJECTS_ROOT"
369
370 # macOS 的 HOME 通常不可写 /opt;若 config/local/ 指向 /opt 又不可写则给出提示
371 if ! config_has_key 'repo_root'; then
372 return 0
373349 fi
350 export APP_GIT__REPO_ROOT
351 mkdir -p "$APP_GIT__REPO_ROOT"
374352}
375353
376354# ---------- migrate ----------
@@ -395,7 +373,6 @@
395373
396374spawn_daemon() {
397375 local name="$1" dir="$2" cmd="$3"
398 ensure_path
399376 ensure_path
400377 local out="$LOG_DIR/$name.log" err="$LOG_DIR/$name.err.log"
401378 local pid
@@ -504,7 +481,6 @@
504481 fi
505482 rm -f "$(pid_file "$name")"
506483 stop_stray "$name" "$port"
507 stop_stray "$name" "$(extra_port_of "$name")"
508484 return 0
509485}
510486
@@ -529,7 +505,7 @@
529505 if ! contains "$key" $ORDER; then
530506 fail "未知服务: $part"
531507 info "可用: $ORDER"
532 info "别名: api git chat sync hook / backends"
508 info "别名: api / backends"
533509 return 1
534510 fi
535511 out="$out $key"
@@ -547,7 +523,7 @@
547523# ---------- up / down / status / logs ----------
548524
549525cmd_up() {
550 local names t
526 local names
551527 names="$(resolve_services "$@")" || return 1
552528 [ -z "$names" ] && return 0
553529
@@ -587,7 +563,7 @@
587563}
588564
589565cmd_down() {
590 local names t
566 local names
591567 names="$(resolve_services "$@")" || return 1
592568 # 逆序停止
593569 local reversed='' name
@@ -684,15 +660,12 @@
684660 redis-cli -u "$url"
685661}
686662
687cmd_hostkey() { info "[hostkey] $(ensure_host_key)"; }
688
689663# ---------- dispatch ----------
690664
691665case "${1:-status}" in
692666 check) cmd_check ;;
693667 infra) cmd_infra up ;;
694668 infra-down) cmd_infra down ;;
695 hostkey) cmd_hostkey ;;
696669 migrate) cmd_migrate ;;
697670 up) shift; cmd_up "$@" ;;
698671 down) shift; cmd_down "$@" ;;
@@ -703,7 +676,7 @@
703676 redis) cmd_redis ;;
704677 *)
705678 fail "未知命令: ${1:-}"
706 info '可用: check/infra/infra-down/hostkey/migrate/up/down/restart/status/logs/psql/redis'
679 info '可用: check/infra/infra-down/migrate/up/down/restart/status/logs/psql/redis'
707680 exit 1
708681 ;;
709682esac
Modified docker-compose.dev.yml View docker-compose.dev.yml
@@ -1,7 +1,9 @@
11# 本地开发依赖服务(macOS / Linux)。
22# 与 config/local/ 的默认端口一一对应:
33# PostgreSQL 5432 / Redis 6379 / S3(RustFS) 9000
4# RocketMQ 是 KenApi 的启动必需项,由宿主机提供(默认 127.0.0.1:6876);
4# RocketMQ 是 KenApi 的启动必需项,由宿主机提供:
5# config/local/rocketmq.json 覆盖为 127.0.0.1:6876,未建 local 时用
6# config/default/rocketmq.json 的 127.0.0.1:9876。
57# 本 compose 不启动 MQ,启动 KenApi 前请先确认 nameserver 可达。
68# 用法:
79# just infra 启动