cd /Users/fubd/swan/project
docker compose --profile dev up -d --build- Frontend: http://localhost
- API health: http://localhost/api/health
- MySQL: 127.0.0.1:3306 (db: campus_job, root pw: from .env)
# build frontend once
docker compose run --rm frontend true
# then start backend + nginx + db
docker compose --profile prod up -d --build backend nginx db
# optional: enable nightly DB backups (prod profile)
docker compose --profile prod up -d db_backup- Edit
.envfor passwords and DB name
- Nightly at 03:00,
db_backupwritesbackups/backup-YYYY-MM-DD.sql.gzand prunes >7 days - Restore example:
gunzip -c backups/backup-YYYY-MM-DD.sql.gz | mysql -h 127.0.0.1 -P 3306 -uroot -p${MYSQL_ROOT_PASSWORD} ${MYSQL_DATABASE}make up-dev-container- 前端入口:
http://localhost/ - 后端健康:
http://localhost:8080/api/health - API 根路径:
http://localhost:8080/api - MySQL:
127.0.0.1:3306(数据库名/密码来自.env) - 停止 dev 服务:
make stop-dev-container - 完全关闭(含 db):
make down-dev-container
说明(端口稳定性):
- 启动前释放
5173/8080,避免与本机进程冲突。 frontend-dev:5173、backend-dev:8080、nginx-dev:80端口固定。nginx-dev使用 Docker 内置 DNS(resolver 127.0.0.11)动态解析上游容器,容器重启不再 502。
备用启动(等价的 Compose):
docker compose --profile dev up -d --build db backend-dev frontend-dev nginx-dev# 前端仅本机运行(不要同时启动 frontend-dev 容器)
API_PROXY=http://localhost:8080 npm run dev- 预览端口固定:
frontend/rsbuild.config.ts已设置strictPort: true和host: "0.0.0.0"。 - 本机模式推荐在不运行容器前端的情况下使用,避免端口冲突。
make up-dev-container:启动容器化开发(db + backend-dev + frontend-dev + nginx-dev)make stop-dev-container:停止 dev 服务(不删数据卷)make down-dev-container:关闭整个栈(含 db)make backend-dev-logs/make frontend-dev-logs:查看容器日志make up-prod:生产栈(backend + frontend + nginx;前端由 nginx 提供 dist)
-
构建并推送镜像
- 登录:
make docker-login ALIYUN_USERNAME=1997f16cd - 后端:
make build-push-backend VERSION=1.0.0 - Nginx(前端 dist):
make build-push-nginx VERSION=1.0.0 - 数据库(内置 init SQL):
make build-push-db VERSION=1.0.0 - 一键(含 DB):
make release-all VERSION=1.0.0 ALIYUN_USERNAME=1997f16cd
- 登录:
-
远程部署(零拷贝,SSH 管道执行)
make remote-deploy REMOTE_HOST=root@your-server ALIYUN_USERNAME=1997f16cd VERSION=1.0.0 MYSQL_ROOT_PASSWORD=**** MYSQL_DATABASE=campus JWT_SECRET=****- 说明:
- 无需复制仓库或落地 compose,服务端直接从标准输入读取
docker-compose.remote.yml - DB 镜像在首次数据卷为空时自动执行内置 SQL;后续保留数据卷即可
- 敏感变量建议用服务器侧环境或
.env管理
- 无需复制仓库或落地 compose,服务端直接从标准输入读取
docs/开发环境操作手册.md:本地与容器化开发、数据脚本docs/架构与运维设计.md:组件架构、Compose、镜像策略docs/发布与部署.md:发布到阿里云、零拷贝远程部署、健康校验、升级回滚
- 一键:
tools/release.sh --version 1.0.0 --user 1997f16cd --publish - 远程(SSH 零拷贝):
tools/release.sh --version 1.0.0 --user 1997f16cd --remote root@your-server --mysql-root **** --mysql-db campus --jwt **** --registry registry.cn-hangzhou.aliyuncs.com - 远程(SSH + .env):
tools/release.sh --version 1.0.0 --user 1997f16cd --remote root@your-server --env-file .env - 远程(docker context):
tools/release.sh --version 1.0.0 --user 1997f16cd --context prod --env-file .env