為了節省容器啟動時間,準備把 rust 寫的 api 編譯好後丟進 docker 裡,於是編譯到 target
然後 openssl 炸了,不認 libssl-dev 了,查了下要重新編譯。。。
但是,我們發現了一個神奇的 docker 鏡像https://github.com/emk/rust-musl-builder,它已經配好了 openssl 的 musl 環境
於是只要這樣:
alias rust-musl-builder='docker run --rm -it -v "$(pwd)":/home/rust/src ekidd/rust-musl-builder'
rust-musl-builder cargo build --release
就可以了
(不過好像也可以把 openssl 換成 rustls 來解決)
However, rustls 現在在大部分 Rust 生態系統中都能很好地運作,包括 reqwest、tokio、tokio-postgres、sqlx 等等。唯一還需要 libpq 和 OpenSSL 的主要項目是 Diesel。如果你不需要 diesel 或 libpq:
試著看看能否切換到 rustls,通常可以通過在 Cargo.toml 中使用功能要求你的依賴使用 rustls 而不是 OpenSSL。
如果你不需要 OpenSSL,試著使用 cross build --target=x86_64-unknown-linux-musl --release 來交叉編譯你的二進制文件以供 libmusl 使用。這樣可以支持更多平台,而且更輕鬆!