mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-02-21 10:27:26 +08:00
fix: comments
This commit is contained in:
parent
1fbab4a05f
commit
57fea0f0a1
@ -1,189 +0,0 @@
|
||||
# syntax=docker.io/docker/dockerfile:1.7-labs
|
||||
FROM --platform=${TARGETPLATFORM} ubuntu:24.04 AS base
|
||||
|
||||
ENV PATH="${PATH}:/root/.cargo/bin/"
|
||||
|
||||
ARG TARGETOS
|
||||
ARG TARGETARCH
|
||||
|
||||
# Install GMP 6.2 (6.3 which MacOS is using only available on Debian unstable)
|
||||
RUN apt-get update && apt-get install -y \
|
||||
build-essential \
|
||||
curl \
|
||||
git \
|
||||
cmake \
|
||||
libgmp-dev \
|
||||
libmpfr-dev \
|
||||
libmpfr6 \
|
||||
wget \
|
||||
m4 \
|
||||
pkg-config \
|
||||
gcc \
|
||||
g++ \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
libtool \
|
||||
libssl-dev \
|
||||
python3 \
|
||||
python-is-python3 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG GO_VERSION=1.23.5
|
||||
RUN apt update && apt install -y wget && \
|
||||
ARCH=$(dpkg --print-architecture) && \
|
||||
case ${ARCH} in \
|
||||
amd64) GOARCH=amd64 ;; \
|
||||
arm64) GOARCH=arm64 ;; \
|
||||
*) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \
|
||||
esac && \
|
||||
wget https://go.dev/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm -rf /usr/local/go && \
|
||||
tar -C /usr/local -xzf go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm go${GO_VERSION}.linux-${GOARCH}.tar.gz
|
||||
|
||||
ENV PATH=$PATH:/usr/local/go/bin
|
||||
|
||||
RUN git clone https://github.com/flintlib/flint.git && \
|
||||
cd flint && \
|
||||
git checkout flint-3.0 && \
|
||||
./bootstrap.sh && \
|
||||
./configure \
|
||||
--prefix=/usr/local \
|
||||
--with-gmp=/usr/local \
|
||||
--with-mpfr=/usr/local \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
CFLAGS="-O3" && \
|
||||
make && \
|
||||
make install && \
|
||||
cd .. && \
|
||||
rm -rf flint
|
||||
|
||||
COPY docker/rustup-init.sh /opt/rustup-init.sh
|
||||
|
||||
RUN /opt/rustup-init.sh -y --profile minimal
|
||||
|
||||
# Install uniffi-bindgen-go
|
||||
RUN cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0
|
||||
|
||||
FROM base AS build
|
||||
|
||||
ENV GOEXPERIMENT=arenas
|
||||
ENV QUILIBRIUM_SIGNATURE_CHECK=false
|
||||
|
||||
# Install grpcurl before building the node and client
|
||||
# as to avoid needing to redo it on rebuilds
|
||||
RUN go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
|
||||
|
||||
WORKDIR /opt/ceremonyclient
|
||||
|
||||
# Copy everything except node and client so as to avoid
|
||||
# invalidating the cache at this point on client or node rebuilds
|
||||
|
||||
COPY --exclude=client \
|
||||
--exclude=conntest \
|
||||
--exclude=sidecar . .
|
||||
|
||||
RUN bash install-emp.sh
|
||||
|
||||
|
||||
RUN cd emp-tool && sed -i 's/add_library(${NAME} SHARED ${sources})/add_library(${NAME} STATIC ${sources})/g' CMakeLists.txt && mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local && cd .. && make && make install && cd ..
|
||||
|
||||
RUN cd emp-ot && mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local && cd .. && make && make install && cd ..
|
||||
|
||||
RUN go mod download
|
||||
|
||||
## Generate Rust bindings for channel
|
||||
WORKDIR /opt/ceremonyclient/channel
|
||||
|
||||
RUN go mod download
|
||||
|
||||
RUN ./generate.sh
|
||||
|
||||
|
||||
## Generate Rust bindings for VDF
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN go mod download
|
||||
|
||||
RUN ./generate.sh
|
||||
|
||||
|
||||
## Generate Rust bindings for Ferret
|
||||
WORKDIR /opt/ceremonyclient/ferret
|
||||
|
||||
RUN go mod download
|
||||
|
||||
RUN ./generate.sh
|
||||
|
||||
## Generate Rust bindings for BLS48581
|
||||
WORKDIR /opt/ceremonyclient/bls48581
|
||||
|
||||
RUN go mod download
|
||||
|
||||
RUN ./generate.sh
|
||||
|
||||
## Generate Rust bindings for RPM
|
||||
WORKDIR /opt/ceremonyclient/rpm
|
||||
|
||||
RUN go mod download
|
||||
|
||||
RUN ./generate.sh
|
||||
|
||||
## Generate Rust bindings for VerEnc
|
||||
WORKDIR /opt/ceremonyclient/verenc
|
||||
|
||||
RUN go mod download
|
||||
|
||||
RUN ./generate.sh
|
||||
|
||||
## Generate Rust bindings for Bulletproofs
|
||||
WORKDIR /opt/ceremonyclient/bulletproofs
|
||||
|
||||
RUN go mod download
|
||||
|
||||
RUN ./generate.sh
|
||||
|
||||
FROM build AS build-conntest
|
||||
|
||||
# Build and install conntest
|
||||
COPY ./conntest /opt/ceremonyclient/conntest
|
||||
WORKDIR /opt/ceremonyclient/conntest
|
||||
|
||||
ENV GOPROXY=direct
|
||||
RUN ./build.sh && cp conntest /usr/bin
|
||||
|
||||
# Allows exporting single binary
|
||||
FROM scratch AS conntest
|
||||
COPY --from=build-conntest /usr/bin/conntest /conntest
|
||||
ENTRYPOINT [ "/conntest" ]
|
||||
|
||||
FROM ubuntu:24.04
|
||||
|
||||
RUN apt-get update && apt-get install libflint-dev -y
|
||||
|
||||
ARG NODE_VERSION
|
||||
ARG GIT_REPO
|
||||
ARG GIT_BRANCH
|
||||
ARG GIT_COMMIT
|
||||
|
||||
ENV GOEXPERIMENT=arenas
|
||||
|
||||
LABEL org.opencontainers.image.title="Quilibrium Network Node connection test"
|
||||
LABEL org.opencontainers.image.description="Quilibrium is a decentralized alternative to platform as a service providers."
|
||||
LABEL org.opencontainers.image.version=$NODE_VERSION
|
||||
LABEL org.opencontainers.image.vendor=Quilibrium
|
||||
LABEL org.opencontainers.image.url=https://quilibrium.com/
|
||||
LABEL org.opencontainers.image.documentation=https://quilibrium.com/docs
|
||||
LABEL org.opencontainers.image.source=$GIT_REPO
|
||||
LABEL org.opencontainers.image.ref.name=$GIT_BRANCH
|
||||
LABEL org.opencontainers.image.revision=$GIT_COMMIT
|
||||
|
||||
RUN apt-get update && apt-get install -y ca-certificates
|
||||
|
||||
COPY --from=build-conntest /usr/bin/conntest /usr/local/bin
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
ENTRYPOINT ["conntest"]
|
||||
@ -1,141 +0,0 @@
|
||||
# syntax=docker.io/docker/dockerfile:1.7-labs
|
||||
FROM --platform=${TARGETPLATFORM} ubuntu:24.04 AS base
|
||||
|
||||
ENV PATH="${PATH}:/root/.cargo/bin/"
|
||||
|
||||
ARG TARGETOS
|
||||
ARG TARGETARCH
|
||||
|
||||
# Install GMP 6.2 (6.3 which MacOS is using only available on Debian unstable)
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && apt-get install -y \
|
||||
build-essential \
|
||||
curl \
|
||||
git \
|
||||
cmake \
|
||||
libgmp-dev \
|
||||
libmpfr-dev \
|
||||
libmpfr6 \
|
||||
wget \
|
||||
m4 \
|
||||
pkg-config \
|
||||
gcc \
|
||||
g++ \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
libtool \
|
||||
libssl-dev \
|
||||
python3 \
|
||||
python-is-python3 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG GO_VERSION=1.23.5
|
||||
RUN --mount=type=cache,target=/usr/local,id=usr-local-${TARGETOS}-${TARGETARCH} \
|
||||
apt update && apt install -y wget && \
|
||||
ARCH=$(dpkg --print-architecture) && \
|
||||
case ${ARCH} in \
|
||||
amd64) GOARCH=amd64 ;; \
|
||||
arm64) GOARCH=arm64 ;; \
|
||||
*) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \
|
||||
esac && \
|
||||
wget https://go.dev/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm -rf /usr/local/go && \
|
||||
tar -C /usr/local -xzf go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm go${GO_VERSION}.linux-${GOARCH}.tar.gz
|
||||
|
||||
ENV PATH=$PATH:/usr/local/go/bin
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local,id=usr-local-${TARGETOS}-${TARGETARCH} \
|
||||
git clone https://github.com/flintlib/flint.git && \
|
||||
cd flint && \
|
||||
git checkout flint-3.0 && \
|
||||
./bootstrap.sh && \
|
||||
./configure \
|
||||
--prefix=/usr/local \
|
||||
--with-gmp=/usr/local \
|
||||
--with-mpfr=/usr/local \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
CFLAGS="-O3" && \
|
||||
make && \
|
||||
make install && \
|
||||
cd .. && \
|
||||
rm -rf flint
|
||||
|
||||
COPY docker/rustup-init.sh /opt/rustup-init.sh
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH} \
|
||||
/opt/rustup-init.sh -y --profile minimal
|
||||
|
||||
# Install uniffi-bindgen-go
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH} \
|
||||
cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0
|
||||
|
||||
FROM base AS build
|
||||
|
||||
ENV QUILIBRIUM_SIGNATURE_CHECK=false
|
||||
|
||||
WORKDIR /opt/ceremonyclient
|
||||
|
||||
# Copy everything except node and client so as to avoid
|
||||
# invalidating the cache at this point on client or node rebuilds
|
||||
|
||||
COPY --exclude=node \
|
||||
--exclude=client \
|
||||
--exclude=sidecar . .
|
||||
|
||||
## Generate Rust bindings for VDF
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH} \
|
||||
go mod download
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH} \
|
||||
./generate.sh
|
||||
|
||||
|
||||
FROM build AS build-node
|
||||
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH} \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH} \
|
||||
./build-test.sh -o vdf-test perftest/main.go && cp vdf-test /usr/bin
|
||||
|
||||
# Allows exporting single binary
|
||||
FROM scratch AS vdf
|
||||
COPY --from=build-node /usr/bin/vdf-test /vdf-test
|
||||
ENTRYPOINT [ "/vdf-test" ]
|
||||
|
||||
LABEL org.opencontainers.image.title="Quilibrium Network Node"
|
||||
LABEL org.opencontainers.image.description="Quilibrium is a decentralized alternative to platform as a service providers."
|
||||
LABEL org.opencontainers.image.version=$NODE_VERSION
|
||||
LABEL org.opencontainers.image.vendor=Quilibrium
|
||||
LABEL org.opencontainers.image.url=https://quilibrium.com/
|
||||
LABEL org.opencontainers.image.documentation=https://quilibrium.com/docs
|
||||
LABEL org.opencontainers.image.source=$GIT_REPO
|
||||
LABEL org.opencontainers.image.ref.name=$GIT_BRANCH
|
||||
LABEL org.opencontainers.image.revision=$GIT_COMMIT
|
||||
|
||||
COPY --from=build-node /usr/bin/vdf-test /usr/local/vdf-test
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
ENTRYPOINT ["vdf-test"]
|
||||
@ -1,143 +0,0 @@
|
||||
# syntax=docker.io/docker/dockerfile:1.7-labs
|
||||
FROM --platform=${TARGETPLATFORM} ubuntu:24.04 AS base-avx512
|
||||
|
||||
ENV PATH="${PATH}:/root/.cargo/bin/"
|
||||
|
||||
ARG TARGETOS
|
||||
ARG TARGETARCH
|
||||
|
||||
# Install GMP 6.2 (6.3 which MacOS is using only available on Debian unstable)
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && apt-get install -y \
|
||||
build-essential \
|
||||
curl \
|
||||
git \
|
||||
cmake \
|
||||
libgmp-dev \
|
||||
libmpfr-dev \
|
||||
libmpfr6 \
|
||||
wget \
|
||||
m4 \
|
||||
pkg-config \
|
||||
gcc \
|
||||
g++ \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
libtool \
|
||||
libssl-dev \
|
||||
python3 \
|
||||
python-is-python3 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG GO_VERSION=1.23.5
|
||||
RUN --mount=type=cache,target=/usr/local,id=usr-local-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
apt update && apt install -y wget && \
|
||||
ARCH=$(dpkg --print-architecture) && \
|
||||
case ${ARCH} in \
|
||||
amd64) GOARCH=amd64 ;; \
|
||||
arm64) GOARCH=arm64 ;; \
|
||||
*) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \
|
||||
esac && \
|
||||
wget https://go.dev/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm -rf /usr/local/go && \
|
||||
tar -C /usr/local -xzf go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm go${GO_VERSION}.linux-${GOARCH}.tar.gz
|
||||
|
||||
ENV PATH=$PATH:/usr/local/go/bin
|
||||
|
||||
# Build FLINT from source with AVX-512
|
||||
RUN --mount=type=cache,target=/usr/local,id=usr-local-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
git clone https://github.com/flintlib/flint.git && \
|
||||
cd flint && \
|
||||
git checkout flint-3.0 && \
|
||||
./bootstrap.sh && \
|
||||
./configure \
|
||||
--prefix=/usr/local \
|
||||
--with-gmp=/usr/local \
|
||||
--with-mpfr=/usr/local \
|
||||
--enable-avx512 \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
CFLAGS="-march=skylake-avx512 -mtune=skylake-avx512 -O3" && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
cd .. && \
|
||||
rm -rf flint
|
||||
|
||||
COPY docker/rustup-init.sh /opt/rustup-init.sh
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
/opt/rustup-init.sh -y --profile minimal
|
||||
|
||||
# Install uniffi-bindgen-go
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0
|
||||
|
||||
FROM base-avx512 AS build-avx512
|
||||
|
||||
ENV QUILIBRIUM_SIGNATURE_CHECK=false
|
||||
|
||||
WORKDIR /opt/ceremonyclient
|
||||
|
||||
# Copy everything except node and client so as to avoid
|
||||
# invalidating the cache at this point on client or node rebuilds
|
||||
|
||||
COPY --exclude=node \
|
||||
--exclude=client \
|
||||
--exclude=sidecar . .
|
||||
|
||||
## Generate Rust bindings for VDF
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
go mod download
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
./generate.sh
|
||||
|
||||
|
||||
FROM build-avx512 AS build-node-avx512
|
||||
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-avx512 \
|
||||
./build-test.sh -o vdf-test perftest/main.go && cp vdf-test /usr/bin
|
||||
|
||||
# Allows exporting single binary
|
||||
FROM scratch AS vdf-avx512
|
||||
COPY --from=build-node-avx512 /usr/bin/vdf-test /vdf-test
|
||||
ENTRYPOINT [ "/vdf-test" ]
|
||||
|
||||
LABEL org.opencontainers.image.title="Quilibrium Network Node"
|
||||
LABEL org.opencontainers.image.description="Quilibrium is a decentralized alternative to platform as a service providers."
|
||||
LABEL org.opencontainers.image.version=$NODE_VERSION
|
||||
LABEL org.opencontainers.image.vendor=Quilibrium
|
||||
LABEL org.opencontainers.image.url=https://quilibrium.com/
|
||||
LABEL org.opencontainers.image.documentation=https://quilibrium.com/docs
|
||||
LABEL org.opencontainers.image.source=$GIT_REPO
|
||||
LABEL org.opencontainers.image.ref.name=$GIT_BRANCH
|
||||
LABEL org.opencontainers.image.revision=$GIT_COMMIT
|
||||
|
||||
COPY --from=build-node-avx512 /usr/bin/vdf-test /usr/local/vdf-test
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
ENTRYPOINT ["vdf-test"]
|
||||
@ -1,143 +0,0 @@
|
||||
# syntax=docker.io/docker/dockerfile:1.7-labs
|
||||
FROM --platform=${TARGETPLATFORM} ubuntu:24.04 AS base-zen3
|
||||
|
||||
ENV PATH="${PATH}:/root/.cargo/bin/"
|
||||
|
||||
ARG TARGETOS
|
||||
ARG TARGETARCH
|
||||
|
||||
# Install GMP 6.2 (6.3 which MacOS is using only available on Debian unstable)
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && apt-get install -y \
|
||||
build-essential \
|
||||
curl \
|
||||
git \
|
||||
cmake \
|
||||
libgmp-dev \
|
||||
libmpfr-dev \
|
||||
libmpfr6 \
|
||||
wget \
|
||||
m4 \
|
||||
pkg-config \
|
||||
gcc \
|
||||
g++ \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
libtool \
|
||||
libssl-dev \
|
||||
python3 \
|
||||
python-is-python3 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG GO_VERSION=1.23.5
|
||||
RUN --mount=type=cache,target=/usr/local,id=usr-local-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
apt update && apt install -y wget && \
|
||||
ARCH=$(dpkg --print-architecture) && \
|
||||
case ${ARCH} in \
|
||||
amd64) GOARCH=amd64 ;; \
|
||||
arm64) GOARCH=arm64 ;; \
|
||||
*) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \
|
||||
esac && \
|
||||
wget https://go.dev/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm -rf /usr/local/go && \
|
||||
tar -C /usr/local -xzf go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm go${GO_VERSION}.linux-${GOARCH}.tar.gz
|
||||
|
||||
ENV PATH=$PATH:/usr/local/go/bin
|
||||
|
||||
# Build FLINT from source with AVX-512
|
||||
RUN --mount=type=cache,target=/usr/local,id=usr-local-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
git clone https://github.com/flintlib/flint.git && \
|
||||
cd flint && \
|
||||
git checkout flint-3.0 && \
|
||||
./bootstrap.sh && \
|
||||
./configure \
|
||||
--prefix=/usr/local \
|
||||
--with-gmp=/usr/local \
|
||||
--with-mpfr=/usr/local \
|
||||
--enable-avx2 \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
CFLAGS="-march=znver3 -mtune=znver3 -O3" && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
cd .. && \
|
||||
rm -rf flint
|
||||
|
||||
COPY docker/rustup-init.sh /opt/rustup-init.sh
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
/opt/rustup-init.sh -y --profile minimal
|
||||
|
||||
# Install uniffi-bindgen-go
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0
|
||||
|
||||
FROM base-zen3 AS build-zen3
|
||||
|
||||
ENV QUILIBRIUM_SIGNATURE_CHECK=false
|
||||
|
||||
WORKDIR /opt/ceremonyclient
|
||||
|
||||
# Copy everything except node and client so as to avoid
|
||||
# invalidating the cache at this point on client or node rebuilds
|
||||
|
||||
COPY --exclude=node \
|
||||
--exclude=client \
|
||||
--exclude=sidecar . .
|
||||
|
||||
## Generate Rust bindings for VDF
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
go mod download
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
./generate.sh
|
||||
|
||||
|
||||
FROM build-zen3 AS build-node-zen3
|
||||
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-zen3 \
|
||||
./build-test.sh -o vdf-test perftest/main.go && cp vdf-test /usr/bin
|
||||
|
||||
# Allows exporting single binary
|
||||
FROM scratch AS vdf-zen3
|
||||
COPY --from=build-node-zen3 /usr/bin/vdf-test /vdf-test
|
||||
ENTRYPOINT [ "/vdf-test" ]
|
||||
|
||||
LABEL org.opencontainers.image.title="Quilibrium Network Node"
|
||||
LABEL org.opencontainers.image.description="Quilibrium is a decentralized alternative to platform as a service providers."
|
||||
LABEL org.opencontainers.image.version=$NODE_VERSION
|
||||
LABEL org.opencontainers.image.vendor=Quilibrium
|
||||
LABEL org.opencontainers.image.url=https://quilibrium.com/
|
||||
LABEL org.opencontainers.image.documentation=https://quilibrium.com/docs
|
||||
LABEL org.opencontainers.image.source=$GIT_REPO
|
||||
LABEL org.opencontainers.image.ref.name=$GIT_BRANCH
|
||||
LABEL org.opencontainers.image.revision=$GIT_COMMIT
|
||||
|
||||
COPY --from=build-node-zen3 /usr/bin/vdf-test /usr/local/vdf-test
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
ENTRYPOINT ["vdf-test"]
|
||||
@ -1,143 +0,0 @@
|
||||
# syntax=docker.io/docker/dockerfile:1.7-labs
|
||||
FROM --platform=${TARGETPLATFORM} ubuntu:24.04 AS base-zen4
|
||||
|
||||
ENV PATH="${PATH}:/root/.cargo/bin/"
|
||||
|
||||
ARG TARGETOS
|
||||
ARG TARGETARCH
|
||||
|
||||
# Install GMP 6.2 (6.3 which MacOS is using only available on Debian unstable)
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
||||
apt-get update && apt-get install -y \
|
||||
build-essential \
|
||||
curl \
|
||||
git \
|
||||
cmake \
|
||||
libgmp-dev \
|
||||
libmpfr-dev \
|
||||
libmpfr6 \
|
||||
wget \
|
||||
m4 \
|
||||
pkg-config \
|
||||
gcc \
|
||||
g++ \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
libtool \
|
||||
libssl-dev \
|
||||
python3 \
|
||||
python-is-python3 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ARG GO_VERSION=1.23.5
|
||||
RUN --mount=type=cache,target=/usr/local,id=usr-local-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
apt update && apt install -y wget && \
|
||||
ARCH=$(dpkg --print-architecture) && \
|
||||
case ${ARCH} in \
|
||||
amd64) GOARCH=amd64 ;; \
|
||||
arm64) GOARCH=arm64 ;; \
|
||||
*) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \
|
||||
esac && \
|
||||
wget https://go.dev/dl/go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm -rf /usr/local/go && \
|
||||
tar -C /usr/local -xzf go${GO_VERSION}.linux-${GOARCH}.tar.gz && \
|
||||
rm go${GO_VERSION}.linux-${GOARCH}.tar.gz
|
||||
|
||||
ENV PATH=$PATH:/usr/local/go/bin
|
||||
|
||||
# Build FLINT from source with AVX-512
|
||||
RUN --mount=type=cache,target=/usr/local,id=usr-local-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
git clone https://github.com/flintlib/flint.git && \
|
||||
cd flint && \
|
||||
git checkout flint-3.0 && \
|
||||
./bootstrap.sh && \
|
||||
./configure \
|
||||
--prefix=/usr/local \
|
||||
--with-gmp=/usr/local \
|
||||
--with-mpfr=/usr/local \
|
||||
--enable-avx2 \
|
||||
--enable-static \
|
||||
--disable-shared \
|
||||
CFLAGS="-march=znver4 -mtune=znver4 -O3" && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
cd .. && \
|
||||
rm -rf flint
|
||||
|
||||
COPY docker/rustup-init.sh /opt/rustup-init.sh
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
/opt/rustup-init.sh -y --profile minimal
|
||||
|
||||
# Install uniffi-bindgen-go
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0
|
||||
|
||||
FROM base-zen4 AS build-zen4
|
||||
|
||||
ENV QUILIBRIUM_SIGNATURE_CHECK=false
|
||||
|
||||
WORKDIR /opt/ceremonyclient
|
||||
|
||||
# Copy everything except node and client so as to avoid
|
||||
# invalidating the cache at this point on client or node rebuilds
|
||||
|
||||
COPY --exclude=node \
|
||||
--exclude=client \
|
||||
--exclude=sidecar . .
|
||||
|
||||
## Generate Rust bindings for VDF
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
go mod download
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cargo,id=cargo-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
./generate.sh
|
||||
|
||||
|
||||
FROM build-zen4 AS build-node-zen4
|
||||
|
||||
WORKDIR /opt/ceremonyclient/vdf
|
||||
|
||||
RUN --mount=type=cache,target=/usr/local/,id=usr-local-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/opt/ceremonyclient/target/,id=target-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/go/pkg/mod,id=go-mod-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
--mount=type=cache,target=/root/.cache/go-build,id=go-build-${TARGETOS}-${TARGETARCH}-zen4 \
|
||||
./build-test.sh -o vdf-test perftest/main.go && cp vdf-test /usr/bin
|
||||
|
||||
# Allows exporting single binary
|
||||
FROM scratch AS vdf-zen4
|
||||
COPY --from=build-node-zen4 /usr/bin/vdf-test /vdf-test
|
||||
ENTRYPOINT [ "/vdf-test" ]
|
||||
|
||||
LABEL org.opencontainers.image.title="Quilibrium Network Node"
|
||||
LABEL org.opencontainers.image.description="Quilibrium is a decentralized alternative to platform as a service providers."
|
||||
LABEL org.opencontainers.image.version=$NODE_VERSION
|
||||
LABEL org.opencontainers.image.vendor=Quilibrium
|
||||
LABEL org.opencontainers.image.url=https://quilibrium.com/
|
||||
LABEL org.opencontainers.image.documentation=https://quilibrium.com/docs
|
||||
LABEL org.opencontainers.image.source=$GIT_REPO
|
||||
LABEL org.opencontainers.image.ref.name=$GIT_BRANCH
|
||||
LABEL org.opencontainers.image.revision=$GIT_COMMIT
|
||||
|
||||
COPY --from=build-node-zen4 /usr/bin/vdf-test /usr/local/vdf-test
|
||||
|
||||
WORKDIR /root
|
||||
|
||||
ENTRYPOINT ["vdf-test"]
|
||||
202
docker/README.md
202
docker/README.md
@ -2,148 +2,15 @@
|
||||
|
||||
This folder contains all the necessary files to build and run Quilibrium nodes using Docker.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### Required Tools
|
||||
- **Docker** (v20.10+) with BuildKit support
|
||||
- **Docker Compose** (v2.0+)
|
||||
- **Task** (optional but recommended) - [taskfile.dev](https://taskfile.dev)
|
||||
|
||||
### Install Task
|
||||
```bash
|
||||
# macOS
|
||||
brew install go-task
|
||||
|
||||
# Linux (script)
|
||||
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin
|
||||
|
||||
# Or via Go
|
||||
go install github.com/go-task/task/v3/cmd/task@latest
|
||||
```
|
||||
|
||||
### Docker Version Check
|
||||
```bash
|
||||
docker --version # Should be 20.10+
|
||||
docker compose version # Should be v2.0+
|
||||
```
|
||||
|
||||
## 1. System Preparation
|
||||
|
||||
Before building or running, optimize the host network stack. Quilibrium relies on the QUIC protocol (UDP), which requires larger buffer sizes than the Linux default.
|
||||
For system preparation follow this [guide](https://docs.quilibrium.com/).
|
||||
|
||||
### Increase UDP Buffer Sizes
|
||||
```bash
|
||||
sudo sysctl -w net.core.rmem_max=7500000
|
||||
sudo sysctl -w net.core.wmem_max=7500000
|
||||
```
|
||||
To make these changes permanent, add them to `/etc/sysctl.conf`.
|
||||
If you have issues with connecting to others consider opening up additonal ports 50000+ and 60000+
|
||||
|
||||
### Configure Firewall (UFW)
|
||||
Open the ports required for P2P, gRPC, REST, and worker communication:
|
||||
|
||||
```bash
|
||||
sudo ufw allow 22/tcp
|
||||
sudo ufw allow 443/tcp
|
||||
sudo ufw allow 8336:8338/udp
|
||||
sudo ufw allow 8340/udp
|
||||
sudo ufw allow 50000:50010/tcp
|
||||
sudo ufw allow 50000:50010/udp
|
||||
sudo ufw reload
|
||||
```
|
||||
|
||||
## 2. File Structure
|
||||
|
||||
| File | Purpose |
|
||||
| --- | --- |
|
||||
| `Dockerfile.source` | Main multi-stage build for node + qclient |
|
||||
| `Dockerfile.sourceavx512` | Optimized build with AVX-512 instructions |
|
||||
| `Dockerfile.release` | Build from pre-compiled release binaries |
|
||||
| `Dockerfile.conntest.source` | Connection test utility build |
|
||||
| `Dockerfile.vdf.*` | VDF performance analysis builds (various CPU optimizations) |
|
||||
| `docker-compose.yml` | Container orchestration config |
|
||||
| `Taskfile.yaml` | Task automation commands |
|
||||
| `.env.example` | Environment variable template |
|
||||
| `rustup-init.sh` | Rust installer for build stages |
|
||||
|
||||
## 3. Dockerfile Variants
|
||||
|
||||
### Production Dockerfiles
|
||||
|
||||
| Dockerfile | Use Case | Target Stages |
|
||||
| --- | --- | --- |
|
||||
| `Dockerfile.source` | Standard build from source | `node-only`, `node`, `qclient`, `final` |
|
||||
| `Dockerfile.sourceavx512` | AVX-512 optimized (Intel Xeon, AMD Zen4+) | Same as above |
|
||||
| `Dockerfile.release` | Build from release binaries (faster) | Single stage |
|
||||
|
||||
### Specialized Dockerfiles
|
||||
|
||||
| Dockerfile | Use Case |
|
||||
| --- | --- |
|
||||
| `Dockerfile.conntest.source` | Network connectivity testing |
|
||||
| `Dockerfile.vdf.source` | VDF performance benchmarking |
|
||||
| `Dockerfile.vdf.sourceavx512` | VDF with AVX-512 optimizations |
|
||||
| `Dockerfile.vdf.sourcezen3` | VDF optimized for AMD Zen3 |
|
||||
| `Dockerfile.vdf.sourcezen4` | VDF optimized for AMD Zen4 |
|
||||
|
||||
## 4. Build Targets & Cross-Compilation
|
||||
|
||||
### Available Build Tasks
|
||||
|
||||
| Task | Platform | Output |
|
||||
| --- | --- | --- |
|
||||
| `build_node_arm64_linux` | Linux ARM64 | `../node/build/arm64_linux/` |
|
||||
| `build_node_amd64_linux` | Linux AMD64 | `../node/build/amd64_linux/` |
|
||||
| `build_node_amd64_avx512_linux` | Linux AMD64 (AVX-512) | `../node/build/amd64_avx512_linux/` |
|
||||
| `build_node_arm64_macos` | macOS ARM64 | `../node/build/arm64_macos/` |
|
||||
| `build_qclient_arm64_linux` | Linux ARM64 | `../client/build/arm64_linux/` |
|
||||
| `build_qclient_amd64_linux` | Linux AMD64 | `../client/build/amd64_linux/` |
|
||||
| `build_qclient_amd64_avx512_linux` | Linux AMD64 (AVX-512) | `../client/build/amd64_avx512_linux/` |
|
||||
| `build_qclient_arm64_macos` | macOS ARM64 | `../client/build/arm64_macos/` |
|
||||
|
||||
### Cross-Compilation Examples
|
||||
|
||||
**Build Linux ARM64 binary from any platform:**
|
||||
```bash
|
||||
task build_node_arm64_linux
|
||||
```
|
||||
|
||||
**Build Linux AMD64 with AVX-512 optimizations:**
|
||||
```bash
|
||||
task build_node_amd64_avx512_linux
|
||||
```
|
||||
|
||||
**Manual cross-compilation with Docker:**
|
||||
```bash
|
||||
# Build for ARM64
|
||||
docker build --platform linux/arm64 -f Dockerfile.source --output ../node/build/arm64_linux --target=node ..
|
||||
|
||||
# Build for AMD64
|
||||
docker build --platform linux/amd64 -f Dockerfile.source --output ../node/build/amd64_linux --target=node ..
|
||||
```
|
||||
|
||||
## 5. Docker Images
|
||||
|
||||
### Build Images
|
||||
|
||||
```bash
|
||||
# Full image (node + qclient)
|
||||
task build:source
|
||||
|
||||
# Node-only optimized image
|
||||
task build:node:source
|
||||
|
||||
# From release binaries (faster)
|
||||
task build:release
|
||||
```
|
||||
|
||||
### Image Tags
|
||||
|
||||
After building, images are tagged as:
|
||||
- `quilibrium:2.1.0-source` / `quilibrium:source`
|
||||
- `quilibrium:2.1.0-node-only` / `quilibrium:node-only`
|
||||
- `quilibrium:2.1.0-release` / `quilibrium:release`
|
||||
|
||||
## 6. Configuration
|
||||
## 2. Configuration
|
||||
|
||||
### Configuration Directory
|
||||
By default, the Docker configuration uses the `.config` directory at the **root of the repository** (`../.config`). This allows you to share configuration between native and containerized builds.
|
||||
@ -154,32 +21,18 @@ task config:gen
|
||||
```
|
||||
This will generate the configuration in `../.config`.
|
||||
|
||||
## 7. Running a Node
|
||||
## 3. Running a Node
|
||||
|
||||
### Quick Start (Docker Compose)
|
||||
```bash
|
||||
task up
|
||||
```
|
||||
Or:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Host Networking (Recommended for Servers)
|
||||
For servers with dedicated public IPs, host networking eliminates Docker NAT overhead:
|
||||
|
||||
```bash
|
||||
task deploy:node
|
||||
```
|
||||
Or:
|
||||
```bash
|
||||
docker run -d --name q-node \
|
||||
--network host \
|
||||
--restart unless-stopped \
|
||||
-v $(pwd)/../.config:/root/.config \
|
||||
quilibrium:node-only -signature-check=false
|
||||
```
|
||||
|
||||
### New Instance
|
||||
If you are starting a brand new node, a `.config/` folder will be created at the repository root.
|
||||
|
||||
@ -190,51 +43,8 @@ If you are starting a brand new node, a `.config/` folder will be created at the
|
||||
1. Ensure your `config.yml` and `keys.yml` are in the `.config/` folder at the repository root.
|
||||
2. Start the node: `task up`
|
||||
|
||||
## 8. gRPC & REST API Access
|
||||
|
||||
The node exposes two APIs for programmatic access:
|
||||
|
||||
| API | Port | Protocol | Binding |
|
||||
| --- | --- | --- | --- |
|
||||
| **gRPC** | 8337 | TCP | `127.0.0.1` (localhost only) |
|
||||
| **REST** | 8338 | TCP | `127.0.0.1` (localhost only) |
|
||||
|
||||
### Using grpcurl
|
||||
The container includes `grpcurl` for gRPC interaction:
|
||||
|
||||
```bash
|
||||
# List available services
|
||||
docker compose exec node grpcurl -plaintext localhost:8337 list
|
||||
|
||||
# Get node info
|
||||
docker compose exec node grpcurl -plaintext localhost:8337 quilibrium.node.node.pb.NodeService/GetNodeInfo
|
||||
|
||||
# Get token balance
|
||||
docker compose exec node grpcurl -plaintext localhost:8337 quilibrium.node.node.pb.NodeService/GetTokenInfo
|
||||
```
|
||||
|
||||
### Using qclient (inside container)
|
||||
```bash
|
||||
docker compose exec node qclient help
|
||||
docker compose exec node qclient token balance
|
||||
docker compose exec node qclient token info
|
||||
```
|
||||
|
||||
### Exposing APIs Externally
|
||||
By default, APIs are bound to localhost for security. To expose externally, modify `docker-compose.override.yml`:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
node:
|
||||
ports:
|
||||
- '0.0.0.0:8337:8337/tcp' # gRPC (use with caution)
|
||||
- '0.0.0.0:8338:8338/tcp' # REST (use with caution)
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Exposing gRPC/REST externally can be a security risk. Use a reverse proxy with authentication if needed.
|
||||
|
||||
## 9. Management Commands
|
||||
## 4. Management Commands
|
||||
|
||||
| Action | Task Command | Docker Command |
|
||||
| --- | --- | --- |
|
||||
|
||||
Loading…
Reference in New Issue
Block a user