在
Rust
開發中,經常需要使用Cargo
從crates.io
下載依賴,而國內幾乎沒有好用的crates.io映象,大多都只對crates.io-index
和crates.io
進行了映象,而最重要的static.crates.io
卻沒有映象。迫不得已只能自己搭建。眾所周知,Cargo下載依賴,實際分為三步:
- 獲取索引(Fetch index)
- 查詢下載路徑(Redirect location)
- 下載資源(*.crate檔案)
因此,搭建crates.io映象也需要分為三個模組:
- crates.io-index
- crates.io
- static.crates.io
零、啟用nginx的快取功能
注:此處均為與搭建creates.io映象相關的配置項
http {
# 開啟全域性快取,並配置儲存路徑(/var/lib/crates.io)和大小(32g)
proxy_cache_path /var/lib/crates.io keys_zone=STATIC:100m levels=1:2 inactive=120h max_size=32g;
}
一、快取creates.io
server {
listen 7011;
location / {
proxy_pass https://crates.io;
proxy_ssl_server_name on;
proxy_buffering on;
proxy_cache STATIC;
proxy_cache_valid 301 302 307 308 72h;
proxy_cache_valid any 10s;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_redirect https://static.crates.io/ http://$host:7012/;
}
}
此處,我們將http://localhost:7011反向代理到https://crates.io,並對結果進行快取。其中狀態碼為301,302,307,308的快取72小時,其餘狀態碼快取10秒。
二、快取static.crates.io
server {
listen 7012;
location / {
proxy_pass https://static.crates.io;
proxy_ssl_server_name on;
proxy_buffering on;
proxy_cache STATIC;
proxy_cache_valid 200 72h;
proxy_cache_valid 400 502 504 10s;
proxy_cache_valid any 1m;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
此處,我們將http://localhost:7012反向代理到https://static.crates.io,並對結果進行快取。
需要注意到在 快取creates.io 部分,
proxy_redirect
引數,就是將原本重定向目標從https://static.crates.io/
修改為http://$host:7012/
三、快取creates.io-index
在前幾步中,我們已經將一個creates.io
映象的內容部分搭建完畢,最後就是索引,眾所周知,crates.io
是使用git倉庫 https://github.com/rust-lang/crates.io-index.git 作為官方索引的,因此我們只需要將這個倉庫clone到本地
cd /home/ # 此處將索引clone到/home目錄下
git clone https://github.com/rust-lang/crates.io-index.git
然後修改/home/crates.io-index/config.json
,將https://crates.io
修改為我們剛剛的代理地址http://localhost:7011
,除了lo地址也可以用本機的其他ip地址。
sed -i 's+https://crates.io+http://localhost:7011+g' /home/crates.io-index/config.json
最後依然是nginx配置:
server {
listen 7010;
location /crates.io-index/ {
root /home;
}
}
以上,一個映象源就配置完成啦~~~
四、在開發環境配置映象源
修改HOME目錄下的.cargo/config.toml檔案(也可以是不帶字尾名的config檔案)如果沒有就新建一個。
Linux/Unix系統為
$HOME/.carog/config.toml
Windows系統為$USERPROFILE/.carog/config.toml
內容為:
[source.crates-io]
replace-with = 'local'
[source.local]
registry = "sparse+http://localhost:7010/crates.io-index/"
五、寫在最後
目前能夠找到的搭建creates.io映象源的文章,全部都是使用基於git over https
的傳統方式,本篇文章則是採用最新的sparse
稀疏索引方式,大幅加快獲取包的速度,搭建過程更加便捷。
另外,對於索引的更新,可以透過shell指令碼+crontab定時任務來完成自動更新:
#!/usr/bin/sh
cd /home/crates.io-index/
git pull
儲存為/home/crates.io-index/update-index.sh
,並新增執行許可權:
chmod 755 /home/crates.io-index/update-index.sh
新增定時任務:
# crontab -e
0 * * * * /home/crates.io-index/update-index.sh > /home/crates.io-index/update-index.log 2>&1 &