diff --git a/job_crawler/DEPLOY.md b/job_crawler/DEPLOY.md new file mode 100644 index 0000000..fb1e6d5 --- /dev/null +++ b/job_crawler/DEPLOY.md @@ -0,0 +1,167 @@ +# 部署指南 + +## 快速部署 + +### Linux/Mac + +```bash +# 添加执行权限 +chmod +x deploy.sh + +# 构建镜像 +./deploy.sh build + +# 启动服务 +./deploy.sh up + +# 查看日志 +./deploy.sh logs +``` + +### Windows + +```cmd +REM 构建镜像 +deploy.bat build + +REM 启动服务 +deploy.bat up + +REM 查看日志 +deploy.bat logs +``` + +## 部署命令 + +| 命令 | 说明 | +|------|------| +| `build` | 构建Docker镜像 | +| `up` | 启动所有服务(Kafka + App) | +| `down` | 停止所有服务 | +| `restart` | 重启应用服务 | +| `logs` | 查看应用日志 | +| `status` | 查看服务状态 | +| `clean` | 清理无用镜像 | + +## 手动部署 + +### 1. 构建镜像 + +```bash +docker build -t job-crawler:latest . +``` + +### 2. 推送到私有仓库(可选) + +```bash +# 打标签 +docker tag job-crawler:latest your-registry.com/job-crawler:latest + +# 推送 +docker push your-registry.com/job-crawler:latest +``` + +### 3. 启动服务 + +```bash +# 使用 docker-compose(推荐) +docker-compose up -d + +# 或单独运行容器 +docker run -d \ + --name job-crawler \ + -p 8000:8000 \ + -v $(pwd)/config:/app/config:ro \ + -v job-data:/app/data \ + -e CONFIG_PATH=/app/config/config.yml \ + job-crawler:latest +``` + +## 配置说明 + +### 1. 复制配置模板 + +```bash +cp config/config.yml.docker config/config.yml +``` + +### 2. 编辑配置文件 + +```yaml +api: + username: "your_username" # 修改为你的账号 + password: "your_password" # 修改为你的密码 + tasks: + - id: "your-task-id" # 修改为你的任务ID + name: "任务名称" + enabled: true +``` + +## 生产环境建议 + +### 1. 使用外部Kafka + +修改 `config/config.yml`: + +```yaml +kafka: + bootstrap_servers: your-kafka-host:9092 +``` + +修改 `docker-compose.yml`,移除 zookeeper 和 kafka 服务。 + +### 2. 数据持久化 + +确保挂载数据卷: + +```yaml +volumes: + - ./data:/app/data # 本地目录 + # 或使用命名卷 + - app_data:/app/data +``` + +### 3. 日志收集 + +```bash +# 查看日志 +docker-compose logs -f app + +# 导出日志 +docker-compose logs app > app.log +``` + +### 4. 健康检查 + +```bash +# 检查服务健康 +curl http://localhost:8000/health + +# 检查采集状态 +curl http://localhost:8000/status +``` + +## 常见问题 + +### Q: Kafka连接失败 + +检查 `config.yml` 中的 `kafka.bootstrap_servers`: +- Docker内部: `kafka:29092` +- 本地开发: `localhost:9092` + +### Q: 配置文件未生效 + +确保配置文件正确挂载: + +```bash +docker exec job-crawler cat /app/config/config.yml +``` + +### Q: 数据丢失 + +检查数据卷是否正确挂载: + +```bash +docker volume ls +docker volume inspect job_crawler_app_data +``` diff --git a/job_crawler/deploy.bat b/job_crawler/deploy.bat new file mode 100644 index 0000000..d6ced45 --- /dev/null +++ b/job_crawler/deploy.bat @@ -0,0 +1,85 @@ +@echo off +REM Windows 部署脚本 +setlocal enabledelayedexpansion + +set IMAGE_NAME=job-crawler +set IMAGE_TAG=latest +set CONTAINER_NAME=job-crawler + +if "%1"=="" goto help +if "%1"=="build" goto build +if "%1"=="up" goto up +if "%1"=="down" goto down +if "%1"=="restart" goto restart +if "%1"=="logs" goto logs +if "%1"=="status" goto status +if "%1"=="clean" goto clean +if "%1"=="help" goto help +goto help + +:build +echo [INFO] 构建镜像: %IMAGE_NAME%:%IMAGE_TAG% +docker build -t %IMAGE_NAME%:%IMAGE_TAG% . +echo [INFO] 构建完成 +goto end + +:up +echo [INFO] 启动服务... +if not exist "config\config.yml" ( + echo [WARN] 配置文件不存在,从模板复制 + copy config\config.yml.docker config\config.yml + echo [WARN] 请编辑 config\config.yml 填入账号密码后重新运行 + goto end +) +docker-compose up -d +echo [INFO] 服务已启动 +echo [INFO] API地址: http://localhost:8000 +echo [INFO] API文档: http://localhost:8000/docs +goto end + +:down +echo [INFO] 停止服务... +docker-compose down +echo [INFO] 服务已停止 +goto end + +:restart +echo [INFO] 重启应用服务... +docker-compose restart app +echo [INFO] 重启完成 +goto end + +:logs +docker-compose logs -f --tail=100 app +goto end + +:status +echo === 容器状态 === +docker-compose ps +echo. +echo === 采集状态 === +curl -s http://localhost:8000/status +goto end + +:clean +echo [INFO] 清理无用镜像... +docker image prune -f +echo [INFO] 清理完成 +goto end + +:help +echo 用法: deploy.bat [命令] +echo. +echo 命令: +echo build 构建镜像 +echo up 启动所有服务 +echo down 停止所有服务 +echo restart 重启应用服务 +echo logs 查看日志 +echo status 查看服务状态 +echo clean 清理无用镜像 +echo help 显示帮助 +goto end + +:end +endlocal diff --git a/job_crawler/deploy.sh b/job_crawler/deploy.sh new file mode 100644 index 0000000..7f0dbdb --- /dev/null +++ b/job_crawler/deploy.sh @@ -0,0 +1,123 @@ +#!/bin/bash +# 部署脚本 + +set -e + +# 配置 +IMAGE_NAME="job-crawler" +IMAGE_TAG="latest" +CONTAINER_NAME="job-crawler" +REGISTRY="" # 私有仓库地址,如: registry.example.com + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +log_error() { echo -e "${RED}[ERROR]${NC} $1"; } + +# 显示帮助 +show_help() { + echo "用法: ./deploy.sh [命令]" + echo "" + echo "命令:" + echo " build 构建镜像" + echo " push 推送镜像到仓库" + echo " up 启动所有服务 (docker-compose)" + echo " down 停止所有服务" + echo " restart 重启应用服务" + echo " logs 查看日志" + echo " status 查看服务状态" + echo " clean 清理无用镜像" + echo " help 显示帮助" +} + +# 构建镜像 +build() { + log_info "构建镜像: ${IMAGE_NAME}:${IMAGE_TAG}" + docker build -t ${IMAGE_NAME}:${IMAGE_TAG} . + log_info "构建完成" +} + +# 推送镜像 +push() { + if [ -z "$REGISTRY" ]; then + log_error "请先配置 REGISTRY 变量" + exit 1 + fi + FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" + log_info "推送镜像: ${FULL_IMAGE}" + docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${FULL_IMAGE} + docker push ${FULL_IMAGE} + log_info "推送完成" +} + +# 启动服务 +up() { + log_info "启动服务..." + + # 检查配置文件 + if [ ! -f "config/config.yml" ]; then + log_warn "配置文件不存在,从模板复制" + cp config/config.yml.docker config/config.yml + log_warn "请编辑 config/config.yml 填入账号密码后重新运行" + exit 1 + fi + + docker-compose up -d + log_info "服务已启动" + log_info "API地址: http://localhost:8000" + log_info "API文档: http://localhost:8000/docs" +} + +# 停止服务 +down() { + log_info "停止服务..." + docker-compose down + log_info "服务已停止" +} + +# 重启应用 +restart() { + log_info "重启应用服务..." + docker-compose restart app + log_info "重启完成" +} + +# 查看日志 +logs() { + docker-compose logs -f --tail=100 app +} + +# 查看状态 +status() { + echo "=== 容器状态 ===" + docker-compose ps + echo "" + echo "=== 采集状态 ===" + curl -s http://localhost:8000/status 2>/dev/null | python -m json.tool || echo "服务未启动" +} + +# 清理 +clean() { + log_info "清理无用镜像..." + docker image prune -f + log_info "清理完成" +} + +# 主逻辑 +case "${1:-help}" in + build) build ;; + push) push ;; + up) up ;; + down) down ;; + restart) restart ;; + logs) logs ;; + status) status ;; + clean) clean ;; + help) show_help ;; + *) show_help ;; +esac