Build and run the message queue over Alpine

We prior stopped doing so for stability reasons, but this _should_ be tried
again.
This commit is contained in:
Luke Parker
2025-11-11 10:12:48 -05:00
parent 353683cfd2
commit a34f9f6164
6 changed files with 43 additions and 9 deletions

View File

@@ -19,6 +19,7 @@ pub fn coordinator(
let setup = mimalloc(Os::Debian).to_string() + let setup = mimalloc(Os::Debian).to_string() +
&build_serai_service( &build_serai_service(
"", "",
Os::Debian,
network.release(), network.release(),
&format!("{db} {longer_reattempts}"), &format!("{db} {longer_reattempts}"),
"serai-coordinator", "serai-coordinator",

View File

@@ -4,7 +4,13 @@ use crate::{Network, Os, mimalloc, os, build_serai_service, write_dockerfile};
pub fn ethereum_relayer(orchestration_path: &Path, network: Network) { pub fn ethereum_relayer(orchestration_path: &Path, network: Network) {
let setup = mimalloc(Os::Debian).to_string() + let setup = mimalloc(Os::Debian).to_string() +
&build_serai_service("", network.release(), network.db(), "serai-ethereum-relayer"); &build_serai_service(
"",
Os::Debian,
network.release(),
network.db(),
"serai-ethereum-relayer",
);
let env_vars = [ let env_vars = [
("DB_PATH", "/volume/ethereum-relayer-db".to_string()), ("DB_PATH", "/volume/ethereum-relayer-db".to_string()),

View File

@@ -143,12 +143,19 @@ WORKDIR /home/{user}
} }
} }
fn build_serai_service(prelude: &str, release: bool, features: &str, package: &str) -> String { fn build_serai_service(
prelude: &str,
os: Os,
release: bool,
features: &str,
package: &str,
) -> String {
let profile = if release { "release" } else { "debug" }; let profile = if release { "release" } else { "debug" };
let profile_flag = if release { "--release" } else { "" }; let profile_flag = if release { "--release" } else { "" };
format!( (match os {
r#" Os::Debian => {
r#"
FROM rust:1.91-slim-trixie AS builder FROM rust:1.91-slim-trixie AS builder
COPY --from=mimalloc-debian libmimalloc.so /usr/lib COPY --from=mimalloc-debian libmimalloc.so /usr/lib
@@ -161,7 +168,25 @@ RUN apt install -y pkg-config libclang-dev clang
# Dependencies for the Serai node # Dependencies for the Serai node
RUN apt install -y make protobuf-compiler RUN apt install -y make protobuf-compiler
"#
}
Os::Alpine => {
r#"
FROM rust:1.91-alpine AS builder
COPY --from=mimalloc-alpine libmimalloc.so /usr/lib
ENV LD_PRELOAD=libmimalloc.so
RUN apk update && apk upgrade
# Add dev dependencies
RUN apk add clang-dev
"#
}
})
.to_owned() +
&format!(
r#"
# Add the wasm toolchain # Add the wasm toolchain
RUN rustup component add rust-src RUN rustup component add rust-src
RUN rustup target add wasm32v1-none RUN rustup target add wasm32v1-none
@@ -196,7 +221,7 @@ RUN --mount=type=cache,target=/root/.cargo \
cargo build {profile_flag} --features "{features}" -p {package} && \ cargo build {profile_flag} --features "{features}" -p {package} && \
mv /serai/target/{profile}/{package} /serai/bin mv /serai/target/{profile}/{package} /serai/bin
"# "#
) )
} }
pub fn write_dockerfile(path: PathBuf, dockerfile: &str) { pub fn write_dockerfile(path: PathBuf, dockerfile: &str) {

View File

@@ -13,8 +13,8 @@ pub fn message_queue(
ethereum_key: <Ristretto as WrappedGroup>::G, ethereum_key: <Ristretto as WrappedGroup>::G,
monero_key: <Ristretto as WrappedGroup>::G, monero_key: <Ristretto as WrappedGroup>::G,
) { ) {
let setup = mimalloc(Os::Debian).to_string() + let setup = mimalloc(Os::Alpine).to_string() +
&build_serai_service("", network.release(), network.db(), "serai-message-queue"); &build_serai_service("", Os::Alpine, network.release(), network.db(), "serai-message-queue");
let env_vars = [ let env_vars = [
("COORDINATOR_KEY", hex::encode(coordinator_key.to_bytes())), ("COORDINATOR_KEY", hex::encode(coordinator_key.to_bytes())),
@@ -41,7 +41,7 @@ CMD {env_vars_str} serai-message-queue
"# "#
); );
let run = os(Os::Debian, "", "messagequeue") + &run_message_queue; let run = os(Os::Alpine, "", "messagequeue") + &run_message_queue;
let res = setup + &run; let res = setup + &run;
let mut message_queue_path = orchestration_path.to_path_buf(); let mut message_queue_path = orchestration_path.to_path_buf();

View File

@@ -28,6 +28,7 @@ RUN svm use 0.8.29
} else { } else {
"" ""
}, },
Os::Debian,
network.release(), network.release(),
&format!("binaries {} {coin}", network.db()), &format!("binaries {} {coin}", network.db()),
"serai-processor", "serai-processor",

View File

@@ -12,7 +12,8 @@ pub fn serai(
serai_key: &Zeroizing<<Ristretto as WrappedGroup>::F>, serai_key: &Zeroizing<<Ristretto as WrappedGroup>::F>,
) { ) {
// Always builds in release for performance reasons // Always builds in release for performance reasons
let setup = mimalloc(Os::Debian).to_string() + &build_serai_service("", true, "", "serai-node"); let setup =
mimalloc(Os::Debian).to_string() + &build_serai_service("", Os::Debian, true, "", "serai-node");
let env_vars = [("KEY", hex::encode(serai_key.to_repr()))]; let env_vars = [("KEY", hex::encode(serai_key.to_repr()))];
let mut env_vars_str = String::new(); let mut env_vars_str = String::new();