turso Docker & Self-Hosted Deployment

GitHub

A SQL database in Rust: SQLite-compatible, now also speaking Postgres (experimental). The LLVM of databases.

24,821 stars Rust Rust 1 file ยท ~23,814 tokens #database#embedded-database#sql#sqlite3#webassembly
1. Pull Image (DOCKERHUB) docker pull tursodatabase/turso:latest
2. Docker Run (1-Click Launch) docker run -d --name turso -p 8080:8080 --restart always tursodatabase/turso:latest
3. Podman Run podman run -d --name turso -p 8080:8080 --restart always tursodatabase/turso:latest
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/tursodatabase/turso:latest
5. ORAS Pull (OCI Artifact) oras pull tursodatabase/turso:latest
Dockerfile.antithesis
FROM lukemathwalker/cargo-chef:0.1.72-rust-1.88.0-slim-bookworm AS chef
RUN apt update \
    && apt install -y git libssl-dev pkg-config\
    && apt clean \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /app

#
# Cache dependencies
#

FROM chef AS planner
RUN --mount=type=bind,source=.,target=/app,ro \
    cargo chef prepare --bin turso_stress --recipe-path /tmp/recipe.json

#
# Build the project.
#

FROM chef AS builder

ARG antithesis=true

RUN apt-get update && apt-get install -y pip && rm -rf /var/lib/apt/lists/*
RUN pip install --break-system-packages maturin

# Antithesis instrumentation library
ADD https://antithesis.com/assets/instrumentation/libvoidstar.so /opt/antithesis/libvoidstar.so

COPY --from=planner /tmp/recipe.json recipe.json
RUN cargo chef cook --bin turso_stress --release --recipe-path recipe.json
COPY . .

# Remove cdylib and staticlib from this line: `crate-type = ["lib", "cdylib", "staticlib"]`
# This is because somehow we lose llvm sanitizer coverage if the crate is not just a lib.
RUN for f in sdk-kit/Cargo.toml sync/sdk-kit/Cargo.toml; do \
        grep -qF 'crate-type = ["lib", "cdylib", "staticlib"]' "$f" \
        || { echo "ERROR: expected crate-type not found in $f"; exit 1; }; \
    done \
    && sed -i 's/crate-type = \["lib", "cdylib", "staticlib"\]/crate-type = ["lib"]/' \
        sdk-kit/Cargo.toml sync/sdk-kit/Cargo.toml

RUN if [ "$antithesis" = "true" ]; then \
        cp /opt/antithesis/libvoidstar.so /usr/lib/libvoidstar.so && \
        export RUSTFLAGS="--cfg=tokio_unstable --cfg=antithesis -Ccodegen-units=1 -Cpasses=sancov-module -Cllvm-args=-sanitizer-coverage-level=3 -Cllvm-args=-sanitizer-coverage-trace-pc-guard -Clink-args=-Wl,--build-id -L/usr/lib/ -lvoidstar" && \
        cargo build --bin turso_stress --profile antithesis; \
    else \
        cargo build --bin turso_stress --release; \
    fi

WORKDIR /app/bindings/python
RUN maturin build

WORKDIR /app/testing/unreliable-libc
RUN make

#
# The final image.
#

FROM debian:bookworm-slim AS runtime
RUN apt-get update && apt-get install -y bash curl xz-utils python3 procps sqlite3 bc binutils pip rust-gdb && rm -rf /var/lib/apt/lists/*
RUN pip install --break-system-packages antithesis

WORKDIR /app
EXPOSE 8080
COPY --from=builder /usr/lib/libvoidstar.so* /usr/lib/
COPY --from=builder /app/testing/unreliable-libc/unreliable-libc.so /usr/lib/
COPY --from=builder /app/target/antithesis/turso_stress /bin/turso_stress
COPY --from=builder /app/target/antithesis/turso_stress /symbols
COPY testing/stress/docker-entrypoint.sh /bin
RUN chmod +x /bin/docker-entrypoint.sh

COPY --from=builder /app/target/wheels/* /tmp
RUN pip install --break-system-packages /tmp/*.whl

WORKDIR /app
COPY ./testing/antithesis/bank-test/*.py /opt/antithesis/test/v1/bank-test/
COPY ./testing/antithesis/stress-composer/*.py /opt/antithesis/test/v1/stress-composer/
COPY ./testing/antithesis/multiprocess/*.py /opt/antithesis/test/v1/multiprocess/
COPY ./testing/antithesis/stress /opt/antithesis/test/v1/stress
COPY ./testing/antithesis/stress-fts /opt/antithesis/test/v1/stress-fts
COPY ./testing/antithesis/stress-fts-mvcc /opt/antithesis/test/v1/stress-fts-mvcc
COPY ./testing/antithesis/stress-memory_yield /opt/antithesis/test/v1/stress-memory_yield
COPY ./testing/antithesis/stress-io_uring /opt/antithesis/test/v1/stress-io_uring
COPY ./testing/antithesis/stress-mvcc /opt/antithesis/test/v1/stress-mvcc
COPY ./testing/antithesis/stress-io_uring-mvcc /opt/antithesis/test/v1/stress-io_uring-mvcc
COPY ./testing/antithesis/stress-unreliable /opt/antithesis/test/v1/stress-unreliable
RUN chmod 777 -R /opt/antithesis/test/v1
RUN chmod -x /opt/antithesis/test/v1/multiprocess/helper_*.py /opt/antithesis/test/v1/stress-composer/helper_utils.py /opt/antithesis/test/v1/stress-unreliable/helper_integrity_check.py

RUN mkdir /opt/antithesis/catalog
RUN ln -s /opt/antithesis/test/v1/bank-test/*.py /opt/antithesis/catalog
RUN for f in /opt/antithesis/test/v1/multiprocess/*.py; do ln -s "$f" "/opt/antithesis/catalog/multiprocess_$(basename "$f")"; done

COPY testing/stress/targeted_coverage.jso[n] /opt/antithesis/

ENV RUST_BACKTRACE=1

ENTRYPOINT ["/bin/docker-entrypoint.sh"]