这篇文章整理一些我平时常会用到的系统源、软件源、容器源,以及对应的换源/加速方法,方便以后自己查,也顺手分享给同样经常折腾的朋友。
本文不追求“全网最全”,重点是 常用、能落地、便于自己备忘。
一、写在前面
1. 为什么要换源
常见原因主要有这些:
- 官方源访问慢
- 下载经常断
- Docker / 包管理器拉依赖特别慢
- 境内网络下,部分国外源体验不稳定
- 装系统、装依赖时,想尽量提升成功率
2. 换源前建议
正式改之前,建议先做三件事:
- 备份原配置
- 确认系统版本代号
- 改完立即更新索引并测试
例如:
cat /etc/os-release
uname -a
3. 常见镜像站
本文主要会用这些作为示例:
- 清华 TUNA:
https://mirrors.tuna.tsinghua.edu.cn - 中科大 USTC:
https://mirrors.ustc.edu.cn - 阿里云:
https://mirrors.aliyun.com - npm 镜像:
https://registry.npmmirror.com - Go 代理:
https://goproxy.cn
二、系统与系统级软件仓库
1. Debian
适用场景
Debian 服务器、虚拟机、LXC 容器都很常见。
说明
不同 Debian 版本,源配置文件可能不同:
- 老写法:
/etc/apt/sources.list - 新写法(Debian 12 及很多新环境常见):
/etc/apt/sources.list.d/debian.sources
建议先看本机实际文件再改。
备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2>/dev/null || true
sudo cp /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list.d/debian.sources.bak 2>/dev/null || true
Debian 12/较新系统常见写法(DEB822)
以 bookworm 为例:
sudo tee /etc/apt/sources.list.d/debian.sources >/dev/null <<'EOF'
Types: deb
URIs: https://mirrors.ustc.edu.cn/debian
Suites: bookworm bookworm-updates bookworm-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: https://mirrors.ustc.edu.cn/debian-security
Suites: bookworm-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
sudo apt update
传统写法
sudo tee /etc/apt/sources.list >/dev/null <<'EOF'
deb https://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
EOF
sudo apt update
恢复官方源
把镜像域名改回:
https://deb.debian.org/debianhttps://security.debian.org/debian-security
2. Ubuntu
说明
Ubuntu 也有两种常见写法:
- 传统:
/etc/apt/sources.list - Ubuntu 24.04 及以后,很多安装方式默认使用:
/etc/apt/sources.list.d/ubuntu.sources
备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2>/dev/null || true
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak 2>/dev/null || true
Ubuntu 24.04+ 常见写法(DEB822)
以 noble 为例:
sudo tee /etc/apt/sources.list.d/ubuntu.sources >/dev/null <<'EOF'
Types: deb
URIs: https://mirrors.ustc.edu.cn/ubuntu
Suites: noble noble-updates noble-backports noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF
sudo apt update
传统写法
以 jammy 为例:
sudo tee /etc/apt/sources.list >/dev/null <<'EOF'
deb https://mirrors.ustc.edu.cn/ubuntu jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu jammy-security main restricted universe multiverse
EOF
sudo apt update
恢复官方源
把域名改回:
https://archive.ubuntu.com/ubuntuhttps://security.ubuntu.com/ubuntu
3. Proxmox VE(PVE)
说明
PVE 换源通常分两部分:
- Debian 基础源
- PVE 自己的软件仓库
也就是说,只改 PVE 仓库还不够,Debian 基础源也建议一起改。
常见 no-subscription 源
以 bookworm 为例:
sudo tee /etc/apt/sources.list.d/pve-no-subscription.list >/dev/null <<'EOF'
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bookworm pve-no-subscription
EOF
sudo apt update
如果你的系统使用 .sources
sudo tee /etc/apt/sources.list.d/pve-no-subscription.sources >/dev/null <<'EOF'
Types: deb
URIs: https://mirrors.ustc.edu.cn/proxmox/debian/pve
Suites: bookworm
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
sudo apt update
enterprise 源如果不用订阅,建议注释掉
sudo sed -i 's|^deb |# deb |g' /etc/apt/sources.list.d/pve-enterprise.list 2>/dev/null || true
sudo sed -i 's|^Types: deb|# Types: deb|g' /etc/apt/sources.list.d/pve-enterprise.sources 2>/dev/null || true
备注
PVE 版本不同,对应的 Debian 代号也可能不同。
示例里写的是 bookworm,你要按你当前系统实际版本调整。
4. Ceph
说明
Ceph 在 PVE 场景中很常见,尤其做集群或分布式存储时会用到。
Debian 示例(Reef)
echo "deb https://mirrors.ustc.edu.cn/ceph/debian-reef/ bookworm main" | \
sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt update
Ubuntu 示例(Reef)
echo "deb https://mirrors.ustc.edu.cn/ceph/ubuntu-reef/ noble main" | \
sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt update
备注
reef 只是示例。
如果你用的是其他 Ceph 大版本,比如 quincy、squid,目录也要跟着改。
5. OpenWrt
说明
OpenWrt 换源最常见是改:
/etc/opkg/distfeeds.conf
但要注意,不同版本、不同构建方式,包管理方案可能不同。
本文先给最常见的 opkg 写法。
一键替换
sed -i 's_https\?://downloads.openwrt.org_https://mirrors.ustc.edu.cn/openwrt_g' /etc/opkg/distfeeds.conf
opkg update
手动查看
cat /etc/opkg/distfeeds.conf
备注
- 有些镜像站只同步 release,不一定同步 snapshots
- 如果你用 HTTPS 拉取失败,可能要先安装证书相关包
6. Alpine Linux
配置文件
/etc/apk/repositories
一键替换
sudo cp /etc/apk/repositories /etc/apk/repositories.bak
sudo sed -i 's#https\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.ustc.edu.cn/alpine#g' /etc/apk/repositories
sudo apk update
恢复官方源
把域名改回:
https://dl-cdn.alpinelinux.org/alpine
7. CentOS Stream
说明
CentOS Stream 和老 CentOS 7/8 的 repo 结构不一样。
这里以 Stream 9 为例,直接写常用 repo 内容,最省事。
示例:/etc/yum.repos.d/centos.repo
sudo tee /etc/yum.repos.d/centos.repo >/dev/null <<'EOF'
[baseos]
name=CentOS Stream $releasever - BaseOS
baseurl=https://mirrors.ustc.edu.cn/centos-stream/$releasever-stream/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[appstream]
name=CentOS Stream $releasever - AppStream
baseurl=https://mirrors.ustc.edu.cn/centos-stream/$releasever-stream/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[crb]
name=CentOS Stream $releasever - CRB
baseurl=https://mirrors.ustc.edu.cn/centos-stream/$releasever-stream/CRB/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
EOF
sudo dnf makecache
备注
如果你有 centos-addons.repo、SIG 仓库等需求,再按实际情况补。
8. Rocky Linux / AlmaLinux
说明
这两类系统的换源思路,通常都是:
- 注释掉
mirrorlist=或metalink= - 启用
baseurl= - 把官方域名换成镜像站域名
Rocky Linux 常见做法
sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.bak
sudo sed -i.bak \
-e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=https://dl.rockylinux.org/\$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
/etc/yum.repos.d/Rocky-*.repo
sudo dnf makecache
AlmaLinux 常见做法
sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.bak
sudo sed -i.bak \
-e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^# baseurl=https://repo.almalinux.org|baseurl=https://mirrors.aliyun.com/almalinux|g' \
/etc/yum.repos.d/almalinux*.repo
sudo dnf makecache
备注
这两类系统各镜像站提供的 repo 文件有时会略有差异。
如果你想最稳,优先直接看镜像站当前给出的专用 repo 说明。
9. Fedora
说明
Fedora 默认走 metalink,很多时候也能正常用。
如果访问不理想,再手动切镜像。
常见做法
sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.bak
sudo sed -i.bak \
-e 's|^metalink=|#metalink=|g' \
-e 's|^#baseurl=https://download.example/pub/fedora/linux|baseurl=https://mirrors.ustc.edu.cn/fedora|g' \
/etc/yum.repos.d/fedora.repo \
/etc/yum.repos.d/fedora-updates.repo
sudo dnf makecache
10. Arch Linux
配置文件
/etc/pacman.d/mirrorlist
常见做法
把想用的镜像站放到最上面:
sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
sudo sed -i '1i Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch' /etc/pacman.d/mirrorlist
sudo pacman -Syyu
备注
pacman -Syyu 里的两个 y,就是强制重新同步数据库,换源后很常见。
11. OpenMediaVault(OMV)
说明
OMV 本质上是基于 Debian 的,但它自己有专门的环境变量和仓库配置方法。
不建议把它当成普通 Debian 直接乱改。
常见切换方法
sudo omv-env set OMV_APT_REPOSITORY_URL "https://mirrors.ustc.edu.cn/openmediavault/public"
sudo omv-env set OMV_APT_ALT_REPOSITORY_URL "https://mirrors.ustc.edu.cn/openmediavault/packages"
sudo omv-salt stage run all
备注
OMV 有自己的内核/回移植逻辑,不要随手给它加 Debian backports,不然容易冲突。
三、容器、虚拟化与镜像仓库
12. Docker CE 软件仓库
说明
这个是 Docker 软件包仓库,不是 Docker Hub 镜像加速。
别把这两个概念混了。
Debian / Ubuntu 常见写法
sudo install -m 0755 -d /etc/apt/keyrings
source /etc/os-release
curl -fsSL https://download.docker.com/linux/${ID}/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null <<EOF
Types: deb
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.gpg
URIs: https://mirrors.ustc.edu.cn/docker-ce/linux/${ID}
Suites: ${VERSION_CODENAME}
Components: stable
EOF
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
备注
${ID}一般是debian或ubuntu${VERSION_CODENAME}比如bookworm、jammy、noble
13. Docker Hub 镜像加速
说明
这个是平时最常说的“Docker 换源”。
配置文件
/etc/docker/daemon.json
示例
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
"registry-mirrors": [
"https://your-docker-mirror.example.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -A3 "Registry Mirrors"
备注
- 这里填的是 Docker Hub 镜像加速地址
- 不是软件源
- 也不是 GHCR 加速配置
14. GHCR(GitHub Container Registry)加速/代理
说明
GHCR 和 Docker Hub 不一样。
Docker 的 registry-mirrors 不会自动帮你代理 ghcr.io。
如果你想加速 GHCR,比较常见的办法是:
- 自己搭一个 registry 代理
- 上游指向
https://ghcr.io - 拉镜像时,显式从你自己的代理域名拉
示例:自建代理
version: "3.9"
services:
ghcr-proxy:
image: registry:3
container_name: ghcr-proxy
restart: always
ports:
- "5000:5000"
environment:
REGISTRY_PROXY_REMOTEURL: https://ghcr.io
REGISTRY_STORAGE_DELETE_ENABLED: "true"
OTEL_TRACES_EXPORTER: none
volumes:
- ./data:/var/lib/registry
拉取方式
例如原来是:
docker pull ghcr.io/open-webui/open-webui:main
改成类似:
docker pull ghcr.yourdomain.com/open-webui/open-webui:main
备注
这一类方式本质上是 显式走你的代理域名,不是 Docker 自动识别 ghcr.io 并替换。
15. LXC / Incus 镜像
说明
这个点很容易混淆。
- PVE 里的 LXC 模板下载
- LXD / Incus 的 public image server
- linuxcontainers 镜像站
这几件事不完全是一回事。
如果你用的是 Incus
可以这样加公共镜像源:
incus remote add mirror-images https://mirrors.ustc.edu.cn/lxc-images/ --protocol=simplestreams --public
incus image list mirror-images:
备注
如果你说的是 PVE 的 LXC 模板,那更常见的是走 PVE 自己模板机制,而不是直接用这个命令。
四、开发环境与包管理器
16. Python pip / PyPI
临时使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/web/simple package-name
全局设置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/web/simple
备注
- 这里的路径里
simple很关键 - 改完后可以用
pip config list看结果
17. Node.js / npm
npm 换源
npm config set registry https://registry.npmmirror.com
npm config get registry
恢复官方源
npm config set registry https://registry.npmjs.org
18. pnpm
换源
pnpm config set registry https://registry.npmmirror.com
pnpm config get registry
恢复官方
pnpm config set registry https://registry.npmjs.org
19. yarn
Yarn Classic / 通用写法
yarn config set registry https://registry.npmmirror.com
yarn config get registry
Yarn Berry / 较新写法
yarn config set npmRegistryServer https://registry.npmmirror.com
恢复官方
yarn config set registry https://registry.yarnpkg.com
20. Maven
配置文件
~/.m2/settings.xml
常见配置
<settings>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
备注
Maven 的换源本质上就是在 settings.xml 里配置 mirror。
21. Gradle
说明
Gradle 常见有两个层面:
- 项目依赖仓库
- Gradle Wrapper 分发地址
项目依赖仓库示例
build.gradle:
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
build.gradle.kts:
repositories {
mavenLocal()
maven("https://maven.aliyun.com/repository/public")
mavenCentral()
}
备注
如果你想所有项目统一生效,也可以考虑写到 init.gradle 里。
22. Go Modules
说明
Go 最常见是配 GOPROXY。
设置
go env -w GOPROXY=https://goproxy.cn,direct
go env GOPROXY
恢复官方默认思路
go env -w GOPROXY=https://proxy.golang.org,direct
23. Rustup / Cargo
Rustup
echo 'export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rustup' >> ~/.bashrc
echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rustup/rustup' >> ~/.bashrc
source ~/.bashrc
Cargo(crates.io 索引)
mkdir -p ~/.cargo
cat > ~/.cargo/config.toml <<'EOF'
[source.crates-io]
replace-with = "tuna"
[source.tuna]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"
[registries.tuna]
index = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"
EOF
备注
sparse+.../ 末尾这个 / 不要漏。
24. Homebrew
说明
Homebrew 近几个大版本后,换源思路跟以前略有区别。
现在很多时候,重点不只是 brew.git、homebrew-core.git,还包括 API 和 bottles。
常见环境变量方式
echo 'export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"' >> ~/.zprofile
echo 'export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles"' >> ~/.zprofile
echo 'export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/git/homebrew/brew.git"' >> ~/.zprofile
echo 'export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/git/homebrew/homebrew-core.git"' >> ~/.zprofile
source ~/.zprofile
brew update
恢复官方
unset HOMEBREW_API_DOMAIN
unset HOMEBREW_BOTTLE_DOMAIN
unset HOMEBREW_BREW_GIT_REMOTE
unset HOMEBREW_CORE_GIT_REMOTE
git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew
git -C "$(brew --repo homebrew/core)" remote set-url origin https://github.com/Homebrew/homebrew-core
brew update
25. MySQL
说明
MySQL 官方源通常不是系统默认自带,很多时候需要额外添加仓库。
Debian / Ubuntu 示例
先准备 key(示例):
sudo install -m 0755 -d /usr/share/keyrings
curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | \
sudo gpg --dearmor -o /usr/share/keyrings/mysql.gpg
Ubuntu 示例(noble,8.4):
echo "deb [signed-by=/usr/share/keyrings/mysql.gpg] https://mirrors.ustc.edu.cn/mysql/apt/ubuntu/ noble mysql-8.4 mysql-tools" | \
sudo tee /etc/apt/sources.list.d/mysql-community.list
sudo apt update
Debian 示例(bookworm,8.4):
echo "deb [signed-by=/usr/share/keyrings/mysql.gpg] https://mirrors.ustc.edu.cn/mysql/apt/debian/ bookworm mysql-8.4 mysql-tools" | \
sudo tee /etc/apt/sources.list.d/mysql-community.list
sudo apt update
RHEL / Rocky / Alma 常见思路
通常是把 repo 文件里的官方 baseurl 换成镜像站的 MySQL YUM 地址。
26. MongoDB
Ubuntu / Debian 示例
以 MongoDB 8.0 为例:
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg
echo "deb [signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg] https://mirrors.ustc.edu.cn/mongodb/apt/ubuntu noble/mongodb-org/8.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
sudo apt update
sudo apt install -y mongodb-org
备注
如果你是 Debian,把 ubuntu 和发行版代号改成对应值即可。
五、GitHub 下载加速
27. GitHub Release / Raw 下载加速
说明
这一类不属于“标准包管理器换源”,而是 下载层面的加速。
常见场景:
- GitHub Release 下载二进制文件慢
raw.githubusercontent.com拉配置、脚本、规则文件慢
Release
有些镜像站会同步部分热门 GitHub Release。
但要注意:
- 不是所有项目都有
- 不是所有 tag 都会同步
- 路径也可能不是统一固定格式
所以 GitHub Release 加速更适合:
- 临时下载
- 某些固定项目长期使用
- 自己做下载脚本时按项目单独适配
Raw
raw.githubusercontent.com 更偏向“原始文件访问”。
很多工具支持你把 raw 地址改成代理地址或镜像地址,但具体能不能用,取决于你用的那套服务。
我的建议
这类不要写死成“万能方法”,而是分成三种思路:
- 有镜像站就用镜像站
- 没有镜像站就用代理服务
- 长期稳定需求,自己做中转或缓存
六、一些容易混淆的点
1. Docker CE 源 ≠ Docker Hub 镜像加速
- Docker CE 源:安装
docker-ce软件包 - Docker Hub 镜像加速:加速
docker pull
2. GHCR 不能直接靠 registry-mirrors 自动替代
Docker 的镜像加速机制主要针对 Docker Hub。
GHCR 更常见是自建代理,然后显式从代理域名拉取。
3. PVE 换源不只是改 PVE 仓库
Debian 基础源、PVE 源、Ceph 源,往往要分开看。
4. OMV 不建议粗暴按 Debian 回源玩法瞎改
尤其别乱加 backports。
5. OpenWrt 不同版本/构建,换源文件可能不完全一样
别上来就无脑执行脚本,先 cat 一眼实际配置。
七、恢复官方源的一般思路
如果改乱了,大多数场景都可以按这个逻辑恢复:
- 找回备份文件
- 或者把镜像域名改回官方域名
- 删除自建的第三方 repo 文件
- 重新刷新缓存
常见命令:
APT
sudo apt clean
sudo apt update
DNF / YUM
sudo dnf clean all
sudo dnf makecache
Pacman
sudo pacman -Syy
APK
sudo apk update
八、我自己的使用建议
如果只是为了“够用、稳定、少折腾”,我一般建议:
系统类
- Debian / Ubuntu / PVE / OpenWrt:优先清华或中科大
- Fedora / Arch:优先选同步快的国内镜像
- Rocky / Alma:优先看镜像站现成说明,不要手搓过头
开发类
- Python:PyPI 镜像
- Node:
npmmirror - Go:
goproxy.cn - Maven / Gradle:阿里云公共仓库
- Rust:TUNA
容器类
- Docker CE:软件源单独配
- Docker Hub:单独配
registry-mirrors - GHCR:单独做代理,不要和 Docker Hub 混为一谈
九、最后
这篇更像是我的个人备忘录。
后续如果我再遇到新的常用源,比如:
- Kubernetes / Helm
- PostgreSQL / MariaDB
- Flutter / Dart / CocoaPods
- 其他 NAS / 虚拟化相关仓库
再继续往这篇里补就行。
如果你也经常装系统、装容器、拉依赖,那这类“换源清单”真的很适合长期留一篇放博客里,后面直接复制就能用。