Files
qiandao/scripts/build.sh
ayou 1557920e14 refactor: 统一路由参数格式为花括号并更新部署说明
将路由参数从 `:id` 和 `:key` 格式统一为 `{id}` 和 `{key}` 格式
更新 build.sh 脚本以优先使用实际 .env 文件,并同步更新部署说明文档
2025-10-23 21:43:27 +08:00

104 lines
2.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")"/.. && pwd)"
FRONTEND_DIR="$ROOT_DIR/frontend"
BACKEND_DIR="$ROOT_DIR"
RELEASE_DIR="$ROOT_DIR/release"
BUNDLE_DIR="$RELEASE_DIR/qiandao_bundle"
TS="$(date +%Y%m%d_%H%M%S)"
ARCHIVE_NAME="qiandao_${TS}.tar.gz"
echo "==> 清理并准备发布目录"
rm -rf "$BUNDLE_DIR"
mkdir -p "$BUNDLE_DIR"
echo "==> 构建前端 (vite build)"
pushd "$FRONTEND_DIR" >/dev/null
npm ci
npm run build
popd >/dev/null
echo "==> 构建后端 (cargo build --release)"
pushd "$BACKEND_DIR" >/dev/null
cargo build --release
popd >/dev/null
echo "==> 收集构建产物"
# 后端二进制
mkdir -p "$BUNDLE_DIR/backend"
cp "$BACKEND_DIR/target/release/qiandao" "$BUNDLE_DIR/backend/"
# 前端静态文件
mkdir -p "$BUNDLE_DIR/frontend"
cp -r "$FRONTEND_DIR/dist" "$BUNDLE_DIR/frontend/"
# 环境变量文件:优先复制实际 .env若不存在则用 .env.example 作为 .env
if [[ -f "$ROOT_DIR/.env" ]]; then
cp "$ROOT_DIR/.env" "$BUNDLE_DIR/backend/.env"
elif [[ -f "$ROOT_DIR/.env.example" ]]; then
cp "$ROOT_DIR/.env.example" "$BUNDLE_DIR/backend/.env"
fi
# 生成部署说明
cat > "$BUNDLE_DIR/README_DEPLOY.md" << 'EOF'
# 部署说明(前后端打包)
## 内容结构
- backend/: 后端二进制与环境变量
- qiandao: 后端二进制
- .env: 环境变量文件(若为空,请复制并编辑)
- frontend/: 前端静态资源
- dist/: 生产构建后的静态文件
## 运行后端
```bash
cd backend
chmod +x ./qiandao
# 如需自定义端口或数据库,修改 .env 或以环境变量覆盖:
# SERVER_ADDR=0.0.0.0:3001 DATABASE_URL=... JWT_SECRET=... ./qiandao
./qiandao
```
后端默认监听端口:`3001`
## 运行前端
将 `frontend/dist` 作为静态网站托管(例如 Nginx
```nginx
server {
listen 80;
server_name your-domain;
root /var/www/qiandao/frontend/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# 反向代理后端 API
location /api/ {
proxy_pass http://127.0.0.1:3001/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
## 环境变量
将 `.env` 放在 `backend/` 目录或系统环境中。确保配置正确的 MySQL、JWT 等。
## 注意事项
- 前端构建后产物在 `frontend/dist`,直接静态托管即可。
- 后端为单个二进制,无需额外依赖(运行期需 MySQL 服务)。
- 若需使用 Docker请联系生成生产用 Dockerfile 与 compose。
EOF
mkdir -p "$RELEASE_DIR"
echo "==> 生成压缩包: $ARCHIVE_NAME"
pushd "$RELEASE_DIR" >/dev/null
tar -czf "$ARCHIVE_NAME" "$(basename "$BUNDLE_DIR")"
popd >/dev/null
echo "==> 打包完成"
echo "包路径: $RELEASE_DIR/$ARCHIVE_NAME"
echo "内容目录: $BUNDLE_DIR"