利用VPS镜像一个网站并复制到本地

基本条件:本地网络会定期中断,本地网络下行带宽充裕
基本需求:镜像某个感兴趣的网站

使用wget附带-c参数以启用断点续传不太现实,虽然对于单一文件有重要意义,但是网站可能由很多小文件,即使启用断点续传也会从头开始一次检查,随着下载量的增多,检查时间可能超过网络定期中断时间。

因此考虑使用VPS使用wget镜像网站,如何从VPS上下载镜像数据就成了一个不得不考虑的问题,使用传统的pscp是难以满足需求的,因此采用rsync是一个合乎逻辑的选择。

以VPS操作系统为Ubuntu 14.04为例

  1. VPS启用rsync服务
  2. 通常情况下Ubuntu已经默认安装了rsync服务,但是默认是不启动的,需要修改/etc/default/rsync文件中的RSYNC_ENABLE改成

    RSYNC_ENABLE=true
    

    然后复制配置文件到etc目录

    cp /usr/share/doc/rsync/examples/rsyncd.conf /etc
    

    /etc/rsyncd.conf这个配置文件储存了所有的rsync的模块信息(相当于共享文件夹的配置信息),根据配置文件中已有的[ftp]模块可以构造自己的模块

    [web]
            comment = public archive
            path = /mnt/sdc #设置同步的目录
            use chroot no
            lock file = /var/lock/rsyncd
            read only = yes
            list = yes
            uid = nobody
            gid = nogroup
            auth users = root #允许访问的用户列表
            secrets file = /etc/rsyncd.secrets #用户名-密码表
            strict modes = yes
            ignore errors = no
            ignore nonreadable = yes
            transfer logging = no
            log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
            timeout = 600
            refuse options = checksum dry-run
            dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
    

    尽管很多材料指出应当将ignore errors 设置为yes,亦即忽略可能发生的错误,但个人倾向于不忽略错误。
    接着创建用户-密码表

    vim /etc/rsyncd.secrets
    

    username:password
    

    这样的格式输入就行
    然后调整权限

    chmod 0600 /etc/rsyncd.secrets 
    

    接着启动服务

    /etc/init.d/rsync start
    

    或者用

    service rsync start
    
  3. VPS的额外配置
  4. VPS提供商会提供一些额外的防火墙(通常被称为安全组),目的在于如果用户部署多个VPS可以不用费心地挨个配置iptables,但是某些VPS提供商会很热情地帮你把除了22端口以外的端口全部封上,这时候尝试rsync命令会出现令人困惑的Time out错误(因为检查iptables并没有发现封闭端口的问题),请打开入方向的873端口(如果rsync服务仍使用默认端口的话)

  5. 客户端
  6. Linux的所有发行版用rsync应该不会有什么问题
    Windows下使用rsync需要到https://www.itefix.net/cwrsync下载Free Edition的rsync,具体使用方法可以参考rsync的帮助信息

留下评论