Nginx搭建Crates.io Index镜像
LI Rui

目前字节推出了相应的镜像,欢迎大家使用:https://rsproxy.cn/

在VS Code中编写Rust程序的时候,Rust Analyzer经常因为更新Metadata卡住,编译时下载包的索引也会等待较长时间。后来发现是因为Rust将crates.io的包索引保存到GitHub上(https://github.com/rust-lang/crates.io-index),而国内访问速度并不理想。于是决定自己搭建镜像来优化开发体验。

在Ubuntu 20.04系统上我们安装了Nginx、Git和fcgiwrap,Nginx的部分配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80;
listen [::]:80;
server_name ...;

root /example/www;

location ~ /git(/.*) {
client_max_body_size 0;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
include fastcgi_params;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT /example/git;
fastcgi_param PATH_INFO $1;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param REMOTE_USER $remote_user;
}

access_log ...;
error_log ...;
}

这里我们将仓库同步到/example/git/crates.io-index下面,网站主页放到/example/www下。因为我们需要用Web托管,同步的命令需要加上--mirror克隆裸仓库,更新则使用fetch。

1
2
git clone --mirror https://github.com/rust-lang/crates.io-index.git
git fetch --all

假设我们的域名为example.com,访问仓库的地址为:example.com/git/crates.io-index。为了保证cargo能够从我们的镜像下载索引,需要创建配置文件到~/.cargo/config

1
2
3
4
5
[source.example]
replace-with = "example"

[source.example]
registry = "https://example.com/git/crates.io-index"

在服务器上面跑个cron定时更新即可。

  • 本文标题:Nginx搭建Crates.io Index镜像
  • 本文作者:LI Rui
  • 创建时间:2021-04-22 10:28:53
  • 本文链接:https://www.lirui.tech/post/2021/24a34f948139.html
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-SA 许可协议。转载请注明出处!