Ramjet is a relay consumer that supports configurable forward and track collections, as well as record reconciliation.
event-stream
relay
firehose
riblt
atprotocol
1# Multi-stage build for ramjet
2# Builds and installs all 7 binaries from the project
3
4# Build stage - use 1.94 to match rust-version in Cargo.toml
5FROM rust:1.94-slim-bookworm AS builder
6
7# Install system dependencies needed for building
8RUN apt-get update && apt-get install -y \
9 pkg-config \
10 libssl-dev \
11 && rm -rf /var/lib/apt/lists/*
12
13# Set working directory
14WORKDIR /usr/src/app
15
16# Copy the entire project
17COPY . .
18
19# Build all binaries in release mode
20RUN cargo build --release --bins
21
22# Runtime stage - use distroless for minimal attack surface
23FROM gcr.io/distroless/cc-debian12
24
25# Create directory for binaries
26WORKDIR /usr/local/bin
27
28# Copy all built binaries from builder stage
29COPY --from=builder /usr/src/app/target/release/ramjet .
30COPY --from=builder /usr/src/app/target/release/ramjet_consumer .
31COPY --from=builder /usr/src/app/target/release/ramjet_data .
32COPY --from=builder /usr/src/app/target/release/ramjet_dictgen .
33COPY --from=builder /usr/src/app/target/release/ramjet_forecast .
34COPY --from=builder /usr/src/app/target/release/ramjet_writer .
35COPY --from=builder /usr/src/app/target/release/rjtop .
36
37# Default to the main service binary
38# Users can override with specific binary: docker run <image> ramjet_consumer --help
39# docker run <image> ramjet --help
40# docker run <image> ramjet_consumer --help
41# docker run <image> ramjet_data --help
42# docker run <image> ramjet_dictgen --help
43# docker run <image> ramjet_forecast --help
44# docker run <image> ramjet_writer --help
45# docker run <image> rjtop --help
46CMD ["ramjet", "--help"]
47
48# Add labels for documentation
49LABEL org.opencontainers.image.title="ramjet"
50LABEL org.opencontainers.image.description="ATProtocol event-stream, record, and blob service built on fjall"
51LABEL org.opencontainers.image.authors="Nick Gerakines <nick.gerakines@gmail.com>"
52LABEL org.opencontainers.image.source="https://tangled.org/ngerakines.me/ramjet"
53LABEL org.opencontainers.image.version="1.2.0"
54LABEL org.opencontainers.image.licenses="MIT"
55
56# Document available binaries
57LABEL binaries="ramjet,ramjet_consumer,ramjet_data,ramjet_dictgen,ramjet_forecast,ramjet_writer,rjtop"