news 2026/9/29 3:12:08

用镜像源为 Alas 更新加速:Git、pip 与 Docker 网络卡顿解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用镜像源为 Alas 更新加速:Git、pip 与 Docker 网络卡顿解决方案

玩碧蓝航线的朋友,对 Alas 这个名字应该不陌生。这个开源自动化工具能把游戏里那些机械重复的日常操作接管过去,让脚本按计划跑图、收菜、做任务,省下来的时间可以用来做别的事。Alas 的更新频率在活跃期相当高,经常是今天刚适配了新活动,过两天又冒出一个小版本修 bug。但问题往往就出在“更新”这两个字上,默认从 GitHub 拉代码、从 PyPI 装依赖,在国内网络环境下经常会卡到怀疑人生。

这篇文章不是官方教程,也不是什么高深理论,就是我自己长期维护 Alas 时摸索出来的一套镜像源更新方案。我从 Git 同步、Python 依赖、Docker 部署三个层面分别做了处理,把踩过的坑和排错心得一并写了进去。无论你是刚接触 Alas 的新手,还是已经用了一段时间但每次更新都在跟网络斗智斗勇的老玩家,照着这套流程走一遍,基本能把更新这件事变得又快又稳。

1. 先搞清楚 Alas 更新到底做了什么

1.1 更新链条里的三个关键环节

Alas 的更新不是一个动作,而是一条链。很多人以为更新就是“拉到新代码就完事”,其实拉代码只是第一环。

第一环是代码本体。Alas 整个项目托管在 GitHub 仓库里,更新第一步自然是git pull,把最新 commit 拉到本地。这一步如果仓库很旧,可能会涉及大量文件变更,小文件一多,网络传输的压力就上来了。

第二环是 Python 依赖。Alas 是用 Python 写的,版本升级时经常会新增第三方库,这些依赖声明在根目录的requirements.txt里。如果你只拉代码不装依赖,启动时大概率会直接报ModuleNotFoundError。反过来说,有些版本会把某个依赖去掉,这时候如果不及时同步 requirements,就可能出现版本冲突。

第三环是配置和资源文件。像端口号、模拟器路径、账号信息这些用户配置,更新时一般不会动,但资源文件会变,比如关卡信息、船坞识别模板、脚本流程配置。这些文件虽然不显眼,却是最容易在更新后引发“行为异常”的地方。

所以完整的更新流程应该是:同步代码、更新依赖、检查配置和资源,最后才是重启服务。这套链条只要有一环走得慢或者出错,整个更新都会卡住。

1.2 为什么默认源经常卡住

先说明一下,我这里说的“卡住”纯粹是网络链路上的客观问题。GitHub、PyPI 官方源这些服务,服务器基本都架在海外,国内网络直连时 TCP 握手时延高,丢包率也偏高。Git 恰恰又是大量小文件并发传输的协议,一个包出错就会触发重传,重传到一定程度整个传输过程就陷入半死不活的状态。

我自己遇到过最典型的情况是:git clone跑到 80% 突然卡住,进度条不动,等了五分钟报fatal: early EOF。这种问题不是 Alas 本身的 bug,纯粹是传输链路太脆弱。PyPI 官方源也类似,安装依赖时经常是“正在下载”然后长时间没有动静,最后超时失败。

所以我的思路很直接:既然默认源不给力,那就把更新链路上能换的源全换成镜像源。镜像源本质上就是官方仓库在国内的同步副本,地址在国内,访问路径短,时延和丢包率都会好很多。

1.3 我的镜像源选型方案

这里先给出我的整体方案,后面章节再细节展开。

Git 仓库层面,我不建议用网上那些公共加速服务,而是自己用 Gitee 导一份镜像。公共加速服务的好与坏完全取决于别人的服务器状态,而且有时候会混入奇怪的历史 commit,安全性和稳定性都不好把控。自己导一份镜像到 Gitee,代码在自己账号下,速度稳定,出了问题也方便追查。

Python 依赖层面,我用的是清华 TUNA 的 PyPI 镜像,备用源是阿里云。清华镜像同步频率高,包比较全,适合安装 requirements.txt 里的依赖。阿里云则是备选,清华偶尔抽风或者某个包没同步的时候,切过去能救急。

