294 lines
6.8 KiB
Markdown
294 lines
6.8 KiB
Markdown
# LXC 容器浏览器自动化环境配置方案
|
||
|
||
## 1. LXC 容器基础配置
|
||
|
||
```bash
|
||
# 创建 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 基础系统包安装
|
||
```bash
|
||
# 进入容器
|
||
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 浏览器
|
||
```bash
|
||
# 下载并安装 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 安装浏览器自动化工具
|
||
```bash
|
||
# 安装 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 配置无头模式运行环境
|
||
```bash
|
||
# 创建自动化脚本目录
|
||
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 配置示例
|
||
```python
|
||
# 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 配置示例
|
||
```javascript
|
||
// 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 启动脚本
|
||
```bash
|
||
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 系统服务配置
|
||
```bash
|
||
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 用户配置
|
||
```bash
|
||
# 创建专用用户
|
||
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 网络安全
|
||
```bash
|
||
# 配置防火墙(如果需要)
|
||
ufw allow 22/tcp
|
||
# 仅在需要外部访问时开放特定端口
|
||
# ufw allow 8080/tcp
|
||
```
|
||
|
||
## 6. 监控和日志
|
||
|
||
### 6.1 日志配置
|
||
```bash
|
||
# 创建日志目录
|
||
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 创建容器快照
|
||
```bash
|
||
# 创建快照
|
||
lxc snapshot chrome-automation initial-setup
|
||
|
||
# 列出快照
|
||
lxc info chrome-automation --snapshots
|
||
|
||
# 恢复快照
|
||
lxc restore chrome-automation initial-setup
|
||
```
|
||
|
||
### 7.2 配置文件备份
|
||
```bash
|
||
# 备份重要配置
|
||
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 启动参数优化
|
||
```bash
|
||
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 容器资源优化
|
||
```bash
|
||
# 在容器配置中设置资源限制
|
||
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容器环境,专门用于浏览器自动化任务,具有良好的性能、安全性和可维护性。 |