fix: 修复 Docker 模式下 SERVER_PORT 未生效的问题

- 将 Makefile 中的 PORT 变量重命名为 SERVER_PORT,更清晰地表示应用端口
- 修复 docker-up-dev/stage/prod 命令中的 sed 命令:
  * 将 $(PORT) 改为 $(SERVER_PORT)
  * 修改 sed 命令从 s/[0-9]\+/... 改为 s|port:.*|port: $(SERVER_PORT)|
  * 这样可以处理 config 文件中 port: 为空的情况
- 修复 dev/stage/prod 命令中的 sed 命令,统一使用新的格式
- 在 main.go 中增加端口为空检查:
  * 在启动服务器前检查 cfg.Server.Port 是否为空
  * 如果为空,输出明确的错误信息并退出,便于排查问题

问题原因:
- docker-up-dev 中使用的是 $(PORT) 而不是 $(SERVER_PORT)
- 当 port: 为空时,sed 的 s/[0-9]\+/... 无法匹配(需要数字才能匹配)
- 改为 s|port:.*|port: ...| 可以处理空值情况
This commit is contained in:
Table 2025-11-29 08:10:47 +08:00
parent 5abb3b7aa4
commit 5424efd48a
2 changed files with 38 additions and 35 deletions

View File

@ -17,7 +17,7 @@ DOCKER := docker
DOCKER_COMPOSE := $(DOCKER) compose DOCKER_COMPOSE := $(DOCKER) compose
# 应用端口 # 应用端口
PORT := 1234 SERVER_PORT := 1234
# 默认目标 # 默认目标
.PHONY: help .PHONY: help
@ -30,8 +30,8 @@ help: ## 显示帮助信息
dev: ## 启动开发环境(本地模式,使用 localhost dev: ## 启动开发环境(本地模式,使用 localhost
@echo "启动开发环境(本地模式)..." @echo "启动开发环境(本地模式)..."
@bash -c '\ @bash -c '\
PORT=$(PORT); \ PORT=$(SERVER_PORT); \
echo "检查端口 $(PORT) 是否被占用..."; \ echo "检查端口 $(SERVER_PORT) 是否被占用..."; \
PID=""; \ PID=""; \
if command -v lsof >/dev/null 2>&1; then \ if command -v lsof >/dev/null 2>&1; then \
PID=$$(lsof -ti:$$PORT 2>/dev/null | head -1); \ PID=$$(lsof -ti:$$PORT 2>/dev/null | head -1); \
@ -98,15 +98,7 @@ dev: ## 启动开发环境(本地模式,使用 localhost
echo "配置本地模式(使用 localhost..."; \ echo "配置本地模式(使用 localhost..."; \
cp config/dev.yaml config/dev.yaml.bak 2>/dev/null || true; \ cp config/dev.yaml config/dev.yaml.bak 2>/dev/null || true; \
sed -i.tmp "s|host: host.docker.internal|host: localhost|g" config/dev.yaml; \ sed -i.tmp "s|host: host.docker.internal|host: localhost|g" config/dev.yaml; \
trap "mv config/dev.yaml.bak config/dev.yaml 2>/dev/null; rm -f config/dev.yaml.tmp 2>/dev/null" INT TERM EXIT; \ sed -i.tmp "/^server:/,/^[a-z][^ ]*:/ { /^ port:/ s|port:.*|port: $(SERVER_PORT)|; }" config/dev.yaml; \
$(GO) run src/main.go -env=dev; \
EXIT_CODE=$$?; \
mv config/dev.yaml.bak config/dev.yaml 2>/dev/null || true; \
rm -f config/dev.yaml.tmp 2>/dev/null || true; \
exit $$EXIT_CODE'
@bash -c '\
cp config/dev.yaml config/dev.yaml.bak 2>/dev/null || true; \
sed -i.tmp "s|host: host.docker.internal|host: localhost|g" config/dev.yaml; \
trap "mv config/dev.yaml.bak config/dev.yaml 2>/dev/null; rm -f config/dev.yaml.tmp 2>/dev/null" INT TERM EXIT; \ trap "mv config/dev.yaml.bak config/dev.yaml 2>/dev/null; rm -f config/dev.yaml.tmp 2>/dev/null" INT TERM EXIT; \
$(GO) run src/main.go -env=dev; \ $(GO) run src/main.go -env=dev; \
EXIT_CODE=$$?; \ EXIT_CODE=$$?; \
@ -117,26 +109,27 @@ dev: ## 启动开发环境(本地模式,使用 localhost
.PHONY: stage .PHONY: stage
stage: ## 启动预发布环境(本地模式,使用 localhost stage: ## 启动预发布环境(本地模式,使用 localhost
@echo "启动预发布环境(本地模式)..." @echo "启动预发布环境(本地模式)..."
@echo "检查端口 $(PORT) 是否被占用..." @echo "检查端口 $(SERVER_PORT) 是否被占用..."
@PID=""; \ @PID=""; \
if command -v lsof >/dev/null 2>&1; then \ if command -v lsof >/dev/null 2>&1; then \
PID=$$(lsof -ti:$(PORT) 2>/dev/null | head -1); \ PID=$$(lsof -ti:$(SERVER_PORT) 2>/dev/null | head -1); \
fi; \ fi; \
if [ -z "$$PID" ] && command -v netstat >/dev/null 2>&1; then \ if [ -z "$$PID" ] && command -v netstat >/dev/null 2>&1; then \
PID=$$(netstat -tlnp 2>/dev/null | grep ":$(PORT) " | awk '{print $$7}' | grep -E '^[0-9]+' | cut -d/ -f1 | head -1); \ PID=$$(netstat -tlnp 2>/dev/null | grep ":$(SERVER_PORT) " | awk '{print $$7}' | grep -E '^[0-9]+' | cut -d/ -f1 | head -1); \
fi; \ fi; \
if [ -z "$$PID" ] && command -v ss >/dev/null 2>&1; then \ if [ -z "$$PID" ] && command -v ss >/dev/null 2>&1; then \
PID=$$(ss -tlnp 2>/dev/null | grep ":$(PORT) " | grep -oP 'pid=\K[0-9]+' | head -1); \ PID=$$(ss -tlnp 2>/dev/null | grep ":$(SERVER_PORT) " | grep -oP 'pid=\K[0-9]+' | head -1); \
fi; \ fi; \
if [ -n "$$PID" ] && [ "$$PID" != "-" ] && [ "$$PID" != "0" ]; then \ if [ -n "$$PID" ] && [ "$$PID" != "-" ] && [ "$$PID" != "0" ]; then \
echo "⚠️ 警告: 端口 $(PORT) 已被进程 $$PID 占用"; \ echo "⚠️ 警告: 端口 $(SERVER_PORT) 已被进程 $$PID 占用"; \
echo " 提示: 使用 'make kill-$(PORT)' 或 'make kill-port-force PORT=$(PORT)' 终止该进程"; \ echo " 提示: 使用 'make kill-$(SERVER_PORT)' 或 'make kill-port-force PORT=$(SERVER_PORT)' 终止该进程"; \
echo ""; \ echo ""; \
fi; \ fi; \
echo "配置本地模式(使用 localhost..." echo "配置本地模式(使用 localhost..."
@bash -c '\ @bash -c '\
cp config/stage.yaml config/stage.yaml.bak 2>/dev/null || true; \ cp config/stage.yaml config/stage.yaml.bak 2>/dev/null || true; \
sed -i.tmp "s|host: host.docker.internal|host: localhost|g" config/stage.yaml; \ sed -i.tmp "s|host: host.docker.internal|host: localhost|g" config/stage.yaml; \
sed -i.tmp "/^server:/,/^[a-z][^ ]*:/ { /^ port:/ s|port:.*|port: $(SERVER_PORT)|; }" config/stage.yaml; \
trap "mv config/stage.yaml.bak config/stage.yaml 2>/dev/null; rm -f config/stage.yaml.tmp 2>/dev/null" INT TERM EXIT; \ trap "mv config/stage.yaml.bak config/stage.yaml 2>/dev/null; rm -f config/stage.yaml.tmp 2>/dev/null" INT TERM EXIT; \
$(GO) run src/main.go -env=stage; \ $(GO) run src/main.go -env=stage; \
EXIT_CODE=$$?; \ EXIT_CODE=$$?; \
@ -147,26 +140,27 @@ stage: ## 启动预发布环境(本地模式,使用 localhost
.PHONY: prod .PHONY: prod
prod: ## 启动生产环境(本地模式,使用 localhost prod: ## 启动生产环境(本地模式,使用 localhost
@echo "启动生产环境(本地模式)..." @echo "启动生产环境(本地模式)..."
@echo "检查端口 $(PORT) 是否被占用..." @echo "检查端口 $(SERVER_PORT) 是否被占用..."
@PID=""; \ @PID=""; \
if command -v lsof >/dev/null 2>&1; then \ if command -v lsof >/dev/null 2>&1; then \
PID=$$(lsof -ti:$(PORT) 2>/dev/null | head -1); \ PID=$$(lsof -ti:$(SERVER_PORT) 2>/dev/null | head -1); \
fi; \ fi; \
if [ -z "$$PID" ] && command -v netstat >/dev/null 2>&1; then \ if [ -z "$$PID" ] && command -v netstat >/dev/null 2>&1; then \
PID=$$(netstat -tlnp 2>/dev/null | grep ":$(PORT) " | awk '{print $$7}' | grep -E '^[0-9]+' | cut -d/ -f1 | head -1); \ PID=$$(netstat -tlnp 2>/dev/null | grep ":$(SERVER_PORT) " | awk '{print $$7}' | grep -E '^[0-9]+' | cut -d/ -f1 | head -1); \
fi; \ fi; \
if [ -z "$$PID" ] && command -v ss >/dev/null 2>&1; then \ if [ -z "$$PID" ] && command -v ss >/dev/null 2>&1; then \
PID=$$(ss -tlnp 2>/dev/null | grep ":$(PORT) " | grep -oP 'pid=\K[0-9]+' | head -1); \ PID=$$(ss -tlnp 2>/dev/null | grep ":$(SERVER_PORT) " | grep -oP 'pid=\K[0-9]+' | head -1); \
fi; \ fi; \
if [ -n "$$PID" ] && [ "$$PID" != "-" ] && [ "$$PID" != "0" ]; then \ if [ -n "$$PID" ] && [ "$$PID" != "-" ] && [ "$$PID" != "0" ]; then \
echo "⚠️ 警告: 端口 $(PORT) 已被进程 $$PID 占用"; \ echo "⚠️ 警告: 端口 $(SERVER_PORT) 已被进程 $$PID 占用"; \
echo " 提示: 使用 'make kill-$(PORT)' 或 'make kill-port-force PORT=$(PORT)' 终止该进程"; \ echo " 提示: 使用 'make kill-$(SERVER_PORT)' 或 'make kill-port-force PORT=$(SERVER_PORT)' 终止该进程"; \
echo ""; \ echo ""; \
fi; \ fi; \
echo "配置本地模式(使用 localhost..." echo "配置本地模式(使用 localhost..."
@bash -c '\ @bash -c '\
cp config/prod.yaml config/prod.yaml.bak 2>/dev/null || true; \ cp config/prod.yaml config/prod.yaml.bak 2>/dev/null || true; \
sed -i.tmp "s|host: host.docker.internal|host: localhost|g" config/prod.yaml; \ sed -i.tmp "s|host: host.docker.internal|host: localhost|g" config/prod.yaml; \
sed -i.tmp "/^server:/,/^[a-z][^ ]*:/ { /^ port:/ s|port:.*|port: $(SERVER_PORT)|; }" config/prod.yaml; \
trap "mv config/prod.yaml.bak config/prod.yaml 2>/dev/null; rm -f config/prod.yaml.tmp 2>/dev/null" INT TERM EXIT; \ trap "mv config/prod.yaml.bak config/prod.yaml 2>/dev/null; rm -f config/prod.yaml.tmp 2>/dev/null" INT TERM EXIT; \
$(GO) run src/main.go -env=prod; \ $(GO) run src/main.go -env=prod; \
EXIT_CODE=$$?; \ EXIT_CODE=$$?; \
@ -276,7 +270,7 @@ docker-compose-dev: ## 生成开发环境Docker Compose文件
echo " context: .." >> $(DOCKER_DIR)/docker-compose.dev.yml; \ echo " context: .." >> $(DOCKER_DIR)/docker-compose.dev.yml; \
echo " dockerfile: Dockerfile" >> $(DOCKER_DIR)/docker-compose.dev.yml; \ echo " dockerfile: Dockerfile" >> $(DOCKER_DIR)/docker-compose.dev.yml; \
echo " ports:" >> $(DOCKER_DIR)/docker-compose.dev.yml; \ echo " ports:" >> $(DOCKER_DIR)/docker-compose.dev.yml; \
echo " - \"$(PORT):$(PORT)\"" >> $(DOCKER_DIR)/docker-compose.dev.yml; \ echo " - \"$(SERVER_PORT):$(SERVER_PORT)\"" >> $(DOCKER_DIR)/docker-compose.dev.yml; \
echo " environment:" >> $(DOCKER_DIR)/docker-compose.dev.yml; \ echo " environment:" >> $(DOCKER_DIR)/docker-compose.dev.yml; \
echo " - APP_ENV=dev" >> $(DOCKER_DIR)/docker-compose.dev.yml; \ echo " - APP_ENV=dev" >> $(DOCKER_DIR)/docker-compose.dev.yml; \
echo " volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml; \ echo " volumes:" >> $(DOCKER_DIR)/docker-compose.dev.yml; \
@ -293,6 +287,7 @@ docker-up-dev: docker-compose-dev ## 启动开发环境Docker容器
@echo "配置 Docker 模式(使用 host.docker.internal..." @echo "配置 Docker 模式(使用 host.docker.internal..."
@cp config/dev.yaml config/dev.yaml.bak 2>/dev/null || true; \ @cp config/dev.yaml config/dev.yaml.bak 2>/dev/null || true; \
sed -i.tmp 's|host: localhost|host: host.docker.internal|g' config/dev.yaml; \ sed -i.tmp 's|host: localhost|host: host.docker.internal|g' config/dev.yaml; \
sed -i.tmp "/^server:/,/^[a-z][^ ]*:/ { /^ port:/ s|port:.*|port: $(SERVER_PORT)|; }" config/dev.yaml; \
HOST_IP=$$(hostname -I | awk '{print $$1}' 2>/dev/null || ip addr show | grep "inet " | grep -v "127.0.0.1" | head -1 | awk '{print $$2}' | cut -d/ -f1); \ HOST_IP=$$(hostname -I | awk '{print $$1}' 2>/dev/null || ip addr show | grep "inet " | grep -v "127.0.0.1" | head -1 | awk '{print $$2}' | cut -d/ -f1); \
if [ -z "$$HOST_IP" ]; then \ if [ -z "$$HOST_IP" ]; then \
mv config/dev.yaml.bak config/dev.yaml 2>/dev/null || true; \ mv config/dev.yaml.bak config/dev.yaml 2>/dev/null || true; \
@ -314,6 +309,7 @@ docker-up-stage: ## 启动预发布环境Docker容器
@echo "配置 Docker 模式(使用 host.docker.internal..." @echo "配置 Docker 模式(使用 host.docker.internal..."
@cp config/stage.yaml config/stage.yaml.bak 2>/dev/null || true; \ @cp config/stage.yaml config/stage.yaml.bak 2>/dev/null || true; \
sed -i.tmp 's|host: localhost|host: host.docker.internal|g' config/stage.yaml; \ sed -i.tmp 's|host: localhost|host: host.docker.internal|g' config/stage.yaml; \
sed -i.tmp "/^server:/,/^[a-z][^ ]*:/ { /^ port:/ s|port:.*|port: $(SERVER_PORT)|; }" config/stage.yaml; \
HOST_IP=$$(hostname -I | awk '{print $$1}' 2>/dev/null || ip addr show | grep "inet " | grep -v "127.0.0.1" | head -1 | awk '{print $$2}' | cut -d/ -f1); \ HOST_IP=$$(hostname -I | awk '{print $$1}' 2>/dev/null || ip addr show | grep "inet " | grep -v "127.0.0.1" | head -1 | awk '{print $$2}' | cut -d/ -f1); \
if [ -z "$$HOST_IP" ]; then \ if [ -z "$$HOST_IP" ]; then \
mv config/stage.yaml.bak config/stage.yaml 2>/dev/null || true; \ mv config/stage.yaml.bak config/stage.yaml 2>/dev/null || true; \
@ -324,6 +320,7 @@ docker-up-stage: ## 启动预发布环境Docker容器
echo "使用宿主机 IP: $$HOST_IP"; \ echo "使用宿主机 IP: $$HOST_IP"; \
cd $(DOCKER_DIR) && \ cd $(DOCKER_DIR) && \
sed -i.tmp2 "s|host.docker.internal:[0-9.]*|host.docker.internal:$$HOST_IP|g" docker-compose.stage.yml && \ sed -i.tmp2 "s|host.docker.internal:[0-9.]*|host.docker.internal:$$HOST_IP|g" docker-compose.stage.yml && \
sed -i.tmp2 "s|\"1234:1234\"|\"$(SERVER_PORT):$(SERVER_PORT)\"|g" docker-compose.stage.yml && \
$(DOCKER_COMPOSE) -f docker-compose.stage.yml up -d && \ $(DOCKER_COMPOSE) -f docker-compose.stage.yml up -d && \
rm -f docker-compose.stage.yml.tmp2; \ rm -f docker-compose.stage.yml.tmp2; \
mv config/stage.yaml.bak config/stage.yaml 2>/dev/null || true; \ mv config/stage.yaml.bak config/stage.yaml 2>/dev/null || true; \
@ -336,6 +333,7 @@ docker-up-prod: ## 启动生产环境Docker容器
@echo "配置 Docker 模式(使用 host.docker.internal..." @echo "配置 Docker 模式(使用 host.docker.internal..."
@cp config/prod.yaml config/prod.yaml.bak 2>/dev/null || true; \ @cp config/prod.yaml config/prod.yaml.bak 2>/dev/null || true; \
sed -i.tmp 's|host: localhost|host: host.docker.internal|g' config/prod.yaml; \ sed -i.tmp 's|host: localhost|host: host.docker.internal|g' config/prod.yaml; \
sed -i.tmp "/^server:/,/^[a-z][^ ]*:/ { /^ port:/ s|port:.*|port: $(SERVER_PORT)|; }" config/prod.yaml; \
HOST_IP=$$(hostname -I | awk '{print $$1}' 2>/dev/null || ip addr show | grep "inet " | grep -v "127.0.0.1" | head -1 | awk '{print $$2}' | cut -d/ -f1); \ HOST_IP=$$(hostname -I | awk '{print $$1}' 2>/dev/null || ip addr show | grep "inet " | grep -v "127.0.0.1" | head -1 | awk '{print $$2}' | cut -d/ -f1); \
if [ -z "$$HOST_IP" ]; then \ if [ -z "$$HOST_IP" ]; then \
mv config/prod.yaml.bak config/prod.yaml 2>/dev/null || true; \ mv config/prod.yaml.bak config/prod.yaml 2>/dev/null || true; \
@ -346,6 +344,8 @@ docker-up-prod: ## 启动生产环境Docker容器
echo "使用宿主机 IP: $$HOST_IP"; \ echo "使用宿主机 IP: $$HOST_IP"; \
cd $(DOCKER_DIR) && \ cd $(DOCKER_DIR) && \
sed -i.tmp2 "s|host.docker.internal:[0-9.]*|host.docker.internal:$$HOST_IP|g" docker-compose.prod.yml && \ sed -i.tmp2 "s|host.docker.internal:[0-9.]*|host.docker.internal:$$HOST_IP|g" docker-compose.prod.yml && \
sed -i.tmp2 "s|\"1234:1234\"|\"$(SERVER_PORT):$(SERVER_PORT)\"|g" docker-compose.prod.yml && \
sed -i.tmp2 "s|http://localhost:[0-9]*/health|http://localhost:$(SERVER_PORT)/health|g" docker-compose.prod.yml && \
$(DOCKER_COMPOSE) -f docker-compose.prod.yml up -d && \ $(DOCKER_COMPOSE) -f docker-compose.prod.yml up -d && \
rm -f docker-compose.prod.yml.tmp2; \ rm -f docker-compose.prod.yml.tmp2; \
mv config/prod.yaml.bak config/prod.yaml 2>/dev/null || true; \ mv config/prod.yaml.bak config/prod.yaml 2>/dev/null || true; \
@ -440,10 +440,10 @@ docker-ps: ## 查看所有Docker容器状态
# 端口管理 # 端口管理
.PHONY: kill-port .PHONY: kill-port
kill-port: ## 终止指定端口的进程 (用法: make kill-port PORT=$(PORT)) kill-port: ## 终止指定端口的进程 (用法: make kill-port PORT=$(SERVER_PORT))
@if [ -z "$(PORT)" ]; then \ @if [ -z "$(PORT)" ]; then \
echo "❌ 错误: 请指定端口号"; \ echo "❌ 错误: 请指定端口号"; \
echo "用法: make kill-port PORT=$(PORT)"; \ echo "用法: make kill-port PORT=$(SERVER_PORT)"; \
exit 1; \ exit 1; \
fi; \ fi; \
echo "查找端口 $(PORT) 的进程..."; \ echo "查找端口 $(PORT) 的进程..."; \
@ -472,7 +472,7 @@ kill-port: ## 终止指定端口的进程 (用法: make kill-port PORT=$(PORT))
fi fi
.PHONY: kill-port-force .PHONY: kill-port-force
kill-port-force: ## 强制终止指定端口的进程,无需确认 (用法: make kill-port-force PORT=$(PORT)) kill-port-force: ## 强制终止指定端口的进程,无需确认 (用法: make kill-port-force PORT=$(SERVER_PORT))
@if [ -z "$(PORT)" ]; then \ @if [ -z "$(PORT)" ]; then \
echo "❌ 错误: 请指定端口号"; \ echo "❌ 错误: 请指定端口号"; \
echo "用法: make kill-port-force PORT=$(PORT)"; \ echo "用法: make kill-port-force PORT=$(PORT)"; \
@ -498,21 +498,21 @@ kill-port-force: ## 强制终止指定端口的进程,无需确认 (用法: ma
echo "进程信息: $$PROCESS_INFO"; \ echo "进程信息: $$PROCESS_INFO"; \
kill -9 $$PID 2>/dev/null && echo "✅ 已强制终止进程 $$PID" || echo "❌ 终止进程失败" kill -9 $$PID 2>/dev/null && echo "✅ 已强制终止进程 $$PID" || echo "❌ 终止进程失败"
.PHONY: kill-$(PORT) .PHONY: kill-$(SERVER_PORT)
kill-$(PORT): ## 终止端口 $(PORT) 的进程(应用默认端口) kill-$(SERVER_PORT): ## 终止端口 $(SERVER_PORT) 的进程(应用默认端口)
@echo "终止端口 $(PORT) 的进程..." @echo "终止端口 $(SERVER_PORT) 的进程..."
@PID=""; \ @PID=""; \
if command -v lsof >/dev/null 2>&1; then \ if command -v lsof >/dev/null 2>&1; then \
PID=$$(lsof -ti:$(PORT) 2>/dev/null | head -1); \ PID=$$(lsof -ti:$(SERVER_PORT) 2>/dev/null | head -1); \
fi; \ fi; \
if [ -z "$$PID" ] && command -v netstat >/dev/null 2>&1; then \ if [ -z "$$PID" ] && command -v netstat >/dev/null 2>&1; then \
PID=$$(netstat -tlnp 2>/dev/null | grep ":$(PORT) " | awk '{print $$7}' | grep -E '^[0-9]+' | cut -d/ -f1 | head -1); \ PID=$$(netstat -tlnp 2>/dev/null | grep ":$(SERVER_PORT) " | awk '{print $$7}' | grep -E '^[0-9]+' | cut -d/ -f1 | head -1); \
fi; \ fi; \
if [ -z "$$PID" ] && command -v ss >/dev/null 2>&1; then \ if [ -z "$$PID" ] && command -v ss >/dev/null 2>&1; then \
PID=$$(ss -tlnp 2>/dev/null | grep ":$(PORT) " | grep -oP 'pid=\K[0-9]+' | head -1); \ PID=$$(ss -tlnp 2>/dev/null | grep ":$(SERVER_PORT) " | grep -oP 'pid=\K[0-9]+' | head -1); \
fi; \ fi; \
if [ -z "$$PID" ] || [ "$$PID" = "-" ] || [ "$$PID" = "0" ]; then \ if [ -z "$$PID" ] || [ "$$PID" = "-" ] || [ "$$PID" = "0" ]; then \
echo "✅ 端口 $(PORT) 未被占用"; \ echo "✅ 端口 $(SERVER_PORT) 未被占用"; \
exit 0; \ exit 0; \
fi; \ fi; \
echo "找到进程 PID: $$PID"; \ echo "找到进程 PID: $$PID"; \

View File

@ -79,6 +79,9 @@ func main() {
} }
// 启动服务器 // 启动服务器
if cfg.Server.Port == "" {
log.Fatalf("❌ 错误: 服务器端口配置为空!请检查配置文件中的 server.port 设置")
}
log.Printf("服务器启动在端口 %s环境: %s", cfg.Server.Port, env) log.Printf("服务器启动在端口 %s环境: %s", cfg.Server.Port, env)
// 优雅关闭 // 优雅关闭