You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多异构服务商Ubuntu 22.04+Docker Compose环境下,10+服务器爬虫工作流自动化管理咨询

多异构服务商Ubuntu 22.04+Docker Compose环境下,10+服务器爬虫工作流自动化管理咨询

兄弟,我太懂你这种挨个SSH登10多台服务器重复操作的痛苦了——光是输命令、等执行完都能耗掉大半天,还容易手滑输错指令😂。结合你用Ubuntu 22.04+Docker Compose的环境,给你几个从简单到进阶的方案,完全不会过度工程化:

一、最简方案:SSH批量执行脚本(零新工具学习成本)

如果你不想学新工具,先把SSH免密登录搞定(这是所有批量操作的基础),然后写个简单的bash脚本就能搞定重复操作:

  1. 先配置免密登录:
    在你的本地机器上生成密钥(如果还没的话):

    ssh-keygen -t ed25519
    

    然后把公钥批量传到所有服务器:

    # 假设你有个servers.txt,每行是服务器的IP/域名+用户名,比如 ubuntu@192.168.1.100
    while read server; do
        ssh-copy-id $server
    done < servers.txt
    
  2. 写批量执行脚本(比如deploy_scraper.sh):

    #!/bin/bash
    # 服务器列表文件
    SERVERS="servers.txt"
    
    # 要执行的命令,比如拉取代码、安装依赖、重启compose
    COMMANDS="
    cd /path/to/your/scraper-repo && git pull
    pip install -r requirements.txt
    docker-compose down && docker-compose up -d
    "
    
    while read server; do
        echo "=== 正在处理服务器 $server ==="
        ssh $server "$COMMANDS"
    done < $SERVERS
    

    给脚本加执行权限:chmod +x deploy_scraper.sh,之后跑./deploy_scraper.sh就能批量操作所有服务器了。

    👉 小技巧:如果不同服务商的服务器有差异(比如路径不同),可以把servers.txt分成不同分组文件(比如aws_servers.txt、azure_servers.txt),脚本里指定对应文件就行。

二、Ansible:其实没你想的那么复杂(推荐)

你提到考虑Ansible但怕复杂,其实对于10多台机器的场景,Ansible的配置超简单,完全不算过度工程化——它是无代理的,只依赖SSH,和你现有环境完美适配。

  1. 先在本地装Ansible:

    sudo apt update && sudo apt install ansible
    
  2. 写inventory文件(比如hosts.ini):

    [scraper_servers]
    server1 ansible_host=192.168.1.100 ansible_user=ubuntu
    server2 ansible_host=192.168.1.101 ansible_user=ubuntu
    # 把所有10+台服务器都列在这里
    
  3. 写极简playbook(比如deploy.yml):

    - name: 部署爬虫服务
      hosts: scraper_servers
      tasks:
        - name: 拉取最新代码
          git:
            repo: "git@your-repo-url.git"
            dest: /path/to/your/scraper-repo
            version: main
            update: yes
    
        - name: 安装Python依赖
          pip:
            requirements: /path/to/your/scraper-repo/requirements.txt
            executable: pip3
    
        - name: 重启Docker Compose服务
          docker_compose:
            project_src: /path/to/your/scraper-repo
            state: restarted
    
  4. 执行playbook:

    ansible-playbook deploy.yml -i hosts.ini
    

    👉 优势:Ansible会自动处理执行结果,失败的服务器会高亮提示,还能并行执行(默认5个,可通过-f 10改成10个并行),比脚本更可靠,而且配置文件可以复用,后续加新服务器只需要在inventory里加一行就行。

三、结合Docker Compose的进阶优化:用镜像代替服务器端安装

既然你已经在用Docker Compose,其实可以把爬虫的依赖都打包到Docker镜像里,服务器端只需要拉取镜像重启容器,完全不用在服务器上装库:

  1. 把爬虫代码和Dockerfile放到代码仓库,构建镜像后推到私有镜像仓库(比如Docker Hub私有库,或者本地搭个简单的registry):

    docker build -t your-username/scraper:latest .
    docker push your-username/scraper:latest
    
  2. 然后把批量操作的命令改成拉取镜像+重启compose:
    脚本里的命令改成:

    cd /path/to/your/scraper-repo && git pull
    docker-compose pull && docker-compose up -d
    

    或者Ansible playbook里的任务简化成:

    - name: 拉取最新代码
      git:
        repo: "git@your-repo-url.git"
        dest: /path/to/your/scraper-repo
        version: main
        update: yes
    
    - name: 重启Docker Compose服务(拉取最新镜像)
      docker_compose:
        project_src: /path/to/your/scraper-repo
        pull: yes
        state: restarted
    

    这样服务器上完全不用管依赖安装,所有环境都在镜像里,更稳定也更省心。

额外小建议

  • 把你的Docker Compose文件也放到代码仓库里,确保所有服务器用的是同一个配置;
  • 如果怕误操作,可以先在一台测试服务器上跑脚本/playbook,没问题再批量执行;
  • 可以给脚本/playbook加个简单的日志输出,方便事后排查问题。

备注:内容来源于stack exchange,提问作者robokonk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:58:15