Ubuntu 服务器 16/18。
服务器内部运行着很多应用程序,包括但不限于docker、npm、maven、gradle等。
我很厌倦为每个应用程序设置代理。是否可以全局设置?
注意:当我说全局时,我的意思是每个连接,包括通过docker build或run过程下载的包apt-get
、下载的工件。maven/gradle/npm
答案1
一个解决方案是在每个进程中设置环境变量。
我想这192.168.88.88:3128
是我的 squid 代理的 IP 端口。
在 ubuntu 18.04 上(我的测试机器)
你必须 :
/etc/environment
通过添加以下行进行修改:
FTP_PROXY="http://192.168.88.88:3128/"
HTTPS_PROXY="http://192.168.88.88:3128/"
HTTP_PROXY="http://192.168.88.88:3128/"
NO_PROXY="localhost,127.0.0.0/8,::1"
ftp_proxy="http://192.168.88.88:3128/"
http_proxy="http://192.168.88.88:3128/"
https_proxy="http://192.168.88.88:3128/"
no_proxy="localhost,127.0.0.0/8,::1"
- 修改
/etc/systemd/system.conf
该部分[Manager]
,添加以下一行:
DefaultEnvironment="FTP_PROXY=http://192.168.88.88:3128/" "HTTPS_PROXY=http://192.168.88.88:3128/" "HTTP_PROXY=http://192.168.88.88:3128/" "NO_PROXY=localhost,127.0.0.0/8,::1" "ftp_proxy=http://192.168.88.88:3128/" "http_proxy=http://192.168.88.88:3128/" "https_proxy=http://192.168.88.88:3128/" "no_proxy=localhost,127.0.0.0/8,::1"
您必须重新启动服务器才能重新启动进程。
您可以验证每个进程是否具有正确的设置,您可以运行此命令:
(
for PROCPID in /proc/[1-9]* ;
do
FENV=${PROCPID}/environ ;
C=$(sudo strings $FENV | grep -c -i 'proxy.*=' ) ;
PCMDL=$(sudo strings ${PROCPID}/cmdline | tr '\n' ' ') ;
PID=$(basename $PROCPID) ;
PCOMM=$(sudo strings ${PROCPID}/comm) ;
printf '%s:%s:%s:%s\n' "$C" "$PID" "$PCMDL" "$PCOMM"
done
)
此命令对当前正在运行的每个进程执行循环,并计算名称包含代理的环境变量。如果一行以开头8:
,则表示您有 8 个包含此进程的环境变量。