This commit is contained in:
fanfpy 2025-07-10 10:20:10 +08:00
commit e2410616df
27 changed files with 330 additions and 146 deletions

View File

@ -1,8 +0,0 @@
ui_config {
enabled = true
}
acl {
enabled = false
default_policy = "deny"
}

View File

@ -1,17 +0,0 @@
service {
name = "data-service"
id = "data-service-1"
address = "data-service"
port = 8000
check {
http = "http://aktools:8080/quote_zh_a_hist?symbol=sh600000&period=daily&start_date=20220101&end_date=20220102"
interval = "10s"
timeout = "5s"
}
meta = {
traefik_enable = "true"
traefik_http_routers_data_service_rule = "PathPrefix(`/api/data`)"
}
}

View File

@ -0,0 +1,10 @@
{
"data_dir": "/consul/data",
"acl": {
"default_policy": "deny",
"enabled": false
},
"ui_config": {
"enabled": true
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "data-service",
"check": {
"http": "http://ari-data-service:8000/api/public/stock_bid_ask_em?symbol=000001",
"interval": "10s",
"timeout": "5s"
},
"id": "data-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.data-service.rule=Host(\"data.aristockai.com\")",
"traefik.http.routers.data-service.entrypoints=web"
],
"name": "data-service",
"port": 8000
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "emotion-service",
"check": {
"http": "http://emotion-service:8002/health",
"interval": "10s",
"timeout": "5s"
},
"id": "emotion-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.emotion-service.rule=Host(\"emotion.aristockai.com\")",
"traefik.http.routers.emotion-service.entrypoints=web"
],
"name": "emotion-service",
"port": 8002
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "frontend",
"check": {
"http": "http://frontend:80/",
"interval": "10s",
"timeout": "5s"
},
"id": "frontend-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.frontend.rule=Host(\"aristockai.com\") || Host(\"www.aristockai.com\")",
"traefik.http.routers.frontend.entrypoints=web"
],
"name": "frontend",
"port": 80
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "quant-service",
"check": {
"http": "http://quant-service:8001/health",
"interval": "10s",
"timeout": "5s"
},
"id": "quant-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.quant-service.rule=Host(\"quant.aristockai.com\")",
"traefik.http.routers.quant-service.entrypoints=web"
],
"name": "quant-service",
"port": 8001
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "recommend-service",
"check": {
"http": "http://recommend-service:8003/health",
"interval": "10s",
"timeout": "5s"
},
"id": "recommend-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.recommend-service.rule=Host(\"recommend.aristockai.com\")",
"traefik.http.routers.recommend-service.entrypoints=web"
],
"name": "recommend-service",
"port": 8003
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "user-service",
"check": {
"http": "http://user-service:8004/health",
"interval": "10s",
"timeout": "5s"
},
"id": "user-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.user-service.rule=Host(\"user.aristockai.com\")",
"traefik.http.routers.user-service.entrypoints=web"
],
"name": "user-service",
"port": 8004
}
}

View File

@ -0,0 +1,20 @@
{
"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"
}
]
}
}

View File

@ -1,17 +0,0 @@
service {
name = "emotion-service"
id = "emotion-service-1"
address = "emotion-service"
port = 8002
check {
http = "http://emotion-service:8002/health"
interval = "10s"
timeout = "5s"
}
meta = {
traefik_enable = "true"
traefik_http_routers_emotion_service_rule = "PathPrefix(`/api/emotion`)"
}
}

View File

@ -1,17 +0,0 @@
service {
name = "frontend"
id = "frontend-1"
address = "frontend"
port = 80
check {
http = "http://frontend:80/"
interval = "10s"
timeout = "5s"
}
meta = {
traefik_enable = "true"
traefik_http_routers_frontend_rule = "PathPrefix(`/`)"
}
}

View File

@ -0,0 +1,10 @@
{
"data_dir": "/consul/data",
"acl": {
"default_policy": "deny",
"enabled": true
},
"ui_config": {
"enabled": false
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "data-service",
"check": {
"http": "http://ari-data-service:8000/api/public/stock_bid_ask_em?symbol=000001",
"interval": "10s",
"timeout": "5s"
},
"id": "data-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.data-service.rule=Host(\"data.aristockai.com\")",
"traefik.http.routers.data-service.entrypoints=web"
],
"name": "data-service",
"port": 8000
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "emotion-service",
"check": {
"http": "http://emotion-service:8002/health",
"interval": "10s",
"timeout": "5s"
},
"id": "emotion-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.emotion-service.rule=Host(\"emotion.aristockai.com\")",
"traefik.http.routers.emotion-service.entrypoints=web"
],
"name": "emotion-service",
"port": 8002
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "frontend",
"check": {
"http": "http://frontend:80/",
"interval": "10s",
"timeout": "5s"
},
"id": "frontend-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.frontend.rule=Host(\"aristockai.com\") || Host(\"www.aristockai.com\")",
"traefik.http.routers.frontend.entrypoints=web"
],
"name": "frontend",
"port": 80
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "quant-service",
"check": {
"http": "http://quant-service:8001/health",
"interval": "10s",
"timeout": "5s"
},
"id": "quant-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.quant-service.rule=Host(\"quant.aristockai.com\")",
"traefik.http.routers.quant-service.entrypoints=web"
],
"name": "quant-service",
"port": 8001
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "recommend-service",
"check": {
"http": "http://recommend-service:8003/health",
"interval": "10s",
"timeout": "5s"
},
"id": "recommend-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.recommend-service.rule=Host(\"recommend.aristockai.com\")",
"traefik.http.routers.recommend-service.entrypoints=web"
],
"name": "recommend-service",
"port": 8003
}
}

View File

@ -0,0 +1,18 @@
{
"service": {
"address": "user-service",
"check": {
"http": "http://user-service:8004/health",
"interval": "10s",
"timeout": "5s"
},
"id": "user-service-1",
"tags": [
"traefik.enable=true",
"traefik.http.routers.user-service.rule=Host(\"user.aristockai.com\")",
"traefik.http.routers.user-service.entrypoints=web"
],
"name": "user-service",
"port": 8004
}
}

View File

@ -0,0 +1,20 @@
{
"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"
}
]
}
}

View File

@ -1,17 +0,0 @@
service {
name = "quant-service"
id = "quant-service-1"
address = "quant-service"
port = 8001
check {
http = "http://quant-service:8001/health"
interval = "10s"
timeout = "5s"
}
meta = {
traefik_enable = "true"
traefik_http_routers_quant_service_rule = "PathPrefix(`/api/quant`)"
}
}

View File

@ -1,17 +0,0 @@
service {
name = "recommend-service"
id = "recommend-service-1"
address = "recommend-service"
port = 8003
check {
http = "http://recommend-service:8003/health"
interval = "10s"
timeout = "5s"
}
meta = {
traefik_enable = "true"
traefik_http_routers_recommend_service_rule = "PathPrefix(`/api/recommend`)"
}
}

View File

@ -1,17 +0,0 @@
service {
name = "user-service"
id = "user-service-1"
address = "user-service"
port = 8004
check {
http = "http://user-service:8004/health"
interval = "10s"
timeout = "5s"
}
meta = {
traefik_enable = "true"
traefik_http_routers_user_service_rule = "PathPrefix(`/api/user`)"
}
}

View File

@ -13,8 +13,8 @@ services:
- "8500:8500" # Consul Web UI - "8500:8500" # Consul Web UI
- "8600:8600/udp" # DNS服务 - "8600:8600/udp" # DNS服务
volumes: volumes:
- ./consul/config:/consul/config - ./consul/config/${ENV_CONFIG_DIR}:/consul/config
command: "consul agent -dev -config-dir=/consul/config -client=0.0.0.0" command: "consul agent ${CONSUL_DEV_MODE} -config-dir=/consul/config -client=0.0.0.0"
networks: networks:
- microservice-network - microservice-network
healthcheck: healthcheck:
@ -24,41 +24,25 @@ services:
retries: 3 retries: 3
traefik: traefik:
image: traefik:v2.9 image: traefik:v2.11
container_name: ari-traefik container_name: ari-traefik
restart: always
depends_on:
consul:
condition: service_healthy
ports:
- "80:80" # 主入口
- "8080:8080" # Dashboard
volumes:
- ./traefik/traefik.yml:/etc/traefik/traefik.yml
- /var/run/docker.sock:/var/run/docker.sock:ro
command: command:
- --providers.consulcatalog=true - --configFile=/etc/traefik/traefik.yml
- --providers.consulcatalog.endpoint.address=consul:8500 ports:
- --providers.consulcatalog.exposedbydefault=false - "80:80"
- --api.dashboard=true - "8080:8080" # Traefik dashboard
- --log.level=INFO volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik/config/${TRAEFIK_CONFIG_DIR}/traefik.yml:/etc/traefik/traefik.yml
networks: networks:
- microservice-network - microservice-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik-dashboard.rule=PathPrefix(`/dashboard`) || PathPrefix(`/api`)"
- "traefik.http.routers.traefik-dashboard.service=api@internal"
- "traefik.http.routers.traefik-dashboard.entrypoints=web"
data-service: data-service:
build: ./services/data-service build: ./services/data-service
container_name: ari-data-service container_name: ari-data-service
restart: always restart: always
depends_on: ports:
consul: - "8000:8000"
condition: service_healthy
expose:
- "8000"
networks: networks:
- microservice-network - microservice-network
environment: environment:
@ -135,4 +119,10 @@ services:
networks: networks:
- microservice-network - microservice-network
environment: environment:
- SERVICE_NAME=frontend - SERVICE_NAME=frontend
whoami:
image: traefik/whoami
container_name: whoami
networks:
- microservice-network

View File

@ -0,0 +1,14 @@
entryPoints:
web:
address: ":80"
providers:
consulCatalog:
endpoint:
address: "ari-consul:8500"
exposedByDefault: true
api:
dashboard: true
insecure: true

View File

@ -0,0 +1,21 @@
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
consulCatalog:
endpoint:
address: "ari-consul:8500"
exposedByDefault: false
api:
dashboard: true
insecure: false

View File

@ -1,7 +0,0 @@
entryPoints:
web:
address: ":80"
http:
middlewares:
compress:
compress: true