影刀RPA云端部署:阿里云腾讯云服务器运行RPA完全指南
·
影刀RPA云端部署:阿里云腾讯云服务器运行RPA完全指南
作者:林焱 | 发布平台:CSDN / 公众号 / 掘金
前言:为什么需要云端部署

本地运行RPA有一个致命缺点:依赖本地电脑持续开机。电脑关机、断网、电源故障,流程就中断了。
云端部署的优势:
- 7×24小时稳定运行:服务器不会下班
- 不占用本机资源:让你的电脑轻装上阵
- 弹性伸缩:需要更多算力时按需扩展
- 远程管理:随时随地监控流程状态
本文讲解如何在阿里云/腾讯云服务器上部署影刀RPA,并实现自动化调度。

一、服务器选型与配置
推荐配置
| 场景 | CPU | 内存 | 推荐机型 | 月费参考 |
|---|---|---|---|---|
| 纯数据处理(无界面) | 2核 | 4GB | 腾讯云S5.MEDIUM4 | ~50元/月 |
| 有界面的浏览器操作 | 4核 | 8GB | 阿里云c6.xlarge | ~150元/月 |
| 多流程并发运行 | 8核 | 16GB | 腾讯云S5.2XLARGE16 | ~300元/月 |
系统推荐:Windows Server 2019(更好的兼容性)或 Ubuntu 20.04 LTS(成本更低)
店群矩阵自动化突破运营极限!
二、Linux服务器部署(Headless模式)
安装Python环境
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装Python 3.10+
sudo apt install python3.10 python3-pip python3-venv -y
# 创建虚拟环境
mkdir -p /opt/rpa
cd /opt/rpa
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install shadowbot requests pandas openpyxl schedule
安装无头浏览器(Headless Chrome)
# 安装Chrome
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google.list
sudo apt-get update
sudo apt-get install -y google-chrome-stable
# 安装显示服务器(用于需要图形界面的场景)

sudo apt install -y xvfb x11-utils
# 验证安装
google-chrome --version
Python代码中配置Headless模式
import shadowbot as sb
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def create_headless_browser():
"""创建无头浏览器"""
options = Options()
options.add_argument("--headless") # 无头模式
options.add_argument("--no-sandbox") # 在Docker中必须
options.add_argument("--disable-dev-shm-usage") # 内存优化
options.add_argument("--disable-gpu") # 禁用GPU
options.add_argument("--window-size=1920,1080") # 设置分辨率
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
driver = webdriver.Chrome(options=options)
return driver
# 或者使用影刀内置的无头模式
def run_headless_flow():
"""无头模式运行流程"""
# 影刀支持headless配置
browser_config = {
"headless": True,
"window_width": 1920,
"window_height": 1080,
}
page = sb.browser.get_page("https://example.com", **browser_config)
data = page.get_text("h1")
return data
三、使用Xvfb运行需要图形界面的程序
# 启动虚拟显示
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
# 运行需要图形界面的Python脚本
DISPLAY=:99 python3 /opt/rpa/main.py
import subprocess
import os
def run_with_virtual_display(script_path):
"""在虚拟显示环境中运行脚本"""
# 启动Xvfb
xvfb_proc = subprocess.Popen([
'Xvfb', ':99', '-screen', '0', '1920x1080x24'
])
env = os.environ.copy()
env['DISPLAY'] = ':99'
# 运行脚本

result = subprocess.run(
['python3', script_path],
env=env,
capture_output=True,
text=True
)
# 停止Xvfb
xvfb_proc.terminate()
return result.returncode, result.stdout, result.stderr
四、配置系统服务(开机自启)
创建systemd服务
# 创建服务文件
sudo tee /etc/systemd/system/rpa-scheduler.service << 'EOF'
[Unit]
Description=RPA Automation Scheduler
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/opt/rpa
Environment=DISPLAY=:99
ExecStartPre=/usr/bin/Xvfb :99 -screen 0 1920x1080x24
ExecStart=/opt/rpa/venv/bin/python /opt/rpa/scheduler.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable rpa-scheduler
sudo systemctl start rpa-scheduler
# 查看状态
sudo systemctl status rpa-scheduler
sudo journalctl -u rpa-scheduler -f # 实时日志
五、Docker容器化部署

