docker-compose.yaml
services:
wa-app:
image: ghcr.io/pood1e/wa-app-service:${WA_APP_IMAGE_TAG}
container_name: wa-app
env_file:
- .env
environment:
WA_APP_LISTEN_ADDR: ${WA_APP_LISTEN_ADDR:-:50091}
WA_APP_DASHBOARD_HTTP_ADDR: ${WA_APP_DASHBOARD_HTTP_ADDR:-:8080}
WA_APP_DASHBOARD_STATIC_DIR: ${WA_APP_DASHBOARD_STATIC_DIR:-/app/dashboard/wa}
WA_APP_AUTH_PASSWORD: ${WA_APP_AUTH_PASSWORD:-}
WA_APP_PG_DSN: ${WA_APP_PG_DSN:-}
WA_APP_REDIS_URL: ${WA_APP_REDIS_URL:-}
WA_COMMON_PROXY: ${WA_COMMON_PROXY:-}
WA_NUMBER_PROBE_PROXY: ${WA_NUMBER_PROBE_PROXY:-}
WA_REGISTRATION_PROXY: ${WA_REGISTRATION_PROXY:-}
WA_APP_DATA_DIR: ${WA_APP_DATA_DIR:-/var/lib/wa-app}
ports:
- "${WA_APP_GRPC_HOST_PORT:-127.0.0.1:50091}:50091"
- "${WA_APP_DASHBOARD_HOST_PORT:-127.0.0.1:8080}:8080"
volumes:
- ./wa-app-data:${WA_APP_DATA_DIR:-/var/lib/wa-app}
restart: unless-stopped
volumes:
wa-app-data:
name: wa-app-data
env:
# WA app runtime
# Override these values before running: cp .env.example .env
# GHCR image tag (use a released git sha-<short> for reproducible rollout)
WA_APP_IMAGE_TAG=latest
# Container listener addresses
WA_APP_LISTEN_ADDR=:50091
WA_APP_DASHBOARD_HTTP_ADDR=:8080
WA_APP_DASHBOARD_STATIC_DIR=/app/dashboard/wa
# Optional dashboard login. Leave both empty to disable.
WA_APP_AUTH_PASSWORD=
# Host ports exposed from docker-compose
WA_APP_GRPC_HOST_PORT=50091
WA_APP_DASHBOARD_HOST_PORT=18081
# Persistent data directory inside container
WA_APP_DATA_DIR=/var/lib/wa-app
# Optional persistence backends (defaults to embedded sqlite/runtime state if empty)
WA_APP_PG_DSN=
WA_APP_REDIS_URL=
# Optional upstream proxies (leave empty for direct outbound)
WA_COMMON_PROXY=
WA_NUMBER_PROBE_PROXY=
WA_REGISTRATION_PROXY=
启动日志
2026/06/11 07:23:14 WA_APP_PG_DSN is not configured; wa-app uses sqlite durable store in /var/lib/wa-app
2026/06/11 07:23:14 WA_APP_REDIS_URL is not configured; wa-app uses sqlite runtime state in /var/lib/wa-app
2026/06/11 07:23:14 wa-app-service listening on :50091
2026/06/11 07:23:14 wa-app dashboard BFF listening on :8080
页面报错日志:
Unexpected Application Error!
Cannot read properties of undefined (reading 'phone')
TypeError: Cannot read properties of undefined (reading 'phone')
at Zg (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:16:40255)
at _x (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:16:40683)
at gx (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:16:38514)
at td (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:8:48101)
at Sd (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:8:70892)
at qh (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:8:81226)
at S1 (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:8:116970)
at vy (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:8:116016)
at Hd (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:8:115848)
at g1 (https://waapp.xxx.cc/assets/index-Dj6aFmJ0.js:8:112641)
💿 Hey developer 👋
You can provide a way better UX than this when your app throws errors by providing your own ErrorBoundary or errorElement prop on your route.
docker-compose.yaml
env:
启动日志
页面报错日志: