diff --git a/consul/config/consul.hcl b/consul/config/consul.hcl deleted file mode 100644 index 144ebe0..0000000 --- a/consul/config/consul.hcl +++ /dev/null @@ -1,8 +0,0 @@ -ui_config { - enabled = true -} - -acl { - enabled = false - default_policy = "deny" -} \ No newline at end of file diff --git a/consul/config/data-service.hcl b/consul/config/data-service.hcl deleted file mode 100644 index a87bccb..0000000 --- a/consul/config/data-service.hcl +++ /dev/null @@ -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`)" - } -} \ No newline at end of file diff --git a/consul/config/dev/consul.json b/consul/config/dev/consul.json new file mode 100644 index 0000000..1e8f996 --- /dev/null +++ b/consul/config/dev/consul.json @@ -0,0 +1,10 @@ +{ + "data_dir": "/consul/data", + "acl": { + "default_policy": "deny", + "enabled": false + }, + "ui_config": { + "enabled": true + } +} \ No newline at end of file diff --git a/consul/config/dev/data-service.json b/consul/config/dev/data-service.json new file mode 100644 index 0000000..149ae67 --- /dev/null +++ b/consul/config/dev/data-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/dev/emotion-service.json b/consul/config/dev/emotion-service.json new file mode 100644 index 0000000..0919352 --- /dev/null +++ b/consul/config/dev/emotion-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/dev/frontend.json b/consul/config/dev/frontend.json new file mode 100644 index 0000000..e191e41 --- /dev/null +++ b/consul/config/dev/frontend.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/dev/quant-service.json b/consul/config/dev/quant-service.json new file mode 100644 index 0000000..ef7a1ea --- /dev/null +++ b/consul/config/dev/quant-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/dev/recommend-service.json b/consul/config/dev/recommend-service.json new file mode 100644 index 0000000..61dfe90 --- /dev/null +++ b/consul/config/dev/recommend-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/dev/user-service.json b/consul/config/dev/user-service.json new file mode 100644 index 0000000..0384d27 --- /dev/null +++ b/consul/config/dev/user-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/dev/whoami.json b/consul/config/dev/whoami.json new file mode 100644 index 0000000..93eda8c --- /dev/null +++ b/consul/config/dev/whoami.json @@ -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" + } + ] + } +} diff --git a/consul/config/emotion-service.hcl b/consul/config/emotion-service.hcl deleted file mode 100644 index bed3c45..0000000 --- a/consul/config/emotion-service.hcl +++ /dev/null @@ -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`)" - } -} \ No newline at end of file diff --git a/consul/config/frontend.hcl b/consul/config/frontend.hcl deleted file mode 100644 index 24dc2aa..0000000 --- a/consul/config/frontend.hcl +++ /dev/null @@ -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(`/`)" - } -} \ No newline at end of file diff --git a/consul/config/prod/consul.json b/consul/config/prod/consul.json new file mode 100644 index 0000000..b10dc23 --- /dev/null +++ b/consul/config/prod/consul.json @@ -0,0 +1,10 @@ +{ + "data_dir": "/consul/data", + "acl": { + "default_policy": "deny", + "enabled": true + }, + "ui_config": { + "enabled": false + } +} \ No newline at end of file diff --git a/consul/config/prod/data-service.json b/consul/config/prod/data-service.json new file mode 100644 index 0000000..149ae67 --- /dev/null +++ b/consul/config/prod/data-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/prod/emotion-service.json b/consul/config/prod/emotion-service.json new file mode 100644 index 0000000..0919352 --- /dev/null +++ b/consul/config/prod/emotion-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/prod/frontend.json b/consul/config/prod/frontend.json new file mode 100644 index 0000000..e191e41 --- /dev/null +++ b/consul/config/prod/frontend.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/prod/quant-service.json b/consul/config/prod/quant-service.json new file mode 100644 index 0000000..ef7a1ea --- /dev/null +++ b/consul/config/prod/quant-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/prod/recommend-service.json b/consul/config/prod/recommend-service.json new file mode 100644 index 0000000..61dfe90 --- /dev/null +++ b/consul/config/prod/recommend-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/prod/user-service.json b/consul/config/prod/user-service.json new file mode 100644 index 0000000..0384d27 --- /dev/null +++ b/consul/config/prod/user-service.json @@ -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 + } +} \ No newline at end of file diff --git a/consul/config/prod/whoami.json b/consul/config/prod/whoami.json new file mode 100644 index 0000000..93eda8c --- /dev/null +++ b/consul/config/prod/whoami.json @@ -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" + } + ] + } +} diff --git a/consul/config/quant-service.hcl b/consul/config/quant-service.hcl deleted file mode 100644 index ae1434f..0000000 --- a/consul/config/quant-service.hcl +++ /dev/null @@ -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`)" - } -} \ No newline at end of file diff --git a/consul/config/recommend-service.hcl b/consul/config/recommend-service.hcl deleted file mode 100644 index 8b31706..0000000 --- a/consul/config/recommend-service.hcl +++ /dev/null @@ -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`)" - } -} \ No newline at end of file diff --git a/consul/config/user-service.hcl b/consul/config/user-service.hcl deleted file mode 100644 index e498f3f..0000000 --- a/consul/config/user-service.hcl +++ /dev/null @@ -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`)" - } -} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 501f721..e074844 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,8 +13,8 @@ services: - "8500:8500" # Consul Web UI - "8600:8600/udp" # DNS服务 volumes: - - ./consul/config:/consul/config - command: "consul agent -dev -config-dir=/consul/config -client=0.0.0.0" + - ./consul/config/${ENV_CONFIG_DIR}:/consul/config + command: "consul agent ${CONSUL_DEV_MODE} -config-dir=/consul/config -client=0.0.0.0" networks: - microservice-network healthcheck: @@ -24,41 +24,25 @@ services: retries: 3 traefik: - image: traefik:v2.9 + image: traefik:v2.11 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: - - --providers.consulcatalog=true - - --providers.consulcatalog.endpoint.address=consul:8500 - - --providers.consulcatalog.exposedbydefault=false - - --api.dashboard=true - - --log.level=INFO + - --configFile=/etc/traefik/traefik.yml + ports: + - "80:80" + - "8080:8080" # Traefik dashboard + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./traefik/config/${TRAEFIK_CONFIG_DIR}/traefik.yml:/etc/traefik/traefik.yml networks: - 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: build: ./services/data-service container_name: ari-data-service restart: always - depends_on: - consul: - condition: service_healthy - expose: - - "8000" + ports: + - "8000:8000" networks: - microservice-network environment: @@ -135,4 +119,10 @@ services: networks: - microservice-network environment: - - SERVICE_NAME=frontend \ No newline at end of file + - SERVICE_NAME=frontend + + whoami: + image: traefik/whoami + container_name: whoami + networks: + - microservice-network diff --git a/traefik/config/dev/traefik.yml b/traefik/config/dev/traefik.yml new file mode 100644 index 0000000..84f204b --- /dev/null +++ b/traefik/config/dev/traefik.yml @@ -0,0 +1,14 @@ +entryPoints: + web: + address: ":80" + + +providers: + consulCatalog: + endpoint: + address: "ari-consul:8500" + exposedByDefault: true + +api: + dashboard: true + insecure: true \ No newline at end of file diff --git a/traefik/config/prod/traefik.yml b/traefik/config/prod/traefik.yml new file mode 100644 index 0000000..e41a458 --- /dev/null +++ b/traefik/config/prod/traefik.yml @@ -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 \ No newline at end of file diff --git a/traefik/traefik.yml b/traefik/traefik.yml deleted file mode 100644 index ebeb765..0000000 --- a/traefik/traefik.yml +++ /dev/null @@ -1,7 +0,0 @@ -entryPoints: - web: - address: ":80" -http: - middlewares: - compress: - compress: true \ No newline at end of file