Ubuntu 服务器代理配置:系统、APT、Git、Docker 与下载工具分层设置
本文记录如何为 Ubuntu 服务器配置代理。
当前网络结构如下:
Mac mini
IP:192.168.2.2
代理端口:7897
│
│ 2.5G 有线直连
▼
Ubuntu AI Server
目标不是让所有流量无差别经过代理,而是采用更稳定的分层方案:
- Ubuntu 官方软件包通过清华镜像直接下载
- GitHub、Docker Hub、Hugging Face 等国外服务按需使用代理
- 局域网、SSH、NAS 和本地服务不走代理
- Git 代理可以快速开启或关闭
一、先确认 Mac 代理允许局域网连接
Ubuntu 要通过 Mac 使用代理,Mac 上的代理程序必须允许 LAN 访问。
在 Clash、Clash Verge、Mihomo、Surge 等软件中检查:
Allow LAN:开启
监听地址:0.0.0.0
端口:7897
不能只监听:
127.0.0.1:7897
在 Mac 上检查监听状态:
lsof -nP -iTCP:7897 -sTCP:LISTEN
理想输出应包含:
*:7897
或者:
0.0.0.0:7897
如果只显示:
127.0.0.1:7897
Ubuntu 无法连接。
二、在 Ubuntu 测试到 Mac 的网络
先确认 Ubuntu 可以访问 Mac:
ping -c 4 192.168.2.2
再测试代理端口:
nc -vz 192.168.2.2 7897
成功时应看到类似:
Connection to 192.168.2.2 7897 port [tcp/*] succeeded!
测试 HTTP 代理:
curl -I -x http://192.168.2.2:7897 https://github.com
成功时通常能看到:
HTTP/1.1 200 Connection established
以及后续的 GitHub HTTP 响应。
如果看到:
Connection refused
说明 Mac 上没有监听该端口,或未开启 LAN 访问。
三、不要让 APT 强制走代理
Ubuntu 已经使用清华 TUNA 镜像时,APT 通常不需要代理。
如果存在旧的 APT 代理配置:
cat /etc/apt/apt.conf.d/80proxy
内容可能是:
Acquire::http::Proxy "http://192.168.2.2:7897";
Acquire::https::Proxy "http://192.168.2.2:7897";
建议删除或备份:
sudo mv /etc/apt/apt.conf.d/80proxy ~/80proxy.bak
然后更新:
sudo apt clean
sudo apt update
如果输出包含:
Hit: https://mirrors.tuna.tsinghua.edu.cn/ubuntu noble InRelease
说明 Ubuntu 软件源可以直接访问。
为什么清华源不需要代理
APT 下载链路应为:
Ubuntu
│
└── 清华 TUNA Ubuntu 镜像
而不是:
Ubuntu
│
└── Mac 代理
│
└── 清华 TUNA Ubuntu 镜像
后者会增加代理压力,也可能因为 Mac 代理未启动而导致整个 apt update 失败。
四、检查并清理失效的软件源
APT 更新失败不一定是代理问题,也可能是第三方软件源失效。
查看全部第三方源:
ls -al /etc/apt/sources.list.d/
例如 OpenRGB PPA 在 Ubuntu 24.04 Noble 上可能返回:
404 Not Found
does not have a Release file
删除失效 PPA:
sudo add-apt-repository --remove ppa:thopiekar/openrgb
如果无法自动删除,可手动查找:
grep -R "thopiekar/openrgb" /etc/apt/sources.list /etc/apt/sources.list.d/
然后删除对应文件:
sudo rm /etc/apt/sources.list.d/对应文件名.list
再次运行:
sudo apt update
五、临时开启当前终端代理
只希望当前终端中的 curl、wget、安装脚本等走代理时,可以执行:
export http_proxy=http://192.168.2.2:7897
export https_proxy=http://192.168.2.2:7897
export HTTP_PROXY=http://192.168.2.2:7897
export HTTPS_PROXY=http://192.168.2.2:7897
设置不代理地址:
export no_proxy="localhost,127.0.0.1,::1,192.168.2.0/24"
export NO_PROXY="$no_proxy"
检查:
env | grep -i proxy
关闭当前终端代理:
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
unset no_proxy NO_PROXY
这种方式只影响当前 Shell,关闭终端后自动失效。
六、在 Bash 中创建通用代理开关
编辑:
nano ~/.bashrc
加入:
proxy_on() {
export http_proxy="http://192.168.2.2:7897"
export https_proxy="http://192.168.2.2:7897"
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
export no_proxy="localhost,127.0.0.1,::1,192.168.2.0/24"
export NO_PROXY="$no_proxy"
echo "Proxy ON: $http_proxy"
}
proxy_off() {
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
unset no_proxy NO_PROXY
echo "Proxy OFF"
}
proxy_status() {
env | grep -i proxy || echo "No proxy variables are active"
}
重新加载:
source ~/.bashrc
以后可以直接使用:
proxy_on
proxy_status
proxy_off
七、Git HTTPS 代理快捷开关
Git 的 http.proxy 只对 HTTPS 仓库有效,例如:
https://github.com/user/repository.git
它不会影响 SSH 地址:
git@github.com:user/repository.git
在 ~/.bashrc 中加入:
gpon() {
git config --global http.proxy "http://192.168.2.2:7897"
git config --global https.proxy "http://192.168.2.2:7897"
echo "Git HTTPS proxy ON"
git config --global --get http.proxy
}
gpoff() {
git config --global --unset-all http.proxy 2>/dev/null || true
git config --global --unset-all https.proxy 2>/dev/null || true
echo "Git HTTPS proxy OFF"
}
gpstatus() {
echo "http.proxy = $(git config --global --get http.proxy || echo '<unset>')"
echo "https.proxy = $(git config --global --get https.proxy || echo '<unset>')"
}
加载配置:
source ~/.bashrc
使用:
gpon
gpstatus
gpoff
单次 Git 命令使用代理
不修改全局配置:
git -c http.proxy=http://192.168.2.2:7897 -c https.proxy=http://192.168.2.2:7897 clone https://github.com/user/repository.git
八、Docker Daemon 代理
Docker 拉取以下镜像时通常需要代理:
docker.ioghcr.io- NVIDIA Container Toolkit 相关资源
- AI-Dock、Open WebUI、ComfyUI 镜像
创建 systemd 配置目录:
sudo mkdir -p /etc/systemd/system/docker.service.d
创建配置:
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
写入:
[Service]
Environment="HTTP_PROXY=http://192.168.2.2:7897"
Environment="HTTPS_PROXY=http://192.168.2.2:7897"
Environment="NO_PROXY=localhost,127.0.0.1,::1,192.168.2.0/24"
重新加载并重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
检查:
systemctl show docker --property=Environment
测试:
docker pull hello-world
关闭 Docker 代理
sudo rm /etc/systemd/system/docker.service.d/http-proxy.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
九、Docker Compose 容器内部代理
Docker Daemon 代理只负责拉取镜像,不一定自动传入容器。
ComfyUI、Open WebUI 等容器内部要访问 GitHub、Hugging Face 或 PyPI时,可在 docker-compose.yml 中加入:
services:
comfyui:
environment:
HTTP_PROXY: http://192.168.2.2:7897
HTTPS_PROXY: http://192.168.2.2:7897
http_proxy: http://192.168.2.2:7897
https_proxy: http://192.168.2.2:7897
NO_PROXY: localhost,127.0.0.1,::1,192.168.2.0/24
no_proxy: localhost,127.0.0.1,::1,192.168.2.0/24
更新容器:
docker compose up -d --force-recreate
检查容器环境:
docker exec comfyui env | grep -i proxy
十、pip 代理
可以使用单次代理:
pip install requests --proxy http://192.168.2.2:7897
也可以配置用户级代理:
mkdir -p ~/.config/pip
nano ~/.config/pip/pip.conf
写入:
[global]
proxy = http://192.168.2.2:7897
timeout = 120
查看配置:
pip config list
删除代理:
rm ~/.config/pip/pip.conf
如果主要安装常见 Python 包,也可以考虑配置国内 PyPI 镜像,而不是长期使用代理。
十一、Conda 代理
开启:
conda config --set proxy_servers.http http://192.168.2.2:7897
conda config --set proxy_servers.https http://192.168.2.2:7897
查看:
conda config --show proxy_servers
关闭:
conda config --remove-key proxy_servers
十二、Hugging Face 和模型下载
当前终端临时开启代理:
proxy_on
然后使用:
huggingface-cli download 作者名/模型名
或:
wget https://huggingface.co/...
下载结束后关闭:
proxy_off
对于 ComfyUI Manager 或容器内部模型下载,应在 Compose 中配置容器环境变量。
十三、NodeSource 安装脚本
NodeSource 安装命令:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
其中:
curl是否走代理取决于当前终端环境变量sudo -E会保留当前代理变量- 脚本内部还会执行
apt update
由于 APT 已使用国内镜像,建议先确保第三方源没有错误,再运行脚本。
操作流程:
sudo apt update
proxy_on
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
proxy_off
sudo apt install -y nodejs
如果 apt update 因失效 PPA 中断,应先删除失效软件源。
十四、推荐的最终代理策略
| 工具或流量 | 建议 |
|---|---|
| Ubuntu 官方 APT | 清华镜像直连 |
| 国内软件源 | 直连 |
| Git HTTPS | 按需开启 |
| GitHub SSH | 使用 SSH Key,必要时单独配置 SSH 代理 |
| Docker 拉镜像 | Docker Daemon 代理 |
| ComfyUI 容器联网 | Compose 环境变量 |
| pip | 单次代理或国内镜像 |
| Conda | 按需配置 |
| Hugging Face | 临时代理 |
| NAS、SSH、局域网服务 | 加入 NO_PROXY |
这类分层配置比把代理永久写入 /etc/environment 更稳定,也更容易排查问题。