run.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #!/bin/bash
  2. # 配置
  3. SOURCE_DIR="dist-prod" # 打包生成的源文件夹
  4. ZIP_NAME="dc.ifoodme.com.zip" # 输出的 ZIP 文件名
  5. TEMP_DIR="/tmp/dc.ifoodme.com" # 临时目录,用于构建目标结构
  6. TARGET_DIR="dc.ifoodme.com" # ZIP 中的目标目录名
  7. BUILD_CMD="pnpm run build:prod" # 打包命令
  8. # FTP 配置
  9. FTP_SERVER="104.233.167.88"
  10. FTP_PORT="21"
  11. FTP_USER="admin" # 这里替换成你的 FTP 用户名
  12. FTP_PASS="snF1szwjJZcJ" # 这里替换成你的 FTP 密码
  13. FTP_TARGET_DIR="/"
  14. # 颜色输出
  15. RED='\033[0;31m'
  16. GREEN='\033[0;32m'
  17. NC='\033[0m' # No Color
  18. # 检查命令是否存在
  19. command_exists() {
  20. command -v "$1" >/dev/null 2>&1
  21. }
  22. # 检查依赖
  23. check_dependencies() {
  24. for cmd in pnpm zip unzip curl; do
  25. if ! command_exists "$cmd"; then
  26. echo -e "${RED}错误:需要安装 $cmd${NC}"
  27. exit 1
  28. fi
  29. done
  30. }
  31. # 检查并删除旧 ZIP 文件
  32. check_and_remove_zip() {
  33. if [ -f "$ZIP_NAME" ]; then
  34. echo "检测到旧 ZIP 文件,删除中..."
  35. rm -f "$ZIP_NAME"
  36. echo -e "${GREEN}旧 ZIP 文件已删除${NC}"
  37. fi
  38. }
  39. # 执行打包
  40. run_build() {
  41. echo "开始执行打包: $BUILD_CMD..."
  42. if ! $BUILD_CMD; then
  43. echo -e "${RED}打包失败${NC}"
  44. exit 1
  45. fi
  46. echo -e "${GREEN}打包完成${NC}"
  47. }
  48. # 检查源文件夹
  49. check_source() {
  50. if [ ! -d "$SOURCE_DIR" ]; then
  51. echo -e "${RED}错误:源文件夹 $SOURCE_DIR 不存在${NC}"
  52. exit 1
  53. fi
  54. if [ ! -f "$SOURCE_DIR/index.html" ]; then
  55. echo -e "${RED}错误:$SOURCE_DIR 中没有 index.html 文件${NC}"
  56. exit 1
  57. fi
  58. }
  59. # 打包 ZIP
  60. create_zip() {
  61. echo "开始打包 ZIP..."
  62. # 创建临时目录并复制文件
  63. mkdir -p "$TEMP_DIR"
  64. cp -r "$SOURCE_DIR"/* "$TEMP_DIR"
  65. # 重命名临时目录为目标目录名
  66. mv "$TEMP_DIR" "$TARGET_DIR"
  67. # 打包为 ZIP
  68. zip -r "$ZIP_NAME" "$TARGET_DIR" >/dev/null
  69. if [ $? -eq 0 ]; then
  70. echo -e "${GREEN}打包成功:$ZIP_NAME${NC}"
  71. else
  72. echo -e "${RED}打包失败${NC}"
  73. exit 1
  74. fi
  75. }
  76. # FTP 上传
  77. upload_ftp() {
  78. echo "开始上传文件到 FTP 服务器 $FTP_SERVER:$FTP_PORT ..."
  79. curl -T "$ZIP_NAME" --ftp-create-dirs -u "$FTP_USER:$FTP_PASS" "ftp://$FTP_SERVER:$FTP_PORT$FTP_TARGET_DIR/$ZIP_NAME"
  80. if [ $? -eq 0 ]; then
  81. echo -e "${GREEN}文件上传成功:$FTP_TARGET_DIR/$ZIP_NAME${NC}"
  82. else
  83. echo -e "${RED}文件上传失败${NC}"
  84. exit 1
  85. fi
  86. }
  87. # 测试解压(可选)
  88. test_unzip() {
  89. echo "测试解压..."
  90. mkdir -p test_unzip
  91. unzip -o "$ZIP_NAME" -d test_unzip >/dev/null
  92. if [ -f "test_unzip/$TARGET_DIR/index.html" ]; then
  93. echo -e "${GREEN}解压测试成功:test_unzip/$TARGET_DIR/index.html 存在${NC}"
  94. else
  95. echo -e "${RED}解压测试失败:未生成正确的目录结构${NC}"
  96. exit 1
  97. fi
  98. }
  99. # 清理
  100. cleanup() {
  101. echo "清理临时文件..."
  102. rm -rf "$TARGET_DIR" test_unzip
  103. echo -e "${GREEN}清理完成${NC}"
  104. }
  105. # 主函数
  106. main() {
  107. check_dependencies
  108. check_and_remove_zip # 先检查并删除旧的 ZIP 文件
  109. run_build
  110. check_source
  111. create_zip
  112. upload_ftp
  113. cleanup
  114. echo -e "${GREEN}所有任务完成!${NC}"
  115. }
  116. # 执行
  117. main