在轻量级云服务器(Lightweight Application Server)上配置 Chrome 环境,通常有两种主要场景:一是用于无头模式(Headless)的自动化测试、爬虫或截图服务;二是为了远程桌面展示图形界面。由于云服务器资源有限且多数为 Linux 发行版,直接运行 GUI 需要额外的依赖库支持。
以下将分别针对 CentOS/RHEL 系列 和 Ubuntu/Debian 系列 提供标准化、合规的配置流程。重点在于解决依赖缺失问题,这是最常见报错来源。
一、通用前提说明
-
推荐使用 Chromium 而非 Google Chrome
- Google Chrome 官方不提供 Linux 包下载,需通过
.deb或.rpm手动安装,且更新机制复杂。 - Chromium 是开源版本,与 Chrome 功能几乎一致,更适合服务器环境,社区支持更好,依赖更清晰。
- 若必须使用 Chrome,可通过官方 APT/YUM 仓库或手动下载
.deb/.rpm安装。
- Google Chrome 官方不提供 Linux 包下载,需通过
-
无头模式(Headless)推荐
服务器无需显示器输出,建议使用--headless参数启动 Chrome/Chromium,避免 X11/Wayland 依赖,节省资源。 -
权限与安全
不建议以 root 用户直接运行 Chrome(新版 Chrome 已禁止 root 运行),应创建专用用户或使用sudo -u <user>执行。
二、Ubuntu / Debian 系统配置步骤
1. 添加 Chromium 源并安装
# 更新包索引
sudo apt update
# 安装 Chromium 浏览器(包含 headless 支持)
sudo apt install -y chromium-browser
# 或者安装最新稳定版 Chrome(可选)
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.deb
⚠️ 注意:Ubuntu 20.04+ 中
chromium-browser可能是 Snap 包,部分服务器环境不支持 Snap。建议改用以下方式获取原生 deb:
替代方案:安装非 Snap 版 Chromium
sudo apt remove -y chromium-browser
sudo snap remove chromium-browser # 如果已安装 snap 版
# 添加 Mozilla PPA 获取原生版
sudo add-apt-repository ppa:saiarcot895/chromium-beta
sudo apt update
sudo apt install -y chromium-browser
或直接下载 Chromium Project 提供的 nightly build(不推荐生产环境)。
2. 安装必要依赖(关键!)
Chrome/Chromium 在服务器上运行常缺字体、SSL 库等:
sudo apt install -y
fonts-liberation
fontconfig
libasound2
libatk-bridge2.0-0
libatk1.0-0
libcups2
libdbus-1-3
libdrm2
libgbm1
libgtk-3-0
libnspr4
libnss3
libx11-xcb1
libxcb1
libxcomposite1
libxdamage1
libxfixes3
libxrandr2
xdg-utils
💡 提示:可使用
chrome --headless --disable-gpu --no-sandbox测试是否正常运行。
3. 创建非 root 用户并测试
sudo useradd -m chromeuser
sudo su - chromeuser
# 测试无头模式
chromium-browser --headless --disable-gpu --no-sandbox --dump-dom https://example.com > output.html
echo "Test completed: $(ls -l output.html)"
三、CentOS / RHEL 系列配置步骤
1. 安装 EPEL 和 Chromium 源
# 安装 EPEL 源
sudo yum install -y epel-release
# 安装 Chromium(来自 EPEL 或第三方 repo)
sudo yum install -y chromium-browser
# 或者安装 Google Chrome(推荐方式)
cat <<EOF | sudo tee /etc/yum.repos.d/google-chrome.repo
[google-chrome]
name=Google Chrome
baseurl=https://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl.google.com/linux/linux_signing_key.pub
EOF
sudo yum install -y google-chrome-stable
✅ CentOS 8/Stream 或 Rocky/AlmaLinux 同样适用此方法。
2. 安装依赖库
sudo yum install -y
alsa-lib
atk
cups-libs
dbus-glib
gtk3
libXScrnSaver
libXcomposite
libXdamage
libXext
libXfixes
libXi
libXrandr
libXrender
libXtst
nspr
nss
pango
mesa-libgbm
freetype
fontconfig
liberation-fonts
3. 创建非 root 用户并测试
sudo useradd -m chromeuser
sudo su - chromeuser
# 测试无头模式
google-chrome --headless --disable-gpu --no-sandbox --dump-dom https://example.com > output.html
echo "Test completed: $(ls -l output.html)"
四、高级优化建议(适用于生产环境)
1. 使用 Docker 容器化部署(强烈推荐)
避免系统污染,便于迁移和扩展:
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y
chromium-browser
fonts-liberation
fontconfig
&& rm -rf /var/lib/apt/lists/*
USER nonroot
CMD ["chromium-browser", "--headless", "--disable-gpu", "--no-sandbox", "--dump-dom", "https://example.com"]
构建并运行:
docker build -t chrome-headless .
docker run --rm chrome-headless
2. 集成 Puppeteer / Playwright
若用于自动化测试,建议结合 Node.js 工具链:
npm init -y
npm install puppeteer
// test.js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.goto('https://example.com');
const content = await page.content();
console.log(content.substring(0, 100));
await browser.close();
})();
Puppeteer 自带 Chromium 内核,无需单独安装系统级 Chrome,极大简化部署。
3. 性能调优参数
chromium-browser
--headless
--disable-gpu
--no-sandbox
--disable-dev-shm-usage
--disable-software-rasterizer
--single-process
--window-size=1920,1080
https://example.com
--disable-dev-shm-usage:避免共享内存不足导致崩溃。--single-process:减少进程开销,适合低内存实例。--disable-gpu:禁用 GPU 提速,纯 CPU 渲染,兼容性好。
五、常见问题排查
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
cannot execute binary file |
架构不匹配(如 ARM vs x86_64) | 确认镜像架构,下载对应版本 |
libgbm.so.1: cannot open shared object file |
缺少 Mesa/GBM 库 | 安装 mesa-libgbm 或 libgbm1 |
Fontconfig error: Cannot load default config file |
字体未安装 | 安装 fontconfig 和 fonts-liberation |
Running as root is not allowed |
以 root 身份运行 | 创建普通用户并使用 sudo -u |
Segmentation fault |
内存不足或依赖缺失 | 增加 Swap,检查依赖完整性 |
六、总结建议
- 首选方案:使用 Docker + Puppeteer/Playwright,隔离性强、部署简单、资源可控。
- 裸机方案:选择 Chromium 而非 Chrome,安装完整依赖集,使用非 root 用户,启用 headless 模式。
- 操作系统差异:
- Ubuntu:注意 Snap 陷阱,优先使用原生 deb 或 Docker。
- CentOS:确保启用 EPEL 或 Google 官方 YUM 源。
- 合规提醒:所有操作应遵循最小权限原则,定期更新软件包,避免使用未签名或来源不明的二进制文件。
如需进一步定制(如多实例并发、XX设置、截图服务封装),可在此基础上扩展。
云技术博客