Dockerfile 部署
This commit is contained in:
@@ -44,6 +44,7 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage:
|
|||||||
co = ChromiumOptions()
|
co = ChromiumOptions()
|
||||||
# 强制在生产环境下使用无头模式
|
# 强制在生产环境下使用无头模式
|
||||||
is_docker = os.path.exists('/.dockerenv')
|
is_docker = os.path.exists('/.dockerenv')
|
||||||
|
|
||||||
if headless or is_docker:
|
if headless or is_docker:
|
||||||
co.set_argument("--headless=new")
|
co.set_argument("--headless=new")
|
||||||
co.set_argument("--disable-gpu") # Docker 无头模式下强烈建议禁用 GPU,防止 404 和渲染崩溃
|
co.set_argument("--disable-gpu") # Docker 无头模式下强烈建议禁用 GPU,防止 404 和渲染崩溃
|
||||||
@@ -57,13 +58,24 @@ def get_page(headless: bool = False, port: int = 9222) -> ChromiumPage:
|
|||||||
if is_docker:
|
if is_docker:
|
||||||
# Docker 生产环境:每次启动分配随机端口,避免前一个僵尸进程占用导致 404
|
# Docker 生产环境:每次启动分配随机端口,避免前一个僵尸进程占用导致 404
|
||||||
co.auto_port(True)
|
co.auto_port(True)
|
||||||
# 指定 Docker 内的 Chromium 路径,确保 DrissionPage 不会去找不存在的默认路径
|
# 很多 Debian/Ubuntu 系统的 Chromium 实际上是通过 wrapper 脚本调用的
|
||||||
co.set_browser_path('/usr/bin/chromium')
|
# 直接指定确切的执行路径,防止 DrissionPage 底层启动失败
|
||||||
|
if os.path.exists('/usr/bin/chromium'):
|
||||||
|
co.set_browser_path('/usr/bin/chromium')
|
||||||
|
elif os.path.exists('/usr/bin/chromium-browser'):
|
||||||
|
co.set_browser_path('/usr/bin/chromium-browser')
|
||||||
|
elif os.path.exists('/usr/bin/google-chrome'):
|
||||||
|
co.set_browser_path('/usr/bin/google-chrome')
|
||||||
else:
|
else:
|
||||||
# 本地开发环境:使用固定端口,方便复用
|
# 本地开发环境:使用固定端口,方便复用
|
||||||
co.set_local_port(port)
|
co.set_local_port(port)
|
||||||
|
|
||||||
return ChromiumPage(co)
|
try:
|
||||||
|
page = ChromiumPage(co)
|
||||||
|
return page
|
||||||
|
except Exception as e:
|
||||||
|
log("ERR", f"浏览器初始化失败: {e}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
# ── Vue 表单专用输入(JS setter + 模拟键盘) ──────────────────────────────────
|
# ── Vue 表单专用输入(JS setter + 模拟键盘) ──────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user