wget + nginx + docker快速做一个镜像站

最近在写一个开源的基于反向代理技术实现的跨平台的远程桌面,决定基于Termux APP项目实现安卓端,需要在Termux首次启动后安装openssh,为了避免包源那一天没发用了(可能我的担心是多余的),于是决定自己做一个简单的镜像站点。

我首先考虑使用cdn回源的方式实现,但是使用cdn会带来一些额外的成本,了解到wget工具可以快速下载一个站点,于是我决定通过定时wget+nginx+docker方式实现镜像站点。

创建编排文件/data/docker/termux-mirrors/docker-compose.yml

web:
  image: nginx:1.13.12
  environment:
    - VIRTUAL_HOST=termux-mirrors.itmx.xyz
  expose:
    - "80"
  volumes:
    - ./html:/usr/share/nginx/html:ro
    - ./nginx.conf:/etc/nginx/nginx.conf

cron:
  image: alpine
  entrypoint: | bash -c 'bash -s <<EOF trap "break;exit" SIGHUP SIGINT SIGTERM while /bin/true; do cd /html wget -r -N http://termux.net/ sleep 24h done EOF'
  restart: always
  volumes:
    - ./html:/usr/share/nginx/html

跑起来并显示日志:

docker-compose up -d && docker-compose logs -f

等日志跑完后,在浏览器中输入绑定域名即可看到与源站一摸一样的页面,完美

wget常用参数如下

GNU Wget,一个非交谈式的网路抓档工具.

用法: wget [选项]… [URL]…  
 命令的引数使用长项目与短项目相同.

启动:  
 -V, –version显示Wget的版本并且离开.  
 -h, –help显示这个说明档.  
 -b, -background在启动之後跳到背景去.  
 -e, -execute=COMMAND执行一个`.wgetrc’里面的COMMAND指令.

纪录档与输入的档案:
 -o, –output-file=FILE纪录讯息到FILE去.  
 -a, -append-output=FILE增加讯息到FILE去.  
 -d, –debug显示除错的输出.  
 -q, –quiet安静模式(不输入任何讯息).  
 -v, –verbose冗长模式(这是内定值).  
 -nv, –non-verbose关闭verboseness,但不是安静模式.
 -i, –input-file=FILE从FILE读取URL.
 -F, –force-html把输入的档案当作HTML.

下载:  
 -t, –tries=NUMBER设定重复尝试NUMBER次(0是无限制).  
 -O –output-document=FILE把文件写到FILE里.  
 -nc, –no-clobber不破坏已经存在的档案.  
 -c, –continue重新取得一个已经存在的档案.  
 –dot-style=STYLE设定取回状况的显示风格.  
 -N, –timestamping不取回比本地旧的档案.  
 -S, –server-response显示伺服器回应状况.  
 –spider不下载任何东西.  
 -T, –timeout=SECONDS设定读取时超过的时间为SECONDS秒.  
 -w, –wait=SECONDS在取回档案时等待SECONDS秒.  
 -Y, –proxy=on/off开启或关闭Proxy.  
 -Q, –quota=NUMBER设定取回档案的定额限制为NUMBER个.

目录:  
 -nd –no-directories不建立目录.  
 -x, –force-directories强制进行目录建立的工作.  
 -nH, –no-host-directories不建立主机的目录.  
 -P, –directory-prefix=PREFIX把档案存到PREFIX/…  
 –cut-dirs=NUMBER忽略NUMBER个远端的目录元件.

HTTP选项:  
 –http-user=USER设http使用者为USER.  
 –http0passwd=PASS设http使用者的密码为PASS.  
 -C, –cache=on/off提供/关闭快取伺服器资料(正常情况为提供).  
 –ignore-length忽略`Content-Length’标头栏位.  
 –proxy-user=USER设USER为Proxy使用者名称.  
 –proxy-passwd=PASS设PASS为Proxy密码.  
 -s, –save-headers储存HTTP标头成为档案.  
 -U, –user-agent=AGENT使用AGENT取代Wget/VERSION作为识别代号.

FTP选项:  
 –retr-symlinks取回FTP的象徵连结.  
 -g, –glob=on/off turn file name globbing on ot off.  
 –passive-ftp使用”passive”传输模式.

使用递回方式的取回:  
 -r, –recursive像是吸入web的取回–请小心使用!.  
 -l, –level=NUMBER递回层次的最大值(0不限制).  
 –delete-after删除下载完毕的档案.  
 -k, –convert-links改变没有关连的连结成为有关连.  
 -m, –mirror开启适合用来映射的选项.  
 -nr, –dont-remove-listing不要移除`.listing’档.

递回式作业的允许与拒绝选项:  
 -A, –accept=LIST允许的扩充项目的列表.  
 -R, –reject=LIST拒绝的扩充项目的列表.  
 -D, –domains=LIST允许的网域列表.  
 –exclude-domains=LIST拒绝的网域列表(使用逗号来分隔).  
 -L, –relative只跟随关联连结前进.  
 –follow-ftp跟随HTML文件里面的FTP连结.  
 -H, –span-hosts当开始递回时便到外面的主机.  
 -I, –include-directories=LIST允许的目录列表.  
 -X, –exclude-directories=LIST排除的目录列表.  
 -nh, –no-host-lookup不透过DNS查寻主机.  
 -np, –no-parent不追朔到起源目录.

范例一:
mirror一个网站

wget -r [www.redhat.com](http://www.redhat.com/)