Docker 部署层面,如果 Alas 是通过 Docker 跑的服务,我会给 Docker 配置 registry mirror 加速器。这个稍后会在 2.4 节详细说。

这套方案的核心逻辑是:不要把所有鸡蛋放在一个篮子里,每个环节选一个稳定源,同时留一个备选源。更新流程跑不通时,能快速替换而不是干等。

2. 镜像源怎么选,深入对比和避坑

2.1 常用镜像源速查表

先把常用的镜像源整理成一张表,方便对照查询。注意镜像源地址是会变的,尤其是 Docker 相关的镜像加速器,经常有服务调整甚至关停,使用前最好去各镜像站官网确认一下当前生效地址。

类型推荐镜像源配置地址示例适用场景备注
Python / pip清华 TUNAhttps://pypi.tuna.tsinghua.edu.cn/simplerequirements.txt 依赖安装同步频率高,包比较全
Python / pip阿里云https://mirrors.aliyun.com/pypi/simple清华不可用时的备用速度也很快,但偶有同步延迟
npmnpmmirrorhttps://registry.npmmirror.com前端工程依赖老 taobao 域名已弃用,别再用
Docker中科大镜像https://docker.mirrors.ustc.edu.cndocker pull Docker Hub 镜像地址可能有变动
Docker网易镜像https://hub-mirror.c.163.comdocker pull Docker Hub 镜像备选
APT清华 / 阿里云https://mirrors.tuna.tsinghua.edu.cn/ubuntu/Ubuntu 系统软件源要匹配系统版本,如 jammy
Conda清华https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/Conda 创建和管理 Python 环境需要写入 .condarc

这张表里的 pip 和 Docker 是 Alas 更新最常涉及的两类。npm 和 APT 属于锦上添花,如果你的系统本身就需要频繁装软件,顺手配置一下能省很多事。

2.2 pip 镜像的配置细节

pip 镜像配置有两种方式,一种是在命令行里临时指定,一种是写在配置文件里全局生效。我强烈建议用配置文件的方式,原因很简单:命令行临时指定容易忘,而且一旦你用了pip install但忘记带-i参数,pip 又会跑去官方源,网络一卡又是白等。

配置文件的位置分系统看。Windows 下是%APPDATA%\pip\pip.ini,通常就是C:\Users\你的用户名\AppData\Roaming\pip\pip.ini。Linux 下是~/.pip/pip.conf,也可以用系统级路径/etc/pip.conf。如果你不确定当前用的是哪个路径,直接执行下面这行命令,pip 会把当前生效的配置文件路径打印出来。

pip config list -v

然后写入如下内容:

[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn

trusted-host这一行是关键。清华镜像的 HTTPS 证书有时不被某些环境的 pip 信任,如果报 SSL 相关错误,这一行能帮你跳过证书校验环节。但注意,trusted-host本质上是在告诉 pip “我信任这个域名”,所以千万不要把别人提供的未知镜像源随便加进去,安全优先。

配置好之后,你可以用下面这行命令验证一下:

pip install --dry-run requests

如果很快显示 “Would install requests”,说明镜像源配置生效了。

2.3 git 仓库的镜像思路:用 Gitee 建私人源

Git 仓库的镜像,我不太推荐用公共代理,而是建议在 Gitee 上导一份自己的仓库。Gitee 是国内老牌的 Git 托管平台,从 GitHub 导入仓库是它的内置功能,不需要你亲自先把仓库下载下来再传上去。

具体做法是:登录 Gitee,点击右上角的“ + ”号,选择“从 GitHub 导入仓库”。然后粘贴 Alas 的 GitHub 仓库地址,仓库名建议起成AzurLaneAutoScript-mirror这样的名字,方便自己一眼认出这是镜像。导入过程由 Gitee 服务器完成,你只需要等待即可。

导入完成后,你会得到一个类似https://gitee.com/你的用户名/AzurLaneAutoScript-mirror.git的地址。这就是你后续更新 Alas 时用的镜像源地址。

这里要注意一个问题:Gitee 导入的仓库默认不是自动同步的。也就是说,当你导入完那一刻,Gitee 上的代码和 GitHub 官方仓库是一致的,但之后官方仓库更新了,你的 Gitee 镜像并不知情。你需要每隔一段时间去 Gitee 仓库页面点一次“同步”按钮,或者用“强制同步”功能把 GitHub 上的最新 commit 拉过来。这一步是手动操作,没见过哪个 Gitee 按钮能完全自动化的,除非你自己写脚本调 API。

2.4 Docker 镜像加速器配置细节

如果 Alas 是用 Docker 部署的,那 Docker 镜像加速器就必须配好。Docker 默认从 Docker Hub 拉镜像,这个地址对国内网络同样不友好。配置加速器的核心文件是/etc/docker/daemon.json,如果文件不存在,创建一个即可。

{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] }

