转载自github(https://github.com/aploium/zmirror


比如国内可以访问的Google镜像/中文维基镜像
这个cheng'xu自带了几个配置文件: 比如 Google镜像(含学术/其他/中文维基) twitter镜像 Youtube镜像 instagram镜像 Facebook镜像
完整列表请看zmirror自带镜像配置文件

开发者的温馨提示:
请在遵守当地相关法律法规的前提下使用本项目
本人拒绝为任何商业或非法目的提供任何技术支持
本项目仅为科研人员更方便地查询知识而创建, 请勿大范围传播

zmirror 一键部署脚本

使用zmirror快速部署镜像的脚本

如果无法部署成功, 可以尝试手动部署: 手动部署zmirror
或尝试由yumin9822提供的脚本

前置需求

  1. 一台墙外VPS, OpenVZ/Xen/KVM均可
  2. 操作系统:

    • 支持的操作系统:

      • Ubuntu 14.04/15.04(不支持HTTP2)/15.10/16.04+
      • Debian 8 (不支持HTTP/2)
      • 不支持 CentOS/RHEL/Windows/Fedora/Arch/...
        对于这些系统, 可以使用由yumin9822提供的这个脚本
    • 推荐的操作系统:

      • Ubuntu 16.04 x86_64
    • 全新(刚安装完成)的操作系统. 如果系统中有其他东西, 可能会产生冲突
    • root权限
  3. 域名

    • 每个镜像要求一个三级域名(类似于g.zmirrordemo.com这样的, 有三部分, 两个点)
    • 域名已经在DNS记录中正确指向你的VPS

    提示
    如果你没有自己的域名, 请看FAQ-我没有自己的域名

运行方法

  • 我没有SSL证书 (如果不懂, 请使用这个)

    sudo apt-get -y update && sudo apt-get -y install python3 git
    git clone https://github.com/aploium/zmirror-onekey.git --depth=1
    cd zmirror-onekey
    sudo python3 deploy.py

    然后按照脚本给予的提示继续, 过程中会自动获取SSL证书
    如果有不懂的, 可参考下面的安装视频
    如果遇到bug, 请发issues提出

  • 我已有SSL证书
    如果已有证书, 希望使用自己提供的证书, 而不是通过 let's encrypt 获取
    请将上面代码中的第四行替换成下面的样子, 在运行期间会提示你输入证书路径的:

    sudo python3 deploy.py --i-have-cert

    警告
    不支持加密的私钥, 如果私钥有密码加密, 请先解密

安装过程视频

请点击下面的图片打开
"视频"中的文字可以被选中和复制
Installation demo of zmirror-onekey

特性

  • 支持一次部署多个镜像, 支持同VPS多镜像
  • 自动安装 let's encrypt 并申请证书, 启用HTTPS
  • 自动添加 let's encrypt 的定期renew脚本到crontab
  • 启用HTTP/2 ps:Debian8和Ubuntu15.04不支持HTTP/2
  • 启用HSTS

FAQ

有没有部署完成的Demo?

当然有, 请戳 [zmirror-demo](https://github.com/aploium/zmirror#demo)  

我没有自己的域名

有一些提供免费(也没有注册门槛)域名的注册商  
比如最有名的 [.tk 域名](http://www.dot.tk/)  
可以快速注册免费的域名  

> **注意**  
> 请不要使用 .cf 和 .ga 域名, letsencrypt对它们的支持非常差, 经常出现无法下发证书的问题  
> 除非不得已, 在使用免费域名时, 请使用老牌的 .tk 域名  

安装完成后各个程序的文件夹在哪?

* *zmirror*  
    安装在 `/var/www/镜像名` 文件夹下  
    镜像名为每个镜像的名字, 比如YoutubePC就是 `/var/www/youtubePC`  
* *let's encrypt*  
    本体在: `/etc/certbot/`  
    申请到的证书位置, 请看 [certbot文档-where-are-my-certificates](https://certbot.eff.org/docs/using.html#where-are-my-certificates)
* *Apache*  
    Apache的配置文件在`/etc/apache2/`下  
    其中各个站点的配置文件在`/etc/apache2/sites-enabled/`  

    Apache日志文件在`/var/log/apache2/镜像名_后缀.log`  
    后缀为 _error 的日志文件中, 同时包含了stdout的输出(无论是否是错误), 对debug会有帮助  
    

为什么安装的是Apache, 而不是Nginx, 我可以选择吗?


因为Apache的wsgi对python更友好  
而且Nginx没有Visual Host功能  
在性能上, 由于性能瓶颈是zmirror本身, 所以Apache和Nginx之间的性能差距可以被忽略  

目前一键脚本只能安装Apache, 不支持Nginx, 也没有支持Nginx的计划, 如果需要Nginx, 请手动部署  
手动部署可以参考 [zmirror wiki](https://github.com/aploium/zmirror/wiki)  
当然, 如果你能写一份Nginx部署教程, 我会很感谢的~ :)  

安装的Apache版本?


在Ubuntu中, 使用的是 PPA:ondrej/apache2 理论上应该是最新版, 或者接近最新版(2.4.23+)  
在Debian8中, 使用系统的 apt-get 安装, 版本比较旧, 所以Debian不支持HTTP/2  

Let's encrypt 证书自动更新?

安装脚本会自动创建定期更新证书的脚本, 脚本位置为 `/etc/cron.weekly/zmirror-letsencrypt-renew.sh`  

证书有效期为什么只有90天?

主要是因为Let's encrypt认为, 证书的申请和部署可以自动化时, 90天足够了.  
具体可以看[这个官方说明](https://community.letsencrypt.org/t/pros-and-cons-of-90-day-certificate-lifetimes/4621)(可能需要自备梯子)  
本安装脚本会在linux定时任务(crontab)中加入自动续期的脚本, 不用担心证书过期  
即使自动续期脚本万一失效了, let's encrypt也会在快要过期时邮件通知你  

其他高级功能, 比如说CDN, 在哪?

这个脚本只提供最基础的部署, 高级功能需要手动配置  
请看[config_default.py](https://github.com/aploium/zmirror/blob/master/config_default.py)和[custom_func.sample.py](https://github.com/aploium/zmirror/blob/master/custom_func.sample.py)中的说明  

如果想用CDN, 可以看这个教程[使用七牛作为zmirror镜像CDN](https://github.com/aploium/zmirror/wiki/%E4%BD%BF%E7%94%A8%E4%B8%83%E7%89%9B%E4%BD%9C%E4%B8%BAzmirror%E9%95%9C%E5%83%8F%E7%9A%84CDN)  

> **警告**  
> 如果你想要修改`config_default.py`中的某项设置, 请不要直接修改  
> 而应该将它复制到`config.py`中, 然后修改`config.py`里的设置  
> `config.py`中的设置会覆盖掉`config_default.py`中的同名设置  
> 除非你是开发者, 否则无论如何都不应该修改`config_default.py`  

网速太慢?

如果你的VPS提供商允许的话, 可以试试看[net-speeder](https://github.com/snooda/net-speeder)  

或者换一个网速快的VPS, Demo站使用的VPS是[Ramnode](https://clientarea.ramnode.com/aff.php?aff=2990)  
服务器地点是LA(Los Angeles), 速度相当快.  
ps: 如果你也想试试看的话, 请点击[这个链接](https://clientarea.ramnode.com/aff.php?aff=2990)进入, 这里有我的推广小尾巴, 你买了的话我会有一丢丢(好像是10%)分成  
ramnode允许使用net-speeder  

证书获取失败


脚本使用[Let's encrypt(certbot)](https://letsencrypt.org/)来获取证书  
  
certbot 会在本地 Listen 80 或者 443 端口, 然后由远程授权服务器根据**域名的[A记录](https://support.dnspod.cn/Kb/showarticle/tsid/30/)**来**访问本机**  
当远程服务器成功连接到本机的certbot客户端后, 就会颁发证书.  
详细流程请看官方文档[How It Works](https://letsencrypt.org/how-it-works/)  

证书获取失败最有可能的原因是域名记录设置后[尚未来得及生效](https://support.dnspod.cn/Kb/showarticle/tsid/53/), 域名DNS记录的生效通常需要数分钟以上, 最长可达*72小时*  
对于这种情况, 除了等待以外是没有什么办法的.  
本脚本在默认的5次尝试失败后, 会提示是否一直尝试下去, 如果你确认DNS记录已经正常设置, 请在提示  
`max retries exceed, do you want to continue retry infinity?(Y/n)`  
时, 选择Y, 一般数分钟内就能成功.  

如果不能确定是否正常设置, 可以访问 https://www.whatsmydns.net/ , 这个网站可以在全球范围内查询A记录  
如果查询出的A记录与你的IP相同, 就表示设置成功了, 此时只需要让脚本自行尝试即可  
如果此时仍然多次尝试失败, 请看下面的`手动运行lets encrypt获取证书`部分  

> **手动运行lets encrypt获取证书**  
> 如果能确认DNS记录已经设置正常, 但是仍然无法获取证书, 请尝试手动运行letsencrypt获取证书:
>   
> ```bash
> sudo service apache2 stop
> sudo /etc/certbot/certbot-auto certonly --standalone -d "你的域名1"
> sudo /etc/certbot/certbot-auto certonly --standalone -d "你的域名2"
> sudo service apache2 start
> ```
>   
> 或者(如果上面的仍然失败)  
> ```bash
> sudo apt-get install letsencrypt
> sudo service apache2 stop
> sudo letsencrypt certonly --standalone -d "你的域名1"
> sudo letsencrypt certonly --standalone -d "你的域名2"
> sudo service apache2 start
> ```
>
> 并在手动获取证书成功后再次运行本脚本  

更新zmirror

请运行以下代码(假设`zmirror-onekey`是本脚本文件夹):  
cd zmirror-onekey
git pull
sudo python3 deploy.py --upgrade-only
注意: 更新zmirror以后会自动重启Apache  
Last modification:January 18th, 2020 at 05:36 pm