Files
blog_html/posts/android-firefox/index.html
T
2026-04-27 15:44:15 +00:00

194 lines
60 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html><html lang=zh-cn dir=ltr class=scroll-smooth data-default-appearance=light data-auto-appearance=true><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=theme-color content="#ffffff"><title>使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器 &#183; 华禹 个人博客</title><meta name=title content="使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器 &#183; 华禹 个人博客"><script type=text/javascript src=http://blog.hys.my/js/appearance.min.8a082f81b27f3cb2ee528df0b0bdc39787034cf2cc34d4669fbc9977c929023c.js integrity="sha256-iggvgbJ/PLLuUo3wsL3Dl4cDTPLMNNRmn7yZd8kpAjw="></script><link type=text/css rel=stylesheet href=http://blog.hys.my/css/main.bundle.min.100caa677b4bc416cdd884107b203b4869f9b413a19aa57d12069fb826f1abe9.css integrity="sha256-EAyqZ3tLxBbN2IQQeyA7SGn5tBOhmqV9EgafuCbxq+k="><script defer type=text/javascript id=script-bundle src=http://blog.hys.my/js/main.bundle.min.ad7c1061b54aa5c79b6614847630c72567108bdf84dbf18d025ed692b0074cfe.js integrity="sha256-rXwQYbVKpcebZhSEdjDHJWcQi9+E2/GNAl7WkrAHTP4=" data-copy data-copied></script><meta name=description content="
在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。
"><link rel=canonical href=http://blog.hys.my/posts/android-firefox/><link rel=apple-touch-icon sizes=180x180 href=/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=manifest href=/site.webmanifest><meta property="og:url" content="http://blog.hys.my/posts/android-firefox/"><meta property="og:site_name" content="华禹 个人博客"><meta property="og:title" content="使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器"><meta property="og:description" content="在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。"><meta property="og:locale" content="zh_cn"><meta property="og:type" content="article"><meta property="article:section" content="posts"><meta property="article:published_time" content="2026-04-18T10:00:00+08:00"><meta property="article:modified_time" content="2026-04-18T10:00:00+08:00"><meta property="article:tag" content="自动签到"><meta property="article:tag" content="自建云手机"><meta property="article:tag" content="指纹浏览器"><meta name=twitter:card content="summary"><meta name=twitter:title content="使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器"><meta name=twitter:description content="在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Article","articleSection":"最近笔记","name":"使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器","headline":"使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器","abstract":"在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。","inLanguage":"zh-cn","url":"http:\/\/blog.hys.my\/posts\/android-firefox\/","author":{"@type":"Person","name":"华禹"},"copyrightYear":"2026","dateCreated":"2026-04-18T10:00:00\u002b08:00","datePublished":"2026-04-18T10:00:00\u002b08:00","dateModified":"2026-04-18T10:00:00\u002b08:00","keywords":["自动签到","自建云手机","指纹浏览器"],"mainEntityOfPage":"true","wordCount":"1836"}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"http://blog.hys.my/","name":"Home","position":1},{"@type":"ListItem","item":"http://blog.hys.my/posts/","name":"最近笔记","position":2},{"@type":"ListItem","item":"http://blog.hys.my/categories/docker/","name":"Docker","position":3},{"@type":"ListItem","name":"使用 Docker容器在服务器上运行安卓和 Firefox,实现自建云手机和指纹浏览器","position":4}]}</script><meta name=author content="华禹"><link href=mailto:hello@your_domain.com rel=me><link href=https://link-to-some-website.com/ rel=me><link href=https://www.amazon.com/hz/wishlist/ls/wishlist-id rel=me><link href=https://www.apple.com rel=me><link href=https://xing.com/profile/username rel=me></head><body class="m-auto flex h-screen max-w-7xl flex-col bg-neutral px-6 text-lg leading-7 text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32"><div id=the-top class="absolute flex self-center"><a class="-translate-y-8 rounded-b-lg bg-primary-200 px-3 py-1 text-sm focus:translate-y-0 dark:bg-neutral-600" href=#main-content><span class="pe-2 font-bold text-primary-600 dark:text-primary-400">&darr;</span></a></div><header class="py-6 font-semibold text-neutral-900 dark:text-neutral sm:py-10 print:hidden"><nav class="flex items-start justify-between sm:items-center"><div class="z-40 flex flex-row items-center"><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" rel=me href=/>华禹 个人博客</a></div><label id=menu-button for=menu-controller class="block sm:hidden"><input type=checkbox id=menu-controller class=hidden><div class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.33 14.33 64 32 64H416c17.7.0 32 14.33 32 32 0 17.7-14.3 32-32 32H32C14.33 128 0 113.7.0 96zM0 256c0-17.7 14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32H32c-17.67.0-32-14.3-32-32zM416 448H32c-17.67.0-32-14.3-32-32s14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32z"/></svg></span></div><div id=menu-wrapper class="invisible fixed inset-0 z-30 m-auto h-full w-full cursor-default overflow-auto bg-neutral-100/50 opacity-0 backdrop-blur-sm transition-opacity dark:bg-neutral-900/50"><ul class="mx-auto flex w-full max-w-7xl list-none flex-col overflow-visible px-6 py-6 text-end sm:px-14 sm:py-10 sm:pt-10 md:px-24 lg:px-32"><li class=mb-1><span class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></span></li><li class="group mb-1"><a href=/ title=Home onclick=close_menu()><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">首页</span></a></li><li class="group mb-1"><a href=/posts/ title=最近笔记 onclick=close_menu()><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">学习笔记</span></a></li><li class="group mb-1"><a href title onclick=close_menu()><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">我的简历</span></a></li><li class="group mb-1"><button id=search-button-m0 title>
<span class="group-dark:hover:text-primary-400 transition-colors group-hover:text-primary-600"><span class="icon relative inline-block px-1 align-text-bottom"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg></span></span></button></li></ul></div></label><ul class="hidden list-none flex-row text-end sm:flex"><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0"><a href=/ title=Home><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">首页</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0"><a href=/posts/ title=最近笔记><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">学习笔记</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0"><a href title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">我的简历</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0"><button id=search-button-m1 title>
<span class="group-dark:hover:text-primary-400 transition-colors group-hover:text-primary-600"><span class="icon relative inline-block px-1 align-text-bottom"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg></span></span></button></li></ul></nav></header><div class="relative flex grow flex-col"><main id=main-content class=grow><article><header class=max-w-prose><h1 class="mb-8 mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器</h1><div class="mb-10 text-base text-neutral-500 dark:text-neutral-400 print:hidden"><div class="flex flex-row flex-wrap items-center"><time datetime="2026-04-18 10:00:00 +0800 +0800"></time><span class="px-2 text-primary-500">&#183;</span><span title></span></div><div class="my-1 flex flex-wrap text-xs leading-relaxed text-neutral-500 dark:text-neutral-400"><a href=http://blog.hys.my/categories/docker/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">Docker</a>
<a href=http://blog.hys.my/categories/android/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">Android</a>
<a href=http://blog.hys.my/categories/firefox/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">Firefox</a>
<a href=http://blog.hys.my/tags/%E8%87%AA%E5%8A%A8%E7%AD%BE%E5%88%B0/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">自动签到</a>
<a href=http://blog.hys.my/tags/%E8%87%AA%E5%BB%BA%E4%BA%91%E6%89%8B%E6%9C%BA/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">自建云手机</a>
<a href=http://blog.hys.my/tags/%E6%8C%87%E7%BA%B9%E6%B5%8F%E8%A7%88%E5%99%A8/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">指纹浏览器</a></div></div></header><section class="prose mt-0 flex max-w-full flex-col dark:prose-invert lg:flex-row"><div class="min-h-0 min-w-0 max-w-prose grow"><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/IMG_2680_hu_4bd1b2f71ee1a21b.webp 330w,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_e66d97a84149cadb.webp 660w
,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_e4446d5a7261282c.webp 1024w
,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_d85de4790089ebfb.webp 1320w" sizes=100vw type=image/webp><img width=1800 height=766 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/IMG_2680_hu_a60c991b69d39137.jpeg srcset="http://blog.hys.my/posts/android-firefox/IMG_2680_hu_148b4f7135ed17b0.jpeg 330w,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_a60c991b69d39137.jpeg 660w
,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_39f54089ac4b9d2.jpeg 1024w
,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_e90bd0e425c51193.jpeg 1320w" sizes=100vw></picture></figure></p><p>在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。</p><h2 id=操作环境 class="relative group">操作环境 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e6%93%8d%e4%bd%9c%e7%8e%af%e5%a2%83 aria-label>#</a></span></h2><ul><li>甲骨文服务器</li><li><a href=https://github.com/monlor/dockerfiles/tree/main/ws-scrcpy target=_blank rel=noreferrer>ws-scrcpy</a>(web版本的scrcpy,用于实现远程控制,我适配了arm)</li><li><a href=https://github.com/monlor/dockerfiles/tree/main/firefox target=_blank rel=noreferrer>firefox</a>(docker版本的Firefox,我添加了中文字体)</li><li><a href=https://github.com/remote-android/redroid-doc target=_blank rel=noreferrer>redroid</a>(docker版本的安卓,可以自行定制镜像)</li><li><a href=https://github.com/NginxProxyManager/nginx-proxy-manager target=_blank rel=noreferrer>nginx-proxy-manager</a>(web管理nginx,可以自动申请证书,添加basic认证)</li><li>cloudflare zerotrust(可选,用于安全拦截)</li><li><a href=https://github.com/monlor/docker-gateway target=_blank rel=noreferrer>docker-gateway</a>(我编写的docker网关,用于给容器做代理策略,避免使用Firefox浏览器代理被检测)</li><li>socks5住宅IP代理(可选,根据需求购买,这里不做推荐)</li></ul><h2 id=部署 class="relative group">部署 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e9%83%a8%e7%bd%b2 aria-label>#</a></span></h2><p>我使用docker compose进行部署,以下是配置文件。我添加了gateway作为容器内部的代理网关,如果不需要使用代理,请去掉gateway网关服务和虚拟网卡的配置。</p><p>加载内核模块</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>sudo apt install linux-modules-extra-<span class=sb>`</span>uname -r<span class=sb>`</span>
</span></span><span class=line><span class=cl>sudo modprobe binder_linux <span class=nv>devices</span><span class=o>=</span><span class=s2>&#34;binder,hwbinder,vndbinder&#34;</span>
</span></span><span class=line><span class=cl>sudo modprobe ashmem_linux
</span></span><span class=line><span class=cl>sudo modprobe xt_mark
</span></span><span class=line><span class=cl>sudo modprobe iptable_filter
</span></span><span class=line><span class=cl>sudo modprobe iptable_nat
</span></span><span class=line><span class=cl>sudo modprobe xt_TPROXY
</span></span><span class=line><span class=cl>sudo modprobe xt_socket
</span></span></code></pre></div><p>docker compose 配置</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nt>services</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>nginx-proxy-manager</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>jc21/nginx-proxy-manager:2.11.3</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class=l>nginx</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>nginx_data:/data</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>nginx_cert:/etc/letsencrypt</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ports</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=m>80</span><span class=p>:</span><span class=m>80</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 管理端口,建议后面去掉</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=m>81</span><span class=p>:</span><span class=m>81</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=m>443</span><span class=p>:</span><span class=m>443</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>default</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 5800</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>firefox-1</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>monlor/firefox</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>firefox-1:/config</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>TZ=Australia/Sydney</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>LANG=en_AU.UTF-8</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 这个配置和docker-gateway搭配使用,将当前容器的默认网关指向docker-gateway服务,不添加这个变量则不走代理</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>GATEWAY_IP=172.100.0.2</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.11</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>default</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>scrcpy</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>monlor/ws-scrcpy</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class=l>scrcpy</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 这里添加你的redroid adb地址,用逗号分隔,如:redroid-1:5555,redroid-2:5555</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ADB_ADDRESS=redroid-1:5555</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>default</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.50</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redroid-1</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>redroid/redroid:13.0.0-latest</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class=l>redroid-1</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>privileged</span><span class=p>:</span><span class=w> </span><span class=kc>true</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redroid-1:/data</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>command</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>androidboot.hardware=mt6891</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.secure=0</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.boot.hwc=GLOBAL</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 这里的imei需要修改,每个机器都不一样</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.ril.oem.imei=861503068112233</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.ril.oem.imei1=861503068112234</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.ril.oem.imei2=861503068112235</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.ril.miui.imei0=861503068112236</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.product.manufacturer=Xiaomi</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.product.model=droid-1</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.build.product=chopin</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redroid.width=720</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redroid.height=1280</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redroid.gpu.mode=guest</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>healthcheck</span><span class=p>:</span><span class=w> </span><span class=cp>&amp;healthcheck</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>test</span><span class=p>:</span><span class=w> </span><span class=p>[</span><span class=s2>&#34;CMD&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;sh&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;-c&#34;</span><span class=p>,</span><span class=w> </span><span class=s2>&#34;test \&#34;1\&#34; = \&#34;`/system/bin/getprop sys.boot_completed`\&#34;&#34;</span><span class=p>]</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>interval</span><span class=p>:</span><span class=w> </span><span class=l>30s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>timeout</span><span class=p>:</span><span class=w> </span><span class=l>10s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>retries</span><span class=p>:</span><span class=w> </span><span class=m>3</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>start_period</span><span class=p>:</span><span class=w> </span><span class=l>30s</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.51</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>ghcr.io/monlor/docker-gateway:main</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class=l>gateway</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 指定哪些容器ip需要走PH的代理,ip为容器ip,这里为firefox-1</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>RULE_TAG_PH=172.100.0.11/32</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 添加名为PH的socks代理,ip 端口 用户 密码</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>OUTBOUND_SERVER_PH=socks,2.2.2.2:58688:user:pass</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 再指定哪些容器ip走UK的代理,我这里随便写的gateway网络下的ip</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>RULE_TAG_UK=172.100.0.13/32</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 再添加名为UK的socks代理,ip 端口 用户 密码</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>OUTBOUND_SERVER_UK=socks,3.3.3.3:58688:user:pass</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>privileged</span><span class=p>:</span><span class=w> </span><span class=kc>true</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>pid</span><span class=p>:</span><span class=w> </span><span class=l>host</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>/var/run/docker.sock:/var/run/docker.sock</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.2</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=nt>volumes</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>nginx_data</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>nginx_cert</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redroid-1</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>firefox-1</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w>
</span></span></span><span class=line><span class=cl><span class=nt>networks</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>default</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>driver</span><span class=p>:</span><span class=w> </span><span class=l>bridge</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipam</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>config</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>subnet</span><span class=p>:</span><span class=w> </span><span class=s2>&#34;172.18.0.0/16&#34;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w> </span><span class=s2>&#34;172.18.0.1&#34;</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>gateway</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>driver</span><span class=p>:</span><span class=w> </span><span class=l>bridge</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipam</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>config</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>subnet</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.0</span><span class=l>/24</span><span class=w>
</span></span></span></code></pre></div><p>如果你没有安装docker,可以执行以下命令进行安装:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>curl -sSL https://get.docker.com/ <span class=p>|</span> sh
</span></span></code></pre></div><p>将配置文件保存到你喜欢的文件夹,比如<code>/opt/server</code>,然后部署服务:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl><span class=nb>cd</span> /opt/server
</span></span><span class=line><span class=cl>docker compose up -d
</span></span></code></pre></div><p>查看容器日志:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>docker compose logs
</span></span></code></pre></div><p>查看服务状态:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>docker compose ps
</span></span></code></pre></div><h2 id=原理解释 class="relative group">原理解释 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e5%8e%9f%e7%90%86%e8%a7%a3%e9%87%8a aria-label>#</a></span></h2><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/17223162976681_hu_be46f3d76a660877.webp 330w,http://blog.hys.my/posts/android-firefox/17223162976681_hu_f8f3db69d4901a6.webp 660w
,http://blog.hys.my/posts/android-firefox/17223162976681_hu_7097303f9627b6a.webp 1024w
,http://blog.hys.my/posts/android-firefox/17223162976681_hu_fec8f824e15c1aff.webp 1320w" sizes=100vw type=image/webp><img width=1536 height=818 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/17223162976681_hu_ef9087b2382984e5.webp srcset="http://blog.hys.my/posts/android-firefox/17223162976681_hu_fb24bf243ffa5db4.webp 330w,http://blog.hys.my/posts/android-firefox/17223162976681_hu_ef9087b2382984e5.webp 660w
,http://blog.hys.my/posts/android-firefox/17223162976681_hu_74b9f0ee81638373.webp 1024w
,http://blog.hys.my/posts/android-firefox/17223162976681_hu_fae55deeae4ba3f5.webp 1320w" sizes=100vw></picture></figure></p><h3 id=cloudflare-zero-trust-安全拦截 class="relative group">Cloudflare Zero Trust 安全拦截 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#cloudflare-zero-trust-%e5%ae%89%e5%85%a8%e6%8b%a6%e6%88%aa aria-label>#</a></span></h3><blockquote><p>非必需</p></blockquote><p>拦截scrcpy和firefox的域名,使用github oauth登陆,保证服务安全性</p><h3 id=nginx-proxy-manager class="relative group">nginx proxy manager <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#nginx-proxy-manager aria-label>#</a></span></h3><p>使用81端口访问,用于反向代理,ssl证书申请,如果你不使用zero trust,可以在这一层做basic认证,可以参考以下配置</p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/17223144664974_hu_8a69fb914b703400.webp 330w,http://blog.hys.my/posts/android-firefox/17223144664974_hu_650cf677a8008b5.webp 660w
,http://blog.hys.my/posts/android-firefox/17223144664974_hu_b6b2dcde254f7257.webp 1024w
,http://blog.hys.my/posts/android-firefox/17223144664974_hu_92bac8069628a213.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/17223144664974_hu_f8becffeab4fcf23.webp srcset="http://blog.hys.my/posts/android-firefox/17223144664974_hu_7b0680262d5c3d44.webp 330w,http://blog.hys.my/posts/android-firefox/17223144664974_hu_f8becffeab4fcf23.webp 660w
,http://blog.hys.my/posts/android-firefox/17223144664974_hu_38980a37bd352065.webp 1024w
,http://blog.hys.my/posts/android-firefox/17223144664974_hu_3f2d191317113e08.webp 1320w" sizes=100vw></picture></figure></p><p>我还在这一层配置了cf的ip白名单,保证cf => nginx的安全性</p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/17223145106545_hu_5e3793d176ae721e.webp 330w,http://blog.hys.my/posts/android-firefox/17223145106545_hu_548a61636d954c7c.webp 660w
,http://blog.hys.my/posts/android-firefox/17223145106545_hu_63c33d715333a9a2.webp 1024w
,http://blog.hys.my/posts/android-firefox/17223145106545_hu_7b8cf5eee5be70f4.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/17223145106545_hu_b647428c98e85cd0.webp srcset="http://blog.hys.my/posts/android-firefox/17223145106545_hu_91f713bfacc21b9b.webp 330w,http://blog.hys.my/posts/android-firefox/17223145106545_hu_b647428c98e85cd0.webp 660w
,http://blog.hys.my/posts/android-firefox/17223145106545_hu_26fcedc4ebae78f5.webp 1024w
,http://blog.hys.my/posts/android-firefox/17223145106545_hu_14041153dbe995d4.webp 1320w" sizes=100vw></picture></figure></p><h3 id=docker-host class="relative group">Docker Host <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#docker-host aria-label>#</a></span></h3><ul><li><code>ws-scrcpy</code>用于远程控制多个安卓设备(如<code>redroid-1</code>和<code>redroid-2</code>)。</li><li><code>redroid-1</code>和<code>redroid-2</code>运行安卓系统实例。</li><li><code>firefox-1</code>运行<code>Firefox</code>浏览器实例。</li></ul><h3 id=ws-scrcpy class="relative group">ws-scrcpy <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#ws-scrcpy aria-label>#</a></span></h3><p>需要添加环境变量,指定你要管理的<code>redroid</code>实例,有多少个<code>redroid</code>就添加多少个,会自动帮你连接。同时,当你重启<code>redroid</code>之后,也需要重启<code>scrcpy</code>。</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=l>ADB_ADDRESS=redroid-1:5555,redoird-2:5555</span><span class=w>
</span></span></span></code></pre></div><h3 id=docker-gateway class="relative group">Docker Gateway <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#docker-gateway aria-label>#</a></span></h3><blockquote><p>非必需,这里以<code>firefox-1</code>举例</p></blockquote><p>固定<code>firefox-1</code>容器的ip,方便做分流,例如</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nn>...</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=nt>networks</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.11</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=nn>...</span><span class=w>
</span></span></span></code></pre></div><p>在容器中添加环境变量,修改默认网关,执行我们的<code>docker-gateway</code>网关</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl>- <span class=l>GATEWAY_IP=172.100.0.2</span><span class=w>
</span></span></span></code></pre></div><p>在<code>docker-gateway</code>容器中添加环境变量代理,指定<code>firefox-1</code>走哪个代理,以下指定ip为<code>172.100.0.11</code>的<code>firefox-1</code>容器走PH这个代理。</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nn>...</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=c># 指定哪些容器ip需要走PH的代理,ip为容器ip,这里为firefox-1</span><span class=w>
</span></span></span><span class=line><span class=cl>- <span class=l>RULE_TAG_PH=172.100.0.11/32</span><span class=w>
</span></span></span><span class=line><span class=cl><span class=c># 添加名为PH的socks代理,ip 端口 用户 密码</span><span class=w>
</span></span></span><span class=line><span class=cl>- <span class=l>OUTBOUND_SERVER_PH=socks,2.2.2.2:58688:user:pass</span><span class=w>
</span></span></span><span class=line><span class=cl>- <span class=l>...</span><span class=w>
</span></span></span></code></pre></div><p>看到这里你应该明白<code>docker-gateway</code>的工作原理了,要是不明白就实操。</p><h2 id=效果图 class="relative group">效果图 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e6%95%88%e6%9e%9c%e5%9b%be aria-label>#</a></span></h2><p>安卓在手机上打开支持触摸,体验不错,在电脑上打开支持键盘输入。都可以很方便的共享给其他人使用。</p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_50fa792a0b0f9501.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_5d5c604ac8fe6bd9.webp 660w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_3b527aff78949129.webp 1024w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_56f7a3746a415bc.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_a443fea8ae267f9d.webp srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_e373c3eb5a4f7f6d.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_a443fea8ae267f9d.webp 660w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_6e6bce5e6c8ea135.webp 1024w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_df1ddccfe6b7117e.webp 1320w" sizes=100vw></picture></figure></p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_ca5b4ac83ecc03cd.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_7a02099826243b18.webp 660w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_43b367884d2ebf43.webp 1024w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_f91b358fed02698d.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_1501846d6386c93d.webp srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_3071021c7c7126af.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_1501846d6386c93d.webp 660w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_6b92363905df88c5.webp 1024w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_e9fd61d2d2865a33.webp 1320w" sizes=100vw></picture></figure></p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_c627fca8bc38a99f.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_f974c875c4d039e.webp 660w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_6f0b8f7351ea437e.webp 1024w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_c0a611f5a312134c.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_edf471a2de17ce7f.jpeg srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_57afe701b877eb87.jpeg 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_edf471a2de17ce7f.jpeg 660w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_c6026aede32edfe6.jpeg 1024w
,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_5f364182c615b9f.jpeg 1320w" sizes=100vw></picture></figure>最后修改:2024 年 09 月 10 日</p><p>© 允许规范转载</p></div></section><footer class="max-w-prose pt-8 print:hidden"><div class=flex><picture class="!mb-0 !mt-0 me-4 w-24 h-auto rounded-full"><img width=480 height=480 class="!mb-0 !mt-0 me-4 w-24 h-auto rounded-full" alt=华禹 loading=lazy decoding=async src=http://blog.hys.my/img/author.png></picture><div class=place-self-center><div class="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400"></div><div class="font-semibold leading-6 text-neutral-800 dark:text-neutral-300">华禹</div><div class="text-sm text-neutral-700 dark:text-neutral-400">北京理工大学医学技术学院研究生<br>AI食品营养量化初创公司联合创始人</div><div class="text-2xl sm:text-lg"><div class="flex flex-wrap text-neutral-400 dark:text-neutral-500"><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=mailto:hello@your_domain.com target=_blank aria-label=Email rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 512 512"><path fill="currentColor" d="M207.8 20.73c-93.45 18.32-168.7 93.66-187 187.1-27.64 140.9 68.65 266.2 199.1 285.1 19.01 2.888 36.17-12.26 36.17-31.49l1e-4-.6631c0-15.74-11.44-28.88-26.84-31.24-84.35-12.98-149.2-86.13-149.2-174.2.0-102.9 88.61-185.5 193.4-175.4 91.54 8.869 158.6 91.25 158.6 183.2v16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-40.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98.0036c-7.299.0-13.2 4.992-15.12 11.68-24.85-12.15-54.24-16.38-86.06-5.106-38.75 13.73-68.12 48.91-73.72 89.64-9.483 69.01 43.81 128 110.9 128 26.44.0 50.43-9.544 69.59-24.88 24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.3c0-149.2-133.9-265.632-287.3-235.57zM239.1 304.3c-26.47.0-48-21.56-48-48.05s21.53-48.05 48-48.05 48 21.56 48 48.05-20.6 48.05-48 48.05z"/></svg>
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://link-to-some-website.com/ target=_blank aria-label=Link rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 640 512"><path fill="currentColor" d="M172.5 131.1c55.6-55.59 148-55.59 203.6.0 50 50 57.4 129.7 16.3 187.2L391.3 319.9C381 334.2 361 337.6 346.7 327.3c-14.4-10.3-17.8-30.3-7.5-44.6L340.3 281.1C363.2 249 359.6 205.1 331.7 177.2c-31.4-31.4-82.5-31.4-114 0L105.5 289.5c-31.51 30.6-31.51 82.5.0 114C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4 265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2c-58.4 41.1-136.3 34.5-186.29-15.4-56.469-56.5-56.469-148.1.0-204.5L172.5 131.1zM467.5 380c-56.5 56.5-148 56.5-204.5.0-50-50-56.5-128.8-15.4-186.3L248.7 192.1C258.1 177.8 278.1 174.4 293.3 184.7 307.7 194.1 311.1 214.1 300.8 229.3L299.7 230.9C276.8 262.1 280.4 306.9 308.3 334.8c31.4 31.4 82.5 31.4 114 0L534.5 222.5c31.5-31.5 31.5-83.4.0-114C506.7 80.63 462.7 76.99 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58 374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.731 529.8 13.25 579.8 63.24c56.5 56.46 56.5 148.06.0 204.46L467.5 380z"/></svg>
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://www.amazon.com/hz/wishlist/ls/wishlist-id target=_blank aria-label=Amazon rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 448 512"><path fill="currentColor" d="M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5.0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2.0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1.0 27.1-6.5 43.1z"/></svg>
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://www.apple.com target=_blank aria-label=Apple rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 384 512"><path fill="currentColor" d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8.0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/></svg>
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://xing.com/profile/username target=_blank aria-label=Xing rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 384 512"><path fill="currentColor" d="M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7.0-12.1-7.5-8.5-14.4l69-121.3c.2.0.2-.1.0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H1e2c7.3.0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6.0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z"/></svg></span></a></div></div></div></div><div class=pt-8><hr class="border-dotted border-neutral-300 dark:border-neutral-600"><div class="flex justify-between pt-3"><span><a class="group flex" href=http://blog.hys.my/posts/first-post/><span class="me-2 text-neutral-700 transition-transform group-hover:-translate-x-[2px] group-hover:text-primary-600 dark:text-neutral dark:group-hover:text-primary-400"><span class="ltr:inline rtl:hidden">&larr;</span><span class="ltr:hidden rtl:inline">&rarr;</span></span>
<span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">我的第一篇文章</span>
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2024-05-29 10:00:00 +0800 +0800"></time>
</span></span></a></span><span><a class="group flex text-right" href=http://blog.hys.my/posts/minio/><span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">MinIO对象存储部署:S3兼容的私有化存储方案</span>
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2026-04-18 10:00:00 +0800 +0800"></time>
</span></span><span class="ms-2 text-neutral-700 transition-transform group-hover:-translate-x-[-2px] group-hover:text-primary-600 dark:text-neutral dark:group-hover:text-primary-400"><span class="ltr:inline rtl:hidden">&rarr;</span><span class="ltr:hidden rtl:inline">&larr;</span></span></a></span></div></div></footer></article></main><div class="pointer-events-none absolute bottom-0 end-0 top-[100vh] w-12" id=to-top hidden=true><a href=#the-top class="pointer-events-auto sticky top-[calc(100vh-5.5rem)] flex h-12 w-12 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 backdrop-blur hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400" aria-label title>&uarr;</a></div><footer class="py-10 print:hidden"><div class="flex items-center justify-between"><div><p class="text-sm text-neutral-500 dark:text-neutral-400">&copy;
2026
华禹</p><p class="text-xs text-neutral-500 dark:text-neutral-400"></p></div><div class="flex flex-row items-center"></div></div></footer><div id=search-wrapper class="invisible fixed inset-0 z-50 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh]" data-url=http://blog.hys.my/><div id=search-modal class="top-20 mx-auto flex min-h-0 w-full max-w-3xl flex-col rounded-md border border-neutral-200 bg-neutral shadow-lg dark:border-neutral-700 dark:bg-neutral-800"><header class="relative z-10 flex flex-none items-center justify-between px-2"><form class="flex min-w-0 flex-auto items-center"><div class="flex h-8 w-8 items-center justify-center text-neutral-400"><span class="icon relative inline-block px-1 align-text-bottom"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg></span></div><input type=search id=search-query class="mx-1 flex h-12 flex-auto appearance-none bg-transparent focus:outline-dotted focus:outline-2 focus:outline-transparent" placeholder tabindex=0></form><button id=close-search-button class="flex h-8 w-8 items-center justify-center text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400" title>
<span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></button></header><section class="flex-auto overflow-auto px-2"><ul id=search-results></ul></section></div></div></div></body></html>