修改完成后重启 Docker 服务:

sudo systemctl restart docker

之后执行:

docker info

在输出里找 Registry Mirrors 这一项,如果能看到你配置的地址,说明加速器已经生效。然后随便拉一个镜像测试一下速度,比如docker pull hello-world,正常情况几秒钟就能下来。

还有一个隐藏坑:registry mirror 只对 Docker Hub 官方镜像生效。如果你拉的是ghcr.io、quay.io这类第三方仓库的镜像,镜像加速器是不起作用的。所以用 Docker 部署 Alas 之前,先确认它的镜像到底发布在哪个仓库,再决定要不要配加速器。

3. 实操:从零开始用镜像源更新 Alas

3.1 环境准备与前置检查

在动手之前,先检查三个东西:Git 是否安装、Python 版本是否合规、当前仓库是否干净。

Git 检查很简单:

git --version

如果没有安装,Windows 用户建议装 Git for Windows,安装完记得把 Git 的 bin 目录加到 PATH 里。Python 检查执行:

python --version

Alas 对 Python 版本有要求,一般建议用 3.10 或 3.11,具体以仓库 README 的说明为准。如果当前版本太低,建议先升级 Python 再继续。第三步是检查本地仓库状态,进入 Alas 目录执行:

git status

如果显示工作区有改动,一定要先处理,否则后面git pull会提示冲突。处理方式我建议先把改动 stash 起来:

git stash save "backup before update"

这样既保留了你的改动,又把工作区恢复干净,方便拉取更新。

3.2 把 GitHub 仓库导入 Gitee

这一步提升速度的效果最明显。操作路径是:登录 Gitee -> 右上角“ + ” -> “从 GitHub 导入仓库”。在弹出的页面里粘贴 Alas 的 GitHub 仓库地址,然后点导入。

导入耗时取决于仓库大小和 Gitee 服务器的状态,Alas 这个仓库不算小,我等过大概一两分钟。导入完成后打开你自己的 Gitee 仓库,确认 code 页面能正常看到文件列表,然后复制 HTTPS 地址。

有一点要提醒:Gitee 导入的时候偶尔会把仓库的 issue、PR 这些也给带过来,但代码主体一般没问题。如果导入后仓库看起来缺了不少文件,别慌,多半是 Gitee 缓存问题,点一下仓库页面的“刷新”或者重新同步一次。

3.3 本地仓库切换镜像源并拉取更新

有两种情况。第一种是你之前还没有克隆过 Alas,那直接用 Gitee 地址克隆就行:

git clone https://gitee.com/你的用户名/AzurLaneAutoScript-mirror.git

第二种是你本地已经有一个从 GitHub 克隆的老仓库,那不用重新克隆,直接改 remote 地址:

git remote set-url origin https://gitee.com/你的用户名/AzurLaneAutoScript-mirror.git

改完之后执行git remote -v确认一下,输出里显示的 URL 应该已经变成 Gitee 地址。接下来就是拉取更新:

git fetch --all -p git pull

fetch会把远端最新的 commit 信息拉到本地,但不会动你的工作区,这一步是安全的。pull则是把远程仓库的最新代码合并到当前分支。如果你之前已经 stash 了本地改动,此时大概率能顺利合并。

拉完以后看一眼版本号,可以用git log --oneline -5看最近几条提交,确认代码确实更新到了你要的版本。对比 Gitee 仓库页面上显示的 commit hash,如果一致说明同步成功。

3.4 用清华 PyPI 镜像安装依赖

代码同步完成之后,依赖这一环不能漏。进入 Alas 根目录,执行:

pip install -r requirements.txt

如果你的 pip 已经按 2.2 节配置好了镜像源,这行命令就直接走清华镜像了,速度会明显快很多。如果你还没配置全局镜像,也可以临时指定:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

我见过很多人只拉代码、不装依赖,启动时看到ModuleNotFoundError: No module named 'xxx',又花半小时排查。其实只要你每次更新后都跑一遍pip install -r requirements.txt,这类问题能少一大半。

如果安装过程中提示某些包找不到,比如Could not find a version that satisfies the requirement,大概率是清华镜像还没同步这个包的最新版本。这时可以临时加一个官方源兜底:

pip install -r requirements.txt --extra-index-url https://pypi.org/simple

--extra-index-url的意思是“在原有源的基础上,额外增加一个官方源”。注意它是追加而不是替换,所以清华镜像优先,官方源补缺,这是最稳妥的兜底方案。

3.5 Docker 部署场景下的镜像更新流程

如果你是用 Docker 跑 Alas,代码和依赖的更新逻辑有点不同。镜像本身是打包好的,更新通常意味着拉取新的 image 版本并重新创建容器。

假设你已经配好了 2.4 节的 Docker registry mirror,那么更新流程是:

docker pull 你的镜像名

镜像下载完成后,停掉旧容器、删掉旧容器、用新镜像重新创建容器。具体命令以你使用的镜像页面的说明为准,但有一个通用规则必须记住:容器里的数据是无状态的,杀掉就没了,所以一定要把配置、日志、数据库等目录通过 volume 挂载到宿主机上。比如:

docker run -d --name alas \ -v /你的宿主机路径/config:/app/config \ -v /你的宿主机路径/logs:/app/logs \ 你的镜像名

这样更新时即使容器被删掉,数据也不会丢。我见过有人就是因为没挂载 volume,每次更新后重新创建容器,账号配置全没了,又得从头设置一遍。

3.6 更新完成后的启动与验证

代码和依赖都更新完之后,最后一步是启动验证。Alas 的启动方式根据版本不同略有差异,一般根目录会有main.py文件,可能是命令行入口,也可能有 GUI 窗口。还有的版本提供.bat或.sh启动脚本。以你当前版本 README 的说明为准。

启动后先别急着看界面,重点看日志输出。如果是正常启动,日志里会有一系列初始化信息,比如加载配置、连接模拟器、检查游戏进程。如果启动后立刻报错,多半是配置文件和代码存在不兼容。

这时候去查看 config 目录下的配置文件,看是不是缺了新版本要求的字段。很多时候官方在发布新版本时会新增配置项,旧配置里没有,程序启动时就抛异常。解决方法是打开配置文件,对比仓库里的配置文件模板,把缺失的字段补上。

如果补完配置还是报错,那就进入下一节的问题排查环节。

4. 常见问题与排错实录

4.1 问题速查表

这一节整理我在实际更新 Alas 过程中遇到过的典型问题,按表格形式列出,方便大家直接对照排查。

现象可能原因处理方式
git pull报 uncommitted changes本地改过配置或代码,工作区不干净git stash保存改动,pull 后git stash pop
pip install找不到某个包镜像源同步延迟,或者包名/版本号有变加--extra-index-url https://pypi.org/simple兜底
SSL 证书校验失败某些镜像源证书不被当前环境信任在 pip 配置中加trusted-host
docker pull长时间卡住镜像加速器失效,或者拉的是第三方仓库镜像确认 registry-mirrors 地址,检查docker info
更新后启动报ModuleNotFoundError依赖没有同步安装跑一遍pip install -r requirements.txt
Gitee 镜像仓库代码很旧Gitee 导入的仓库不会自动同步去 Gitee 仓库页面手动点“同步”
更新后游戏行为异常资源文件或配置模板没同步检查配置模板,删除旧缓存文件
本地仓库被改得乱七八糟直接在主线分支改了代码用git reset --hard回到远程版本

4.2 两个容易翻车的细节

第一个细节是 pip 镜像的“全局配置依赖”。很多人把 pip 镜像写进全局配置后,每次安装都成功了,就觉得很稳妥。但如果你换了网络环境,比如从家里切换到公司内网,内网通常访问不了公网镜像源,这时候 pip 就会一直连接超时。遇到这种情况,临时用命令行参数覆盖全局配置:

pip install -r requirements.txt --index-url https://pypi.org/simple --trusted-host pypi.org

别嫌麻烦,这比卡在超时里等十分钟强得多。

第二个细节是git pull和配置文件冲突。Alas 的很多配置文件,比如config/目录下的文件,本身就在 git 仓库里被跟踪。你有两种选择:要么把配置文件从 git 跟踪里移除,改为用本地副本;要么每次更新前都把配置改动 stash 起来,更新后再 pop。我个人的习惯是配置文件和源码分开存放,把源码目录保持纯净,配置文件放到单独目录,这样更新时可以直接git reset --hard,完全不用怕冲突。

4.3 排错思路总结

排错时我习惯从底层往上层排查。先看网络层,用curl测试一下镜像源地址通不通;再看代码层,git status确认工作区是否干净;然后是依赖层,直接import一下报错的模块,看是没安装还是安装版本不对;最后才是配置层,检查配置模板和实际配置的差异。

举个例子,有一次更新后模拟器一直连接失败,我第一反应是模拟器端口设置问题,检查半天发现不是。后来用git diff看了一眼更新前后的配置文件,发现新版本把 ADB 连接模式从connect改成了pair,端口逻辑完全变了。这种问题只有把镜像源和代码版本对比起来看才能发现。

5. 一些我踩过坑之后留下的习惯

5.1 更新前先做版本快照

现在每次更新 Alas,我都会先记录当前 commit hash。这一步很简单:

git rev-parse HEAD > version.txt

然后把更新前能正常运行的版本号随手存起来。万一新版本出现重大问题,想回退就很方便:

git reset --hard 之前记录的那个hash

有了这个快照,心里就有底了,更新后就算翻车也能快速恢复,不用在那干瞪眼。

5.2 让镜像源“活”起来

Gitee 镜像不是导一次就完事的。官方仓库每次发新版本,Gitee 上的镜像不会自动跟着变,需要你去手动同步。我习惯在官方仓库 release 出通告之后,先去 Gitee 点一下同步按钮,等同步完成,再在本地拉更新。这样本地拉到的永远是最新的,不会被“Gitee 仓库还停留在旧版本”这种问题坑到。

如果你嫌手动麻烦,可以写个简单的定时任务,每天自动去 Gitee 仓库触发同步。操作不难,但要注意别触发太频繁,Gitee 对同步频次有些限制。

5.3 保留一个纯净的本地副本

我的开发机上保留了两份 Alas。一份是纯净的源码副本,只用来拉更新、看日志、做对比,这份目录永远保持干净,不跑实际任务。另一份是实际的运行副本,配置文件、账号数据都在这里。

这样做的好处很明显:纯净副本可以随时git reset --hard回退到任意版本,脏东西不会影响主运行环境。遇到新版本 bug,我在纯净副本里先测一轮,确认没问题再同步到运行副本,相当于多了一道保险。

最后再分享一个小经验:更新这件事,工具是死的,人是活的。镜像源只是帮你把网络这层障碍扫平,真正决定更新顺不顺的,是你对 Alas 更新机制的理解深度。把这套流程跑顺之后,每次大版本更新我从开始到搞定基本五分钟内完成,希望这篇也能让你省下那半小时干等更新的时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 3:11:35

Grafana Loki 日志删除实操指南:从零配置到物理清理

Grafana Loki 日志删除实操指南:从零配置到物理清理 【免费下载链接】loki Like Prometheus, but for logs. 项目地址: https://gitcode.com/GitHub_Trending/lok/loki 用 Grafana Loki 日志删除清理指定流和时间窗口的日志:配置 compactor、提交…

作者头像 李华
网站建设 2026/9/29 3:08:44

芯片烧录自己做还是外包?从成本、效率到数据安全的量产决策指南

芯片烧录这个环节,在公司内部讨论度往往不高,但真到了量产阶段,它往往是第一个让硬件工程师头疼的问题。我见过不少团队从研发样机一路顺风顺水,结果在试产第一批板子时,因为烧录环节没想清楚,硬生生卡了两…

作者头像 李华