mgmt/lxc_chrome_automation_confi...

6.8 KiB
Raw Blame History

LXC 容器浏览器自动化环境配置方案

1. LXC 容器基础配置

# 创建 Ubuntu 22.04 基础容器
lxc launch ubuntu:22.04 chrome-automation

# 配置容器资源限制
lxc config set chrome-automation limits.cpu 2
lxc config set chrome-automation limits.memory 4GB

# 映射端口(如果需要外部访问)
lxc config device add chrome-automation proxy-port8080 proxy listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:8080

2. 容器内环境配置

2.1 基础系统包安装

# 进入容器
lxc exec chrome-automation -- bash

# 更新系统
apt update && apt upgrade -y

# 安装基础开发工具和图形支持
apt install -y \
    curl \
    wget \
    unzip \
    git \
    build-essential \
    xvfb \
    x11-utils \
    x11-xserver-utils \
    xdg-utils \
    libnss3 \
    libatk-bridge2.0-0 \
    libdrm2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxrandr2 \
    libgbm1 \
    libxss1 \
    libasound2 \
    fonts-liberation \
    libappindicator3-1 \
    xdg-utils \
    libsecret-1-dev \
    libgconf-2-4

2.2 安装 Chrome 浏览器

# 下载并安装 Google Chrome
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add -
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
apt update
apt install -y google-chrome-stable

2.3 安装浏览器自动化工具

# 安装 Node.js 和 npm
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs

# 安装 Python 和相关工具
apt install -y python3 python3-pip python3-venv

# 安装 Selenium 和浏览器驱动
pip3 install selenium webdriver-manager

# 下载 ChromeDriver
npm install -g chromedriver

2.4 配置无头模式运行环境

# 创建自动化脚本目录
mkdir -p /opt/browser-automation
cd /opt/browser-automation

# 创建 Chrome 无头模式启动脚本
cat > chrome-headless.sh << 'EOF'
#!/bin/bash
export DISPLAY=:99
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
sleep 2
google-chrome --headless --no-sandbox --disable-dev-shm-usage --disable-gpu --remote-debugging-port=9222 --disable-extensions --disable-plugins --disable-images &
sleep 3
EOF

chmod +x chrome-headless.sh

3. 自动化工具配置

3.1 Python Selenium 配置示例

# selenium_automation.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

def create_chrome_driver():
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--remote-debugging-port=9222")
    chrome_options.add_argument("--disable-extensions")
    chrome_options.add_argument("--disable-plugins")
    chrome_options.add_argument("--window-size=1920,1080")
    
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=chrome_options)
    return driver

# 使用示例
driver = create_chrome_driver()
driver.get("https://www.example.com")
print(driver.title)
driver.quit()

3.2 Node.js Puppeteer 配置示例

// puppeteer_automation.js
const puppeteer = require('puppeteer');

async function runAutomation() {
  const browser = await puppeteer.launch({
    headless: true,
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-dev-shm-usage',
      '--disable-gpu',
      '--window-size=1920,1080'
    ]
  });
  
  const page = await browser.newPage();
  await page.goto('https://www.example.com');
  const title = await page.title();
  console.log(title);
  
  await browser.close();
}

runAutomation();

4. 容器启动配置

4.1 启动脚本

cat > /opt/browser-automation/start.sh << 'EOF'
#!/bin/bash

# 启动 Xvfb 虚拟显示
export DISPLAY=:99
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
sleep 2

# 启动 Chrome 浏览器
google-chrome --headless --no-sandbox --disable-dev-shm-usage --disable-gpu --remote-debugging-port=9222 --disable-extensions --disable-plugins --disable-images &
sleep 3

# 可选:启动自动化服务
# python3 /opt/browser-automation/service.py

echo "Browser automation environment ready!"
EOF

chmod +x /opt/browser-automation/start.sh

4.2 系统服务配置

cat > /etc/systemd/system/browser-automation.service << 'EOF'
[Unit]
Description=Browser Automation Service
After=network.target

[Service]
Type=forking
ExecStart=/opt/browser-automation/start.sh
Restart=always
User=root
Environment=DISPLAY=:99

[Install]
WantedBy=multi-user.target
EOF

systemctl enable browser-automation.service

5. 安全配置

5.1 非 root 用户配置

# 创建专用用户
useradd -m -s /bin/bash browser-user
usermod -a -G sudo browser-user

# 设置 Chrome 以非 root 用户运行
echo 'chrome --no-sandbox --user-data-dir=/home/browser-user/.config/google-chrome' > /home/browser-user/run-chrome.sh
chown browser-user:browser-user /home/browser-user/run-chrome.sh

5.2 网络安全

# 配置防火墙(如果需要)
ufw allow 22/tcp
# 仅在需要外部访问时开放特定端口
# ufw allow 8080/tcp

6. 监控和日志

6.1 日志配置

# 创建日志目录
mkdir -p /var/log/browser-automation

# 配置日志轮转
cat > /etc/logrotate.d/browser-automation << 'EOF'
/var/log/browser-automation/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 644 root root
}
EOF

7. 备份和恢复

7.1 创建容器快照

# 创建快照
lxc snapshot chrome-automation initial-setup

# 列出快照
lxc info chrome-automation --snapshots

# 恢复快照
lxc restore chrome-automation initial-setup

7.2 配置文件备份

# 备份重要配置
lxc file pull chrome-automation/etc/systemd/system/browser-automation.service ./
lxc file pull chrome-automation/opt/browser-automation/start.sh ./

8. 性能优化

8.1 Chrome 启动参数优化

CHROME_OPTS="--headless \
--no-sandbox \
--disable-dev-shm-usage \
--disable-gpu \
--remote-debugging-port=9222 \
--disable-extensions \
--disable-plugins \
--disable-images \
--disable-javascript \
--memory-pressure-off \
--max_old_space_size=4096 \
--js-flags=--max-old-space-size=2048"

8.2 容器资源优化

# 在容器配置中设置资源限制
lxc config set chrome-automation limits.cpu 2
lxc config set chrome-automation limits.memory 4GB
lxc config set chrome-automation limits.memory.swap false

这个配置方案提供了完整的LXC容器环境专门用于浏览器自动化任务具有良好的性能、安全性和可维护性。