xianyu-auto-reply/deploy.sh
2025-07-24 12:05:21 +08:00

289 lines
7.1 KiB
Bash
Raw 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.

#!/bin/bash
# 闲鱼自动回复系统 Docker 部署脚本
# 作者: Xianyu Auto Reply System
# 版本: 1.0.0
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 打印带颜色的消息
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查Docker是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
print_error "Docker 未安装,请先安装 Docker"
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
print_error "Docker Compose 未安装,请先安装 Docker Compose"
exit 1
fi
print_success "Docker 环境检查通过"
}
# 创建必要的目录
create_directories() {
print_info "创建必要的目录..."
# 创建目录
mkdir -p data
mkdir -p logs
mkdir -p backups
mkdir -p nginx/ssl
# 设置权限 (确保Docker容器可以写入)
chmod 755 data logs backups
# 检查权限
if [ ! -w "data" ]; then
print_error "data目录没有写权限"
exit 1
fi
if [ ! -w "logs" ]; then
print_error "logs目录没有写权限"
exit 1
fi
print_success "目录创建完成"
}
# 生成默认配置文件
generate_config() {
# 生成.env文件
if [ ! -f ".env" ]; then
if [ -f ".env.example" ]; then
print_info "从模板生成 .env 文件..."
cp .env.example .env
print_success ".env 文件已生成"
else
print_warning ".env.example 文件不存在,跳过 .env 文件生成"
fi
else
print_info ".env 文件已存在,跳过生成"
fi
# 生成global_config.yml文件
if [ ! -f "global_config.yml" ]; then
print_info "生成默认配置文件..."
cat > global_config.yml << EOF
# 闲鱼自动回复系统配置文件
API_ENDPOINTS:
login_check: https://passport.goofish.com/newlogin/hasLogin.do
message_headinfo: https://h5api.m.goofish.com/h5/mtop.idle.trade.pc.message.headinfo/1.0/
token: https://h5api.m.goofish.com/h5/mtop.taobao.idlemessage.pc.login.token/1.0/
APP_CONFIG:
api_version: '1.0'
app_key: 444e9908a51d1cb236a27862abc769c9
app_version: '1.0'
platform: web
AUTO_REPLY:
enabled: true
default_message: '亲爱的"{send_user_name}" 老板你好!所有宝贝都可以拍,秒发货的哈~不满意的话可以直接申请退款哈~'
max_retry: 3
retry_interval: 5
api:
enabled: false
host: 0.0.0.0 # 绑定所有网络接口支持IP访问
port: 8080 # Web服务端口
url: http://0.0.0.0:8080/xianyu/reply
timeout: 10
COOKIES:
last_update_time: ''
value: ''
DEFAULT_HEADERS:
accept: application/json
accept-language: zh-CN,zh;q=0.9
cache-control: no-cache
origin: https://www.goofish.com
pragma: no-cache
referer: https://www.goofish.com/
sec-ch-ua: '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"'
sec-ch-ua-mobile: '?0'
sec-ch-ua-platform: '"Windows"'
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
WEBSOCKET_URL: wss://wss-goofish.dingtalk.com/
HEARTBEAT_INTERVAL: 15
HEARTBEAT_TIMEOUT: 5
TOKEN_REFRESH_INTERVAL: 3600
TOKEN_RETRY_INTERVAL: 300
MESSAGE_EXPIRE_TIME: 300000
LOG_CONFIG:
level: INFO
format: '{time:YYYY-MM-DD HH:mm:ss.SSS} | {level} | {name}:{function}:{line} - {message}'
rotation: '1 day'
retention: '7 days'
EOF
print_success "默认配置文件已生成"
else
print_info "配置文件已存在,跳过生成"
fi
}
# 构建Docker镜像
build_image() {
print_info "构建 Docker 镜像..."
docker build -t xianyu-auto-reply:latest .
print_success "Docker 镜像构建完成"
}
# 启动服务
start_services() {
print_info "启动服务..."
# 检查是否需要启动 Nginx
if [ "$1" = "--with-nginx" ]; then
print_info "启动服务(包含 Nginx..."
docker-compose --profile with-nginx up -d
else
print_info "启动服务(不包含 Nginx..."
docker-compose up -d
fi
print_success "服务启动完成"
}
# 显示服务状态
show_status() {
print_info "服务状态:"
docker-compose ps
print_info "服务日志最近10行"
docker-compose logs --tail=10
}
# 显示访问信息
show_access_info() {
print_success "部署完成!"
echo ""
print_info "访问信息:"
echo " Web界面: http://localhost:8080"
echo " 默认账号: admin"
echo " 默认密码: admin123"
echo ""
print_info "常用命令:"
echo " 查看日志: docker-compose logs -f"
echo " 重启服务: docker-compose restart"
echo " 停止服务: docker-compose down"
echo " 更新服务: ./deploy.sh --update"
echo ""
print_info "数据目录:"
echo " 数据库: ./data/xianyu_data.db"
echo " 日志: ./logs/"
echo " 配置: ./global_config.yml"
}
# 更新服务
update_services() {
print_info "更新服务..."
# 停止服务
docker-compose down
# 重新构建镜像
build_image
# 启动服务
start_services $1
print_success "服务更新完成"
}
# 清理资源
cleanup() {
print_warning "清理 Docker 资源..."
# 停止并删除容器
docker-compose down --volumes --remove-orphans
# 删除镜像
docker rmi xianyu-auto-reply:latest 2>/dev/null || true
print_success "清理完成"
}
# 主函数
main() {
echo "========================================"
echo " 闲鱼自动回复系统 Docker 部署脚本"
echo "========================================"
echo ""
case "$1" in
--update)
print_info "更新模式"
check_docker
update_services $2
show_status
show_access_info
;;
--cleanup)
print_warning "清理模式"
cleanup
;;
--status)
show_status
;;
--help)
echo "使用方法:"
echo " $0 # 首次部署"
echo " $0 --with-nginx # 部署并启动 Nginx"
echo " $0 --update # 更新服务"
echo " $0 --update --with-nginx # 更新服务并启动 Nginx"
echo " $0 --status # 查看服务状态"
echo " $0 --cleanup # 清理所有资源"
echo " $0 --help # 显示帮助"
;;
*)
print_info "首次部署模式"
check_docker
create_directories
generate_config
build_image
start_services $1
show_status
show_access_info
;;
esac
}
# 执行主函数
main "$@"