DevDocs 如何新增一台代理 VM 接入文档下载基础设施?
【免费下载链接】devdocsAPI Documentation Browser项目地址: https://gitcode.com/GitHub_Trending/de/devdocs
DevDocs 的文档打包产物托管在downloads.devdocs.io,文档静态文件托管在documents.devdocs.io。这两个域名背后的请求都会被代理(proxy)到 S3 桶:下载请求指向devdocs-downloads.s3.amazonaws.com,文档请求指向devdocs-documents.s3.amazonaws.com。当需要为这套下载基础设施扩容时,任务就是新建一台代理 VM(proxy VM),在负载均衡器上接入它,并让两个 S3 桶放行它的 IP。以下内容整理自维护者指南 Infrastructure 一节,适用前提是你已具备 DevDocs 维护者的基础设施操作权限。
准备工作:明确两条接入路径
新建代理 VM 有两条路径,先确认你能用哪一条:
- 首选路径:从
devdocs-proxy快照创建 VM。维护者文档明确说明 "New proxy VMs should be created from thedevdocs-proxysnapshot"。走这条路径不需要手工装 nginx 和配置,跳过下两节的初始化命令即可。 - 备选路径:快照不可用时手工初始化。文档给出的条件是 "When creating a new proxy VM and the
devdocs-proxysnapshot is not available",此时按下面的步骤在新 VM 上初始化环境。
无论走哪条路径,有一个共同的硬性前置条件:在把新 VM 加入负载均衡器之前,必须先把它(及其 IP)加入两个桶的aws:SourceIp列表,否则来自这台 VM 的 S3 请求会被拒绝("their requests will be rejected")。这一步的说明见后文「加入负载均衡器之前:放行两个 S3 桶的 IP 白名单」。
快照不可用时的 VM 初始化
当devdocs-proxy快照不可用时,文档给出的初始化命令如下(基于 Ubuntu focal 环境,注意其中apt-key、rm -rf /etc/nginx/*等命令会修改系统配置和文件,只应在新 VM 上按文档执行):
# we need at least nginx 1.19.x wget https://nginx.org/keys/nginx_signing.key apt-key add nginx_signing.key echo 'deb https://nginx.org/packages/mainline/ubuntu/ focal nginx' >> /etc/apt/sources.list echo 'deb-src https://nginx.org/packages/mainline/ubuntu/ focal nginx' >> /etc/apt/sources.list apt-get -y remove nginx-common apt-get -y update apt-get -y install nginx # the config is on github rm -rf /etc/nginx/* rm -rf /etc/nginx/.* 2> /dev/null git clone https://github.com/freeCodeCamp/devdocs-nginx-config.git /etc/nginx # at this point we need to add the certs from Cloudflare and test the config nginx -t # if nginx is already running, just # ps aux | grep nginx # find the number and kill it nginx命令分四段,执行时的判断依据如下:
- 安装 nginx:文档要求 "we need at least nginx 1.19.x",因此通过 nginx 官方源安装 mainline 版本,而不是系统仓库里的旧版本;安装前会先
apt-get -y remove nginx-common移除已有的 nginx 组件。 - 拉取配置:nginx 配置文件不在本仓库里,注释 "the config is on github" 指出它维护在独立的
devdocs-nginx-config仓库中,上一步git clone会清空/etc/nginx并整体替换为该仓库内容。 nginx -t:这是文档给出的验证方式。在此之前需要先添加 Cloudflare 证书(文档原文 "at this point we need to add the certs from Cloudflare and test the config")。nginx -t通过说明配置语法没问题,此时才可以启动或重载 nginx。- 启动 nginx:如果这台 VM 上 nginx 已在运行,文档建议先
ps aux | grep nginx找到进程号并结束旧进程,再执行nginx启动。
加入负载均衡器之前:放行两个 S3 桶的 IP 白名单
VM 初始化完成(或由快照创建完成)后,不要直接把它挂到负载均衡器后面。文档给出的顺序是:先修改 S3 桶的访问策略,再动负载均衡器。
具体操作是:把新 VM 的 IP 地址加入两个桶各自的aws:SourceIp列表:
devdocs-downloads.s3.amazonaws.com对应的aws:SourceIp列表;devdocs-documents.s3.amazonaws.com对应的aws:SourceIp列表。
文档对此的说明是:"Before adding them to the load-balancer, it's necessary to add their IP addresses to the aws:SourceIp lists for both buckets, or their requests will be rejected." 也就是说,如果 VM 先上负载均衡、IP 后放行,这台 VM 转发的 S3 请求会因为来源 IP 不在白名单内被拒绝。
接入完成后的现象与判断
- 文档给出的可执行验证是初始化阶段的
nginx -t:配置测试通过是启动 nginx 的前提。 - 接入后的失败现象判断:如果 VM 已挂在负载均衡器后面但下载/文档请求被拒,对照检查点就是上述
aws:SourceIp列表——确认这台 VM 的 IP 是否已加入两个桶的列表,漏掉任何一个桶都会让对应的请求(下载类或文档类)被 S3 拒绝。 - 这条路径服务于
thor docs:download等依赖downloads.devdocs.io的命令:thor 任务 中下载打包文档时请求的就是https://downloads.devdocs.io/...tar.gz,该域名经由这些代理 VM 转到 S3。
范围说明
本文只覆盖代理 VM 的创建与接入这一条任务路径:快照创建、无快照时的 nginx 初始化、S3aws:SourceIp放行、接入负载均衡器。负载均衡器本身的具体产品、添加后端的主机名映射等细节在仓库文档中没有展开,需要依据实际基础设施环境确认;DevDocs 应用本身(Heroku 侧)的部署流程在 maintainers 指南的 Deploying DevDocs 一节 中有单独说明,与本文的代理 VM 任务相互独立。
【免费下载链接】devdocsAPI Documentation Browser项目地址: https://gitcode.com/GitHub_Trending/de/devdocs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考