# Dockerfile
FROM python:3.10-slim
# 安装系统依赖
RUN apt-get update && apt-get install -y \
wget \
gnupg \
xvfb \
x11-utils \
fonts-wqy-zenhei \
fonts-wqy-microhei \
&& rm -rf /var/lib/apt/lists/*
# 安装Chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \
&& apt-get update && apt-get install -y google-chrome-stable
# 安装Python依赖
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制代码
COPY . .
# 设置环境变量
ENV DISPLAY=:99
ENV PYTHONUNBUFFERED=1
# 启动脚本
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
#!/bin/bash
# entrypoint.sh
# 启动虚拟显示
Xvfb :99 -screen 0 1920x1080x24 &
sleep 1
# 启动RPA调度器
exec python /app/scheduler.py
# docker-compose.yml
version: '3.8'
services:
rpa-scheduler:
build: .
restart: unless-stopped
volumes:
- ./data:/app/data
- ./logs:/app/logs
- ./config:/app/config
environment:
- BAIDU_TRANSLATE_APP_ID=${BAIDU_TRANSLATE_APP_ID}
- WECOM_WEBHOOK=${WECOM_WEBHOOK}
mem_limit: 2g
cpus: '2'
rpa-monitor:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
volumes:
grafana_data:
# 部署命令
docker-compose up -d
# 查看日志
docker-compose logs -f rpa-scheduler
# 更新部署
git pull
docker-compose build
docker-compose up -d --force-recreate

六、云函数部署(轻量级场景)
对于不需要浏览器操作的纯数据处理流程,可以使用腾讯云函数/阿里云函数计算:
temu店群自动化报活动案例
# 腾讯云函数示例(main.py)
import json
import requests
import pandas as pd
from io import BytesIO
def main_handler(event, context):
"""云函数入口"""
# 解析触发参数
body = json.loads(event.get("body", "{}"))
task_type = body.get("task_type", "default")
if task_type == "data_sync":
result = sync_data_from_api()
elif task_type == "report_generate":
result = generate_report()
else:
result = {"error": f"未知任务类型:{task_type}"}
return {
"statusCode": 200,
"body": json.dumps(result, ensure_ascii=False),
"headers": {"Content-Type": "application/json"}
}
def sync_data_from_api():
"""从API同步数据"""
resp = requests.get("https://api.example.com/data", timeout=30)
data = resp.json()
# 处理数据...
processed = len(data)
return {"synced": processed, "status": "success"}

七、远程监控与告警
import paramiko
from datetime import datetime
def check_remote_rpa_status(host, username, key_file):
"""检查远程服务器RPA运行状态"""
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=username, key_filename=key_file)
# 检查服务状态
_, stdout, _ = client.exec_command("systemctl is-active rpa-scheduler")
service_status = stdout.read().decode().strip()
# 检查最新日志
_, stdout, _ = client.exec_command("journalctl -u rpa-scheduler -n 20 --no-pager")
recent_logs = stdout.read().decode()
# 检查系统资源
_, stdout, _ = client.exec_command("free -m | grep Mem")
mem_info = stdout.read().decode().strip()
_, stdout, _ = client.exec_command("top -bn1 | grep 'Cpu(s)'")
cpu_info = stdout.read().decode().strip()
client.close()
status = {
"host": host,
"check_time": datetime.now().isoformat(),
"service_status": service_status,
"is_running": service_status == "active",
"memory": mem_info,
"cpu": cpu_info,
"recent_errors": [l for l in recent_logs.split('\n') if 'ERROR' in l],
}
# 如果服务不在运行,发送告警
if not status["is_running"]:
send_alert(f"⚠️ 服务器 {host} 上的RPA服务已停止!请检查。")
return status
# 每10分钟检查一次
import schedule, time
schedule.every(10).minutes.do(
check_remote_rpa_status,
host="1.2.3.4",
username="ubuntu",
key_file="/path/to/key.pem"
)
while True:
schedule.run_pending()
time.sleep(60)
成本优化建议
| 策略 | 节省比例 | 说明 |
|---|---|---|
| 使用竞价实例 | 60-80% | 适合可中断的批处理任务 |
| 按量计费 | 50% | 非7×24运行场景 |
| 选择低峰期执行 | 20% | 按需实例利用闲时资源 |
![]() |
| Headless减少内存 | 30% | 不加载图形界面 |
| 容器化提高密度 | 40% | 同一台服务器跑多个RPA |
总结
云端部署影刀RPA的推荐路径:
- 轻量数据处理:腾讯云函数 / 阿里云FC(按调用次数计费)
- 爬虫采集类:Ubuntu + Chrome Headless + systemd(稳定低成本)
- 桌面应用操作:Windows Server + Xvfb(最佳兼容性)
- 大规模并发:Docker + Kubernetes(弹性伸缩)
建议先在本地调试稳定后再迁移到云端,确保流程的健壮性。

作者:林焱 | 转载请注明出处
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)