From 92029b89e978a8f2467c3181cb9f8c46bbb9bec1 Mon Sep 17 00:00:00 2001 From: fanfpy Date: Mon, 21 Jul 2025 17:35:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor(consul):=20=E6=9B=B4=E6=96=B0=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=A3=80=E6=9F=A5=E5=9C=B0=E5=9D=80=E4=B8=BA=E8=BF=9C?= =?UTF-8?q?=E7=A8=8BIP=E5=B9=B6=E9=87=8D=E6=9E=84=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将Consul配置中的服务检查地址从容器名改为远程IP地址,以支持跨服务器健康检查 删除旧的部署脚本和配置文件,新增分离的远程和本地部署脚本 重构docker-compose配置为远程和本地两个版本,优化服务部署结构 --- consul/config/dev/data-service.json | 2 +- consul/config/dev/emotion-service.json | 2 +- consul/config/dev/frontend.json | 2 +- consul/config/dev/quant-service.json | 2 +- consul/config/dev/recommend-service.json | 2 +- consul/config/dev/user-service.json | 2 +- consul/config/dev/whoami.json | 20 ------ ...ose.aliyun.yml => docker-compose.local.yml | 64 ++++--------------- docker-compose.remote.yml | 40 ++++++++++++ run-local.sh | 43 +++++++++++++ run-remote.sh | 41 ++++++++++++ run-services.sh | 42 ------------ 12 files changed, 141 insertions(+), 121 deletions(-) delete mode 100644 consul/config/dev/whoami.json rename docker-compose.aliyun.yml => docker-compose.local.yml (59%) create mode 100644 docker-compose.remote.yml create mode 100644 run-local.sh create mode 100644 run-remote.sh delete mode 100644 run-services.sh diff --git a/consul/config/dev/data-service.json b/consul/config/dev/data-service.json index 64f03a6..87eea3e 100644 --- a/consul/config/dev/data-service.json +++ b/consul/config/dev/data-service.json @@ -2,7 +2,7 @@ "service": { "address": "data-service", "check": { - "http": "http://ari-data-service:8000/api/public/stock_bid_ask_em?symbol=000001", + "http": "http://10.195.102.127:8000/api/public/stock_bid_ask_em?symbol=000001", "interval": "10s", "timeout": "5s" }, diff --git a/consul/config/dev/emotion-service.json b/consul/config/dev/emotion-service.json index 9494079..8fd5d0d 100644 --- a/consul/config/dev/emotion-service.json +++ b/consul/config/dev/emotion-service.json @@ -2,7 +2,7 @@ "service": { "address": "emotion-service", "check": { - "http": "http://emotion-service:8002/health", + "http": "http://10.195.102.127:8002/health", "interval": "10s", "timeout": "5s" }, diff --git a/consul/config/dev/frontend.json b/consul/config/dev/frontend.json index 7169a33..09cd8bd 100644 --- a/consul/config/dev/frontend.json +++ b/consul/config/dev/frontend.json @@ -2,7 +2,7 @@ "service": { "address": "frontend", "check": { - "http": "http://frontend:80/", + "http": "http://10.195.102.127:8080/", "interval": "10s", "timeout": "5s" }, diff --git a/consul/config/dev/quant-service.json b/consul/config/dev/quant-service.json index c049613..ad79b9e 100644 --- a/consul/config/dev/quant-service.json +++ b/consul/config/dev/quant-service.json @@ -2,7 +2,7 @@ "service": { "address": "quant-service", "check": { - "http": "http://quant-service:8001/health", + "http": "http://10.195.102.127:8001/health", "interval": "10s", "timeout": "5s" }, diff --git a/consul/config/dev/recommend-service.json b/consul/config/dev/recommend-service.json index 883457e..8b92f18 100644 --- a/consul/config/dev/recommend-service.json +++ b/consul/config/dev/recommend-service.json @@ -2,7 +2,7 @@ "service": { "address": "recommend-service", "check": { - "http": "http://recommend-service:8003/health", + "http": "http://10.195.102.127:8003/health", "interval": "10s", "timeout": "5s" }, diff --git a/consul/config/dev/user-service.json b/consul/config/dev/user-service.json index 3bc7c0a..528e5df 100644 --- a/consul/config/dev/user-service.json +++ b/consul/config/dev/user-service.json @@ -2,7 +2,7 @@ "service": { "address": "user-service", "check": { - "http": "http://user-service:8004/health", + "http": "http://10.195.102.127:8004/health", "interval": "10s", "timeout": "5s" }, diff --git a/consul/config/dev/whoami.json b/consul/config/dev/whoami.json deleted file mode 100644 index 93eda8c..0000000 --- a/consul/config/dev/whoami.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "service": { - "name": "whoami", - "tags": [ - "traefik.enable=true", - "traefik.http.routers.whoami.entrypoints=web", - "traefik.http.routers.whoami.rule=Path(\"/whoami\")", - "traefik.http.services.whoami.loadbalancer.server.port=80" - ], - "address": "whoami", - "port": 80, - "checks": [ - { - "http": "http://whoami:80/", - "interval": "10s", - "timeout": "2s" - } - ] - } -} diff --git a/docker-compose.aliyun.yml b/docker-compose.local.yml similarity index 59% rename from docker-compose.aliyun.yml rename to docker-compose.local.yml index a98841a..c65afd2 100644 --- a/docker-compose.aliyun.yml +++ b/docker-compose.local.yml @@ -5,40 +5,6 @@ networks: driver: bridge services: - consul: - image: consul:1.15 - container_name: ari-consul - restart: always - ports: - - "8500:8500" # Consul Web UI - - "8600:8600/udp" # DNS服务 - volumes: - - ./consul/config/${ENV_CONFIG_DIR}:/consul/config - command: "consul agent -server -bootstrap-expect=1 ${CONSUL_DEV_MODE} -config-dir=/consul/config -client=0.0.0.0" - networks: - - microservice-network - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8500/v1/status/leader"] - interval: 10s - timeout: 5s - retries: 3 - - traefik: - image: traefik:v2.11 - container_name: ari-traefik - command: - - --configFile=/etc/traefik/traefik.yml - ports: - - "80:80" - - "443:443" - - "8080:8080" # Traefik dashboard - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - ./traefik/config/${TRAEFIK_CONFIG_DIR}/traefik.yml:/etc/traefik/traefik.yml - - ./traefik/certs:/etc/traefik/certs - networks: - - microservice-network - data-service: image: crpi-amr0dt5e5pywqwaf.cn-hangzhou.personal.cr.aliyuncs.com/testrrr/data-service:latest container_name: ari-data-service @@ -54,11 +20,10 @@ services: image: crpi-amr0dt5e5pywqwaf.cn-hangzhou.personal.cr.aliyuncs.com/testrrr/quant-service:latest container_name: ari-quant-service restart: always - depends_on: - consul: - condition: service_healthy expose: - "8001" + ports: + - "8001:8001" networks: - microservice-network environment: @@ -68,11 +33,10 @@ services: image: crpi-amr0dt5e5pywqwaf.cn-hangzhou.personal.cr.aliyuncs.com/testrrr/emotion-service:latest container_name: ari-emotion-service restart: always - depends_on: - consul: - condition: service_healthy expose: - "8002" + ports: + - "8002:8002" networks: - microservice-network environment: @@ -82,11 +46,10 @@ services: image: crpi-amr0dt5e5pywqwaf.cn-hangzhou.personal.cr.aliyuncs.com/testrrr/recommend-service:latest container_name: ari-recommend-service restart: always - depends_on: - consul: - condition: service_healthy expose: - "8003" + ports: + - "8003:8003" networks: - microservice-network environment: @@ -96,11 +59,10 @@ services: image: crpi-amr0dt5e5pywqwaf.cn-hangzhou.personal.cr.aliyuncs.com/testrrr/user-service:latest container_name: ari-user-service restart: always - depends_on: - consul: - condition: service_healthy expose: - "8004" + ports: + - "8004:8004" networks: - microservice-network environment: @@ -119,13 +81,9 @@ services: - user-service expose: - "80" + ports: + - "8080:8080" networks: - microservice-network environment: - - SERVICE_NAME=frontend - - whoami: - image: traefik/whoami - container_name: whoami - networks: - - microservice-network + - SERVICE_NAME=frontend \ No newline at end of file diff --git a/docker-compose.remote.yml b/docker-compose.remote.yml new file mode 100644 index 0000000..ea09d94 --- /dev/null +++ b/docker-compose.remote.yml @@ -0,0 +1,40 @@ +version: '3.8' + +networks: + microservice-network: + driver: bridge + +services: + consul: + image: consul:1.15 + container_name: ari-consul + restart: always + ports: + - "8500:8500" # Consul Web UI + - "8600:8600/udp" # DNS服务 + volumes: + - ./consul/config/${ENV_CONFIG_DIR}:/consul/config + command: "consul agent -server -bootstrap-expect=1 ${CONSUL_DEV_MODE} -config-dir=/consul/config -client=0.0.0.0" + networks: + - microservice-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8500/v1/status/leader"] + interval: 10s + timeout: 5s + retries: 3 + + traefik: + image: traefik:v2.11 + container_name: ari-traefik + command: + - --configFile=/etc/traefik/traefik.yml + ports: + - "80:80" + - "443:443" + - "8080:8080" # Traefik dashboard + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./traefik/config/${TRAEFIK_CONFIG_DIR}/traefik.yml:/etc/traefik/traefik.yml + - ./traefik/certs:/etc/traefik/certs + networks: + - microservice-network \ No newline at end of file diff --git a/run-local.sh b/run-local.sh new file mode 100644 index 0000000..2bb27ac --- /dev/null +++ b/run-local.sh @@ -0,0 +1,43 @@ +#!/bin/bash +set -e + +# 本地服务器启动脚本:部署业务服务 +# 配置参数 +REGISTRY="crpi-amr0dt5e5pywqwaf.cn-hangzhou.personal.cr.aliyuncs.com" +VERSION="latest" +COMPOSE_FILE=docker-compose.local.yml +USERNAME="2324802641zhengniannian@gmail.com" +# 远程Consul地址(请替换为实际远程服务器IP) +REMOTE_CONSUL_IP="your_remote_consul_server_ip" + +# 检查Docker和Docker Compose +if ! command -v docker &> /dev/null; then + echo "错误: Docker未安装" + exit 1 +fi + +if ! docker compose version &> /dev/null; then + echo "错误: Docker Compose未安装" + exit 1 +fi + +# 登录Docker仓库 +echo "登录阿里云Docker仓库..." +docker login --username=$USERNAME $REGISTRY +if [ $? -ne 0 ]; then + echo "错误: 仓库登录失败" + exit 1 +fi + +# 启动本地业务服务(不包含Consul和Traefik) +echo "正在启动本地业务服务..." +VERSION=$VERSION CONSUL_HTTP_ADDR="$REMOTE_CONSUL_IP:8500" docker compose -f $COMPOSE_FILE up -d data-service emotion-service frontend quant-service recommend-service user-service + +# 显示状态 + echo "\n本地服务状态:" +docker compose -f $COMPOSE_FILE ps data-service emotion-service frontend quant-service recommend-service user-service + +echo "\n查看日志命令: docker compose -f $COMPOSE_FILE logs -f" +echo "停止服务命令: docker compose -f $COMPOSE_FILE down" +echo "\n本地业务服务启动完成!" +exit 0 \ No newline at end of file diff --git a/run-remote.sh b/run-remote.sh new file mode 100644 index 0000000..1e0c6bc --- /dev/null +++ b/run-remote.sh @@ -0,0 +1,41 @@ +#!/bin/bash +set -e + +# 远程服务器启动脚本:部署Consul和Traefik +# 配置参数 +REGISTRY="crpi-amr0dt5e5pywqwaf.cn-hangzhou.personal.cr.aliyuncs.com" +VERSION="latest" +COMPOSE_FILE="docker-compose.remote.yml" +USERNAME="2324802641zhengniannian@gmail.com" + +# 检查Docker和Docker Compose +if ! command -v docker &> /dev/null; then + echo "错误: Docker未安装" + exit 1 +fi + +if ! docker compose version &> /dev/null; then + echo "错误: Docker Compose未安装" + exit 1 +fi + +# 登录Docker仓库 +echo "登录阿里云Docker仓库..." +docker login --username=$USERNAME $REGISTRY +if [ $? -ne 0 ]; then + echo "错误: 仓库登录失败" + exit 1 +fi + +# 启动远程服务(Consul和Traefik) +echo "正在启动远程服务..." +VERSION=$VERSION docker compose -f $COMPOSE_FILE up -d consul traefik + +# 显示状态 + echo "\n远程服务状态:" +docker compose -f $COMPOSE_FILE ps consul traefik + +echo "\n查看日志命令: docker compose -f $COMPOSE_FILE logs -f consul traefik" +echo "停止服务命令: docker compose -f $COMPOSE_FILE down consul traefik" +echo "\n远程服务启动完成!" +exit 0 \ No newline at end of file diff --git a/run-services.sh b/run-services.sh deleted file mode 100644 index 22dcaf2..0000000 --- a/run-services.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -set -e - -# 配置参数 -REGISTRY="crpi-amr0dt5e5pywqwaf.cn-hangzhou.personal.cr.aliyuncs.com" -VERSION="latest" -COMPOSE_FILE="docker-compose.aliyun.yml" -USERNAME="2324802641zhengniannian@gmail.com" - -# 检查Docker是否安装 -if ! command -v docker &> /dev/null; then - echo "错误: Docker未安装,请先安装Docker" - exit 1 -fi - -# 检查Docker Compose是否安装(使用docker compose子命令) -if ! docker compose version &> /dev/null; then - echo "错误: Docker Compose未安装,请先安装Docker Compose" - exit 1 -fi - -# 登录阿里云Docker仓库 -echo "登录阿里云Docker仓库..." -docker login --username=$USERNAME $REGISTRY -if [ $? -ne 0 ]; then - echo "错误: 仓库登录失败,请检查用户名和密码" - exit 1 -fi - -# 启动服务 -echo "正在启动服务 (版本: $VERSION)..." -VERSION=$VERSION docker compose -f $COMPOSE_FILE up -d - -# 检查服务状态 -echo "\n服务状态:" -docker compose -f $COMPOSE_FILE ps - -# 显示日志命令提示 -echo "\n查看服务日志命令: docker compose -f $COMPOSE_FILE logs -f" -echo "停止服务命令: docker compose -f $COMPOSE_FILE down" -echo "\n服务启动完成!" -exit 0 \ No newline at end of file