This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is the Docker Compose configuration repository for TranscodeGroup's fleet/vehicle tracking platform. It does not contain application source code; it packages and orchestrates pre-built backend/frontend images and infrastructure services (MySQL, Redis, MongoDB, RabbitMQ, MinIO, nginx, SRS, etc.).
The repo is deployed to /home/docker on target servers. Runtime configuration and compose overrides live in /home/docker-compose, and persistent data is written to /data.
All compose commands are run from /home/docker-compose, where the top-level compose.yaml and .env files reside.
# Validate compose configuration and required environment variables
docker compose config
# Export resolved compose config for diff review
docker compose config > compose-stack.yaml
# Start the stack in the background
docker compose up -d
# Recreate a specific service after changing its config/image
docker compose up -d --force-recreate <service>
# Follow logs for a service
docker compose logs -f <service>
# Validate that initdb INSERT statements match CREATE TABLE column counts
node /home/docker/scripts/check-init-sql.jsWhen modifying mysql8/initdb/*.sql, run check-init-sql.js before committing to catch column/value mismatches.
Each top-level directory (maintain/, jtt808/, bus/, video/, mysql8/, nginx/, etc.) contains one or more focused compose.yml fragments. These fragments are assembled by the example deployments in examples/ using Docker Compose include:
examples/track-http/compose.yaml— Tracker V2 single-node HTTP deployment.examples/track-https/compose.yaml— Tracker V2 single-node HTTPS deployment.examples/bus-http/compose.yaml/examples/bus-https/compose.yaml— Bus platform single-node deployments.examples/video-storage/compose.yaml/examples/video-stream/compose.yaml— Distributed video storage/streaming nodes.
A deployment typically includes shared infrastructure (mysql8, redis, mongodb, rabbitmq, minio), one or more backend service fragments, nginx fragments, and optional video or web-downloader fragments.
-
Tracker V2 (track)
maintain— Spring Boot backend (transcodegroup/maintain-server), the main API and device registry.jtt808— JT/T 808 device gateway (transcodegroup/jtt808-server), handles terminal connections and forwards tomaintain.video— SRS + RTP streaming stack for live video, playback, talk, and monitor.nginx— Reverse proxy and static frontend host for thetrackweb app.
-
Bus
gateway_808_2019— JT/T 808 gateway for the Bus product (transcodegroup/gateway-808-2019).gateway_web— Spring Boot web backend (transcodegroup/gateway-web).gateway_dispatch— Spring Boot scheduler (transcodegroup/gateway-dispatch).gateway_jsatl12— Active-safety alarm file gateway (transcodegroup/gateway-jsatl12).nginx— Reverse proxy and static frontend host for thebusweb app.
Both products share the same infrastructure services but use different MySQL databases (maintain vs cbus).
/home/docker— This repository./home/docker-compose/compose.yaml— Deployment-specific composition, created from anexamples/template./home/docker-compose/.env— Runtime overrides, created fromdefault.env./data— All persistent runtime data (MySQL data, logs, uploaded files, nginx html, SRS recordings, etc.)./home/docker-compose/bus-override/and/home/docker-compose/track-override/— Frontend override directories. Files here are copied into/data/nginx/html/when nginx starts. Use these to override_app.config.js,index-seo.html, favicons, and logos instead of editing/data/nginx/html/directly./home/docker-compose/token/— JWT RSA key pairs andip2region.xdb./home/docker-compose/opt/— Optional host binaries mounted into containers, e.g.ffmpeg,ffprobe, andifv2mp4for the jtt808 video-conversion tools.
mysql8/compose.yml mounts mysql8/initdb/ into /docker-entrypoint-initdb.d. Scripts run once on the first container startup, before the application connects. The directory is split into table-definition and seed-data files per logical database (maintain, cbus, etc.). When altering these schemas, update the corresponding seed INSERTs and validate with scripts/check-init-sql.js.
Services within the same compose project resolve each other by service name. Common aliases used in environment variables:
mysql8,redis,mongodb,rabbitmq,minio,nginx,jtt808,maintain,srs,rtp.
External access is exposed through nginx (ports 80/443 by default) and, for device protocols, directly through jtt808 / gateway_808_2019 / video RTP ports.
Frontend artifacts are not built here. They are downloaded from CI artifacts using scripts/teamcity-download-artifact.sh or deployed from tagged GitHub releases using scripts/distar-beta-deploy.sh. See scripts/README.md and jtt808/README.md for exact commands.
When a pull request changes the following version variables in default.env / default.en.env, the reviewer must confirm that the corresponding MySQL initialization scripts under mysql8/initdb/ are still consistent with the new application version:
BUS_GATEWAY_VERSION— checkmysql8/initdb/03-cbus-init-table.sqlandmysql8/initdb/04-cbus-init-data.sql.TRACK_MAINTAIN_VERSION— checkmysql8/initdb/01-maintain-init-table.sqlandmysql8/initdb/02-maintain-init-data.sql.
When either default.env or default.en.env is modified, the reviewer must check that the other file is updated in sync. The two files are Chinese and English templates for the same environment variables; version bumps, port changes, and new variables must be mirrored in both.
If the SQL init files are modified, run node scripts/check-init-sql.js to catch column/value mismatches. Any compose change must pass docker compose config.
These rules are also encoded in .github/pull_request_template.md.
- Most compose fragments rely on environment variables marked
{?required}in their image tags or env vars. Always rundocker compose configbeforeupto catch missing values. - MySQL init scripts only execute on a fresh data volume. To re-run them you must wipe
/data/mysql8/data, which destroys all data. - The
100-init-partition-table.sqlscript usesUSE maintain;andUSE cbus;to create monthly partitions for large tables (position, alarm, depart_arrive). - HTTPS deployments need a valid certificate path in
.env. For testing, use the built-in placeholder cert at${DOCKER_DIR}/nginx/ssl/placeholder. - GitHub Actions in
.github/workflows/only manage project board automation and PR author assignment; they do not build or test this repo.
README.md/README.en.md— Deployment quick-start.scripts/README.md— Frontend artifact download and distar deployment scripts.jtt808/README.md— FFmpeg and IFV-to-MP4 tooling setup.default.env/default.en.env— Full list of configurable environment variables.