# traffic02 **Repository Path**: gitee-aaron/traffic02 ## Basic Information - **Project Name**: traffic02 - **Description**: 智慧交通项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-14 - **Last Updated**: 2025-10-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Traffic 应用部署与运行指南(统一版) 本项目提供一体化 Docker 镜像,包含前后端。本文档整合了根目录与 `deploy/README.md` 的内容,统一说明镜像的构建、运行、配置、访问与故障排查。建议仅维护此文档。 ## 概述 - 镜像包含完整前后端,但默认不会自动启动服务,需要配置 `.env` 后通过启动脚本启动。 - 前端 8080 的 `/api` 路由由内置轻量反向代理转发到后端(`API_BASE`)。 - 前端静态资源(包含 `public/`)由容器内 `/app/dist` 根目录直接提供,例如 `/gg-logo.svg`、`/login-illu-remote.jpg`。 ## 构建镜像 ```bash # 推荐:使用管理脚本构建(默认 amd64) cd deploy chmod +x manage.sh ./manage.sh build # 或手动构建(建议统一使用此标签) docker build --platform linux/amd64 -t traffic:25101502 -f deploy/Dockerfile.allinone . ``` ## 准备配置(.env) 在宿主机项目根目录准备 `.env`,至少包含数据库与密钥;推荐同时指定 `API_BASE`: ```bash # 必填 SECRET_KEY=your-strong-secret-key DB_URL=mysql+pymysql://user:pass@host:3306/myapp_db?charset=utf8mb4 API_BASE=http://127.0.0.1:2026 # 可选(如未配置则使用默认值或关闭) REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_DB=0 BACKEND_PORT=2026 FRONTEND_PORT_PROD=8080 WORKERS=2 AMAP_KEY=your-amap-key ``` 说明:也支持通过 `-e API_BASE=...` 在 `docker run` 时设置,但推荐使用 `.env` 统一管理并可热更新。 ## 运行容器 方式 A(一步运行并启动服务,挂载 `.env` 与日志目录): ```bash mkdir -p logs docker run -d \ --name traffic-app \ -p 2026:2026 \ -p 8080:8080 \ -v $(pwd)/logs:/app/logs \ -v $(pwd)/.env:/app/.env:ro \ -e BACKEND_PORT=2026 \ -e FRONTEND_PORT_PROD=8080 \ -e WORKERS=2 \ --entrypoint /app/start-container.sh \ docker-image-zjk-registry.cn-zhangjiakou.cr.aliyuncs.com/edu360-zjk/traffic:25101502 --daemon ``` 方式 B(先创建容器,再注入 `.env` 并启动服务): ```bash docker run -dit \ --name traffic-app \ -p 2026:2026 \ -p 8080:8080 \ -v $(pwd)/logs:/app/logs \ docker-image-zjk-registry.cn-zhangjiakou.cr.aliyuncs.com/edu360-zjk/traffic:25101502 docker cp .env traffic-app:/app/.env docker exec -it traffic-app /app/start-container.sh ``` (可选)管理脚本一键运行: ```bash cd deploy ./manage.sh run # 创建并运行容器(支持自动挂载根 .env) ./manage.sh start # 启动前后端服务 ./manage.sh logs # 查看日志 ``` ## 访问与验证 - 前端页面:`http://localhost:8080` - 后端 API:`http://localhost:2026` - API 文档:`http://localhost:2026/docs` - 反向代理:`http://localhost:8080/api -> ${API_BASE}/api` 说明:容器内服务监听 `0.0.0.0`(绑定所有网卡)。在宿主机或服务器上请使用 `localhost` 或实际 IP 访问;云服务器使用 `http://<服务器IP>:8080` 与 `http://<服务器IP>:2026`。 快速自测(主机会显示 200 OK): ```bash # 首页与根静态资源 curl -I http://localhost:8080/ curl -I http://localhost:8080/gg-logo.svg curl -I http://localhost:8080/login-illu-remote.jpg # API 文档与登录接口(默认管理员 admin/admin123) curl -I http://localhost:2026/docs curl -X POST http://localhost:8080/api/auth/login \ -H 'Content-Type: application/json' \ -d '{"username":"admin","password":"admin123"}' ``` ## 环境变量说明 - 必填: - `SECRET_KEY`:后端密钥,生产环境使用强随机值 - `DB_URL`:数据库连接(支持 MySQL,示例见上) - `API_BASE`:前端反向代理后端地址,默认 `http://127.0.0.1:2026` - 可选: - `REDIS_HOST`、`REDIS_PORT`、`REDIS_DB`:Redis 缓存 - `WORKERS`:后端工作进程数(默认 2) - `BACKEND_PORT`、`FRONTEND_PORT_PROD`:端口(默认 2026/8080) - `AMAP_KEY`:高德地图 Key(登录后台在【系统配置】中设置) ## 容器内启动脚本 `/app/start-container.sh` 会: 1. 检查并加载 `/app/.env`;提示修改默认密钥与数据库配置 2. 自动停止旧服务,启动后端与前端反向代理 3. 将输出写入 `/app/logs/backend.log` 与 `/app/logs/frontend.log` 4. 打印访问地址与状态 ## 故障排查 - 查看日志: ```bash docker exec -it traffic-app tail -f /app/logs/backend.log docker exec -it traffic-app tail -f /app/logs/frontend.log ``` - 常见问题: - 数据库连接失败:检查 `DB_URL`、网络与凭据 - 服务未启动:端口是否被占用、`.env` 格式是否为 `KEY=value` - 前端静态 404:确认使用最新镜像,`/app/dist` 存在构建产物 - `501 Unsupported method`:确认容器镜像为新版,前端反代已启用 - `/api` 403/404:请核对 `API_BASE` 指向正确后端;用 `curl` 直连自测 ## 管理脚本(可选) ```bash cd deploy ./manage.sh build # 构建镜像 ./manage.sh run # 创建并运行容器 ./manage.sh config # 编辑容器配置 ./manage.sh start # 启动服务 ./manage.sh stop # 停止容器 ./manage.sh restart # 重启容器 ./manage.sh logs # 查看日志 ./manage.sh shell # 进入容器 shell ./manage.sh status # 查看状态 ./manage.sh clean # 清理容器与镜像 ``` ## 目录结构(容器内) ``` /app/ ├── backend/ # 后端代码 ├── dist/ # 前端构建产物(含 public 静态文件) ├── logs/ # 日志目录 │ ├── backend.log │ ├── frontend.log │ ├── backend.pid │ └── frontend.pid ├── .env # 环境配置 ├── .env.template # 模板 └── start-container.sh # 启动脚本 ``` ## 镜像发布 ```bash # 标记镜像 docker tag traffic:25101502 docker-image-zjk-registry.cn-zhangjiakou.cr.aliyuncs.com/edu360-zjk/traffic:25101502 # 推送到仓库 docker push docker-image-zjk-registry.cn-zhangjiakou.cr.aliyuncs.com/edu360-zjk/traffic:25101502 # 从仓库拉取 docker pull docker-image-zjk-registry.cn-zhangjiakou.cr.aliyuncs.com/edu360-zjk/traffic:25101502 ``` ## 默认账号 - 管理员:`admin` / `admin123`