diff --git a/.env.example b/.env.example index a79a405..0bf3c85 100644 --- a/.env.example +++ b/.env.example @@ -19,6 +19,10 @@ DB_STATEMENT_TIMEOUT_MS=10000 # Redis REDIS_ADDR=redis:6379 +# 服務跑在主機時連 Docker Redis 用此 port;避開 Mac 本機 redis-server 的 6379。 +# 這個衝突不會報錯,只會靜默連錯台(本機 redis 綁 127.0.0.1,比 docker 的 * 更精確,優先接手), +# 所以主機跑法一律用 REDIS_ADDR=127.0.0.1:6380,不要用 6379。 +REDIS_HOST_PORT=6380 # LINE LINE_CHANNEL_SECRET= diff --git a/README.md b/README.md index 35c530b..7195c3c 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,22 @@ docker compose --profile simulator up -d simulator > 重跑 `smoke_test.sh` 前建議先 `docker compose down -v` 清掉舊資料,避免殘留訂單干擾。 +### 只起相依服務、server 跑在主機(debug 常用) + +```bash +docker compose up -d postgis redis +DB_HOST=127.0.0.1 DB_PORT=5433 REDIS_ADDR=127.0.0.1:6380 go run ./cmd/server +``` + +> **三個變數都要覆寫**:`.env` 裡的 `postgis`/`redis` 是 compose 網路內的主機名, +> 在主機上解析不到。 +> +> **Redis 一定要用 6380,不要用 6379**:Mac 上常駐的 `redis-server` 綁 `127.0.0.1:6379`, +> Docker 綁 `*:6379`,**localhost 一律由本機那台接手**——連錯不會報錯,服務照跑, +> 但你在容器裡 `redis-cli KEYS` 什麼都查不到(狀態其實寫在本機那台)。 +> 這也是 postgis 讓開 5432 的同一個理由。用 +> `lsof -nP -iTCP:6379 -sTCP:LISTEN` 可以看誰在聽。 + --- ## API 端點 diff --git a/docker-compose.yml b/docker-compose.yml index 78d2628..fbc57fd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -40,7 +40,11 @@ services: redis: image: redis:7-alpine ports: - - "6379:6379" + # 6380 避免與本機 Redis 的 6379 衝突(與上面 postgis 讓開 5432 同一個理由)。 + # **這個衝突不會報錯,只會靜默連錯台**:本機 redis-server 綁 127.0.0.1、 + # docker 綁 *,localhost 一律由前者接手——服務跑在主機時吃的是本機那台, + # 而你在容器裡 `redis-cli KEYS` 什麼都查不到,很容易誤判成「鍵根本沒寫進去」。 + - "${REDIS_HOST_PORT:-6380}:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s