Skip to content

Commit 5a55a79

Browse files
committed
RA-60: WIP: Pack all components in single Docker Container
1 parent f4164ca commit 5a55a79

38 files changed

+17222
-0
lines changed

.env.dockerfile

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
LOG=INFO
2+
NETWORK="preprod" # mainnet, preprod, testnet, devkit
3+
PROTOCOL_MAGIC=1 # mainnet 764824073, preprod 1, testnet 2, devkit 42
4+
5+
#common env
6+
DB_ADMIN_USER_NAME="rosetta_db_admin"
7+
DB_ADMIN_USER_SECRET="weakpwd#123_d"
8+
9+
# Postgres variables
10+
DB_IMAGE_NAME="postgres"
11+
DB_IMAGE_TAG="14.11-bullseye"
12+
DB_NAME="rosetta-java-preprod"
13+
DB_HOST="db" # Service name in docker-compose or local db
14+
DB_PORT="5432"
15+
DB_SCHEMA=${NETWORK}
16+
DB_PATH="data"
17+
18+
# Cardano Node variables
19+
CARDANO_NODE_HOST="cardano-node" # Service name in docker-compose or local cardano node
20+
CARDANO_NODE_PORT="3001" # Uncomment if you are using local cardano node
21+
CARDANO_NODE_VERSION="8.9.0"
22+
CARDANO_NODE_SUBMIT_HOST="cardano-submit-api"
23+
NODE_SUBMIT_API_PORT=8090
24+
CARDANO_NODE_SOCKET="./node-ipc"
25+
CARDANO_NODE_DB="./node/db"
26+
CARDANO_CONFIG="./config/${NETWORK}"
27+
28+
#api env
29+
API_SPRING_PROFILES_ACTIVE_API="dev" # staging. Additional profiles: mempool (if mempool should be activated)
30+
API_PORT=8081
31+
TRANSACTION_TTL=3000
32+
33+
DB_CONNECTION_PARAMS_PROVIDER_TYPE="ENVIRONMENT"
34+
DB_DRIVER_CLASS_NAME="org.postgresql.Driver"
35+
36+
ROSETTA_VERSION=1.4.13
37+
TOPOLOGY_FILEPATH=/config/${NETWORK}/topology.json
38+
GENESIS_SHELLEY_PATH=/config/${NETWORK}/shelley-genesis.json
39+
GENESIS_BYRON_PATH=/config/${NETWORK}/byron-genesis.json
40+
GENESIS_ALONZO_PATH=/config/${NETWORK}/alonzo-genesis.json
41+
GENESIS_CONWAY_PATH=/config/${NETWORK}/conway-genesis.json
42+
API_NODE_SOCKET_PATH=./node/node.socket
43+
PRINT_EXCEPTION=true
44+
45+
#api env
46+
YACI_SPRING_PROFILES="postgres" # database profiles: h2, postgres
47+
INDEXER_NODE_PORT=3001
48+
MEMPOOL_ENABLED=true

docker/Dockerfile

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
FROM ubuntu:24.04
2+
3+
# Install dependencies
4+
RUN apt-get update -qq --fix-missing
5+
6+
RUN apt -y --no-install-recommends install \
7+
automake build-essential pkg-config libffi-dev libgmp-dev libssl-dev libncurses-dev libsystemd-dev zlib1g-dev make \
8+
g++ tmux git jq wget libncursesw5-dev libtool autoconf liblmdb-dev curl ca-certificates
9+
10+
# Install ghcup
11+
ENV BOOTSTRAP_HASKELL_NONINTERACTIVE=1
12+
RUN bash -c "curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh "
13+
#curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org > ghcup_install.sh
14+
15+
# Add ghcup to PATH
16+
ENV PATH=${PATH}:/root/.local/bin
17+
ENV PATH=${PATH}:/root/.ghcup/bin
18+
19+
RUN bash -c "ghcup upgrade"
20+
21+
# Install cabal
22+
ENV CABAL_VERSION=3.8.1.0
23+
RUN bash -c "ghcup install cabal $CABAL_VERSION"
24+
RUN bash -c "ghcup set cabal $CABAL_VERSION."
25+
26+
# Install GHC
27+
ENV GHC_VERSION=8.10.7
28+
RUN bash -c "ghcup install ghc $GHC_VERSION"
29+
RUN bash -c "ghcup set ghc $GHC_VERSION"
30+
31+
ARG CARDANO_NODE_VERSION=8.7.3
32+
RUN mkdir -p ~/src && cd ~/src
33+
34+
#Install sodium
35+
RUN export IOHKNIX_VERSION=$(curl https://raw.githubusercontent.com/IntersectMBO/cardano-node/$CARDANO_NODE_VERSION/flake.lock | jq -r '.nodes.iohkNix.locked.rev') \
36+
&& echo "iohk-nix version: $IOHKNIX_VERSION" \
37+
&& export SODIUM_VERSION=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/$IOHKNIX_VERSION/flake.lock | jq -r '.nodes.sodium.original.rev') \
38+
&& echo "Using sodium version: $SODIUM_VERSION" \
39+
&& git clone https://github.com/intersectmbo/libsodium \
40+
&& cd libsodium \
41+
&& git checkout $SODIUM_VERSION \
42+
&& ./autogen.sh \
43+
&& ./configure \
44+
&& make \
45+
&& make check \
46+
&& make install \
47+
&& cd ..
48+
49+
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
50+
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
51+
52+
# Install libsodium
53+
RUN apt -y --no-install-recommends install libsodium-dev
54+
55+
# Install secp256k1
56+
RUN export IOHKNIX_VERSION=$(curl https://raw.githubusercontent.com/IntersectMBO/cardano-node/$CARDANO_NODE_VERSION/flake.lock | jq -r '.nodes.iohkNix.locked.rev') \
57+
&& echo "iohk-nix version: $IOHKNIX_VERSION" \
58+
&& export SECP256K1_VERSION=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/${IOHKNIX_VERSION}/flake.lock | jq -r '.nodes.secp256k1.original.ref') \
59+
&& echo "Using secp256k1 version:$SECP256K1_VERSION" \
60+
&& git clone --depth 1 --branch $SECP256K1_VERSION https://github.com/bitcoin-core/secp256k1 \
61+
&& cd secp256k1 \
62+
&& ./autogen.sh \
63+
&& ./configure --enable-module-schnorrsig --enable-experimental \
64+
&& make \
65+
&& make check \
66+
&& make install \
67+
&& cd ..
68+
69+
# Install blst
70+
RUN export BLST_VERSION=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/master/flake.lock | jq -r '.nodes.blst.original.ref') \
71+
&& git clone --depth 1 --branch ${BLST_VERSION} https://github.com/supranational/blst \
72+
&& cd blst \
73+
&& ./build.sh \
74+
&& echo "prefix=/usr/local" >> libblst.pc \
75+
&& echo "exec_prefix=\${prefix}" >> libblst.pc \
76+
&& echo "libdir=\${exec_prefix}/lib" >> libblst.pc \
77+
&& echo "includedir=\${prefix}/include" >> libblst.pc \
78+
&& echo "" >> libblst.pc \
79+
&& echo "Name: libblst" >> libblst.pc \
80+
&& echo "Description: Multilingual BLS12-381 signature library" >> libblst.pc \
81+
&& echo "URL: https://github.com/supranational/blst" >> libblst.pc \
82+
&& echo "Version: ${BLST_VERSION#v}" >> libblst.pc \
83+
&& echo "Cflags: -I\${includedir}" >> libblst.pc \
84+
&& echo "Libs: -L\${libdir} -lblst" >> libblst.pc \
85+
&& cp libblst.pc /usr/local/lib/pkgconfig/ \
86+
&& cp bindings/blst_aux.h bindings/blst.h bindings/blst.hpp /usr/local/include/ \
87+
&& cp libblst.a /usr/local/lib \
88+
# && chmod u=rw,go=r /usr/local/{lib/{libblst.a,pkgconfig/libblst.pc},include/{blst.{h,hpp},blst_aux.h}} \
89+
&& cd ..
90+
91+
#Install node
92+
ENV NODE_VERSION=8.9.2
93+
94+
RUN git clone https://github.com/intersectmbo/cardano-node.git \
95+
&& cd cardano-node \
96+
# && git fetch --all --recurse-submodules --tags \
97+
# && git tag | sort -V \
98+
&& git checkout tags/$NODE_VERSION \
99+
&& echo "with-compiler: ghc-$GHC_VERSION" >> cabal.project.local \
100+
&& echo "" >> cabal.project.local \
101+
&& echo "package cardano-crypto-praos" >> cabal.project.local \
102+
&& echo " flags: -external-libsodium-vrf" >> cabal.project.local \
103+
&& echo "" >> cabal.project.local \
104+
&& echo "package trace-dispatcher" >> cabal.project.local \
105+
&& echo " ghc-options: -Wwarn" >> cabal.project.local \
106+
&& echo "" >> cabal.project.local \
107+
&& echo "package HsOpenSSL" >> cabal.project.local \
108+
&& echo " flags: -homebrew-openssl" >> cabal.project.local \
109+
&& echo "" >> cabal.project.local \
110+
&& mkdir -p /usr/local/opt/openssl \
111+
&& ln -s /opt/homebrew/opt/openssl@3/lib /usr/local/opt/openssl/lib \
112+
&& ln -s /opt/homebrew/opt/openssl@3/include /usr/local/opt/openssl/include \
113+
&& cd ..
114+
115+
RUN bash -c "cabal update"
116+
RUN bash -c "cabal build all"
117+
RUN bash -c "cabal build cardano-cli"
118+
119+
RUN kdir -p ~/.local/bin \
120+
&& cp -p "$(./scripts/bin-path.sh cardano-node)" ~/.local/bin/ \
121+
&& cp -p "$(./scripts/bin-path.sh cardano-cli)" ~/.local/bin/
122+
123+
RUN cardano-cli --version
124+
125+
ARG CARDANO_NODE_SOCKET="./node-ipc"
126+
ARG CARDANO_NODE_DB="./node/db"
127+
#ARG CARDANO_CONFIG="./docker/${NETWORK}"
128+
ARG CARDANO_CONFIG="./docker/config/${NETWORK}"
129+
130+
COPY ${CARDANO_NODE_SOCKET} /node/ipc
131+
COPY ${CARDANO_NODE_DB} /node/data/db
132+
COPY ${CARDANO_CONFIG} /node/config
133+
134+
EXPOSE 3001 12788 12798
135+
136+
#ENTRYPOINT cardano-node run --database-path /data/db --host-addr 0.0.0.0 --port 3001 --socket-path /node/ipc/node.socket --topology /node/config/topology.json --config /node/config/config.json
137+
CMD ["/bin/sh", "-c", "bash"]
138+
139+
140+

docker/Dockerfile_build

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
FROM ghcr.io/blinklabs-io/haskell:9.6.3-3.10.2.0-2 AS cardano-node-build
2+
# Install cardano-node
3+
ARG NODE_VERSION=8.9.2
4+
ENV NODE_VERSION=${NODE_VERSION}
5+
RUN echo "Building tags/${NODE_VERSION}..." \
6+
&& echo tags/${NODE_VERSION} > /CARDANO_BRANCH \
7+
&& git clone https://github.com/input-output-hk/cardano-node.git \
8+
&& cd cardano-node \
9+
&& git fetch --all --recurse-submodules --tags \
10+
&& git tag \
11+
&& git checkout tags/${NODE_VERSION} \
12+
&& echo "with-compiler: ghc-${GHC_VERSION}" >> cabal.project.local \
13+
&& echo "tests: False" >> cabal.project.local \
14+
&& cabal update \
15+
&& cabal build all \
16+
&& mkdir -p /root/.local/bin/ \
17+
&& cp -p "$(./scripts/bin-path.sh cardano-node)" /root/.local/bin/ \
18+
&& rm -rf /root/.cabal/packages \
19+
&& rm -rf /usr/local/lib/ghc-${GHC_VERSION}/ /usr/local/share/doc/ghc-${GHC_VERSION}/ \
20+
&& rm -rf /code/cardano-node/dist-newstyle/ \
21+
&& rm -rf /root/.cabal/store/ghc-${GHC_VERSION}
22+
23+
FROM ghcr.io/blinklabs-io/cardano-cli:8.20.3.0 AS cardano-cli
24+
FROM ghcr.io/blinklabs-io/mithril-client:0.7.6-1 AS mithril-client
25+
FROM ghcr.io/blinklabs-io/nview:0.9.3 AS nview
26+
FROM ghcr.io/blinklabs-io/txtop:0.7.1 AS txtop
27+
28+
FROM debian:bookworm-slim AS cardano-node
29+
ENV LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
30+
ENV PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
31+
COPY --from=cardano-node-build /usr/local/lib/ /usr/local/lib/
32+
COPY --from=cardano-node-build /usr/local/include/ /usr/local/include/
33+
COPY --from=cardano-node-build /root/.local/bin/cardano-* /usr/local/bin/
34+
COPY --from=cardano-cli /usr/local/bin/cardano-cli /usr/local/bin/
35+
COPY --from=mithril-client /bin/mithril-client /usr/local/bin/
36+
COPY --from=nview /bin/nview /usr/local/bin/
37+
COPY --from=txtop /bin/txtop /usr/local/bin/
38+
COPY docker/bin/ /usr/local/bin/
39+
COPY docker/config/ /opt/cardano/config/
40+
RUN apt-get update -y && \
41+
apt-get install -y \
42+
bc \
43+
curl \
44+
iproute2 \
45+
jq \
46+
libffi8 \
47+
libgmp10 \
48+
liblmdb0 \
49+
libncursesw5 \
50+
libnuma1 \
51+
libsystemd0 \
52+
libssl3 \
53+
libtinfo6 \
54+
llvm-14-runtime \
55+
netbase \
56+
pkg-config \
57+
procps \
58+
sqlite3 \
59+
wget \
60+
zlib1g && \
61+
rm -rf /var/lib/apt/lists/* && \
62+
chmod +x /usr/local/bin/*
63+
EXPOSE 3001 12788 12798
64+
ENTRYPOINT ["/usr/local/bin/entrypoint"]

docker/Dockerfile_img

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
ARG LOG=INFO
2+
ARG NETWORK="preprod"
3+
# mainnet, preprod, testnet, devkit
4+
ARG PROTOCOL_MAGIC=1
5+
# mainnet 764824073, preprod 1, testnet 2, devkit 42
6+
7+
#common env
8+
ARG DB_ADMIN_USER_NAME="rosetta_db_admin"
9+
ARG DB_ADMIN_USER_SECRET="weakpwd#123_d"
10+
11+
# Postgres variables
12+
ARG DB_IMAGE_NAME="postgres"
13+
ARG DB_IMAGE_TAG="14.11-bullseye"
14+
ARG DB_NAME="rosetta-java-preprod"
15+
ARG DB_HOST="db"
16+
# Service name in docker-compose or local db
17+
ARG DB_PORT="5432"
18+
ARG DB_SCHEMA=${NETWORK}
19+
ARG DB_PATH="data"
20+
21+
# Cardano Node variables
22+
ARG CARDANO_NODE_HOST="cardano-node"
23+
# Service name in docker-compose or local cardano node
24+
ARG CARDANO_NODE_PORT="3001"
25+
# Uncomment if you are using local cardano node
26+
ARG CARDANO_NODE_VERSION="8.9.0"
27+
ARG CARDANO_NODE_SUBMIT_HOST="cardano-submit-api"
28+
ARG NODE_SUBMIT_API_PORT=8090
29+
ARG CARDANO_NODE_SOCKET="./node-ipc"
30+
ARG CARDANO_NODE_DB="./node/db"
31+
#ARG CARDANO_CONFIG="./docker/${NETWORK}"
32+
ARG CARDANO_CONFIG="./docker/config/${NETWORK}"
33+
34+
#api env
35+
ARG API_SPRING_PROFILES_ACTIVE_API="dev"
36+
# staging. Additional profiles: mempool (if mempool should be activated)
37+
ARG API_PORT=8081
38+
ARG TRANSACTION_TTL=3000
39+
40+
ARG DB_CONNECTION_PARAMS_PROVIDER_TYPE="ENVIRONMENT"
41+
ARG DB_DRIVER_CLASS_NAME="org.postgresql.Driver"
42+
43+
ARG ROSETTA_VERSION=1.4.13
44+
ARG TOPOLOGY_FILEPATH=/config/${NETWORK}/topology.json
45+
ARG GENESIS_SHELLEY_PATH=/config/${NETWORK}/shelley-genesis.json
46+
ARG GENESIS_BYRON_PATH=/config/${NETWORK}/byron-genesis.json
47+
ARG GENESIS_ALONZO_PATH=/config/${NETWORK}/alonzo-genesis.json
48+
ARG GENESIS_CONWAY_PATH=/config/${NETWORK}/conway-genesis.json
49+
ARG API_NODE_SOCKET_PATH=./node/node.socket
50+
ARG PRINT_EXCEPTION=true
51+
52+
#api env
53+
ARG YACI_SPRING_PROFILES="postgres"
54+
# database profiles: h2, postgres
55+
ARG INDEXER_NODE_PORT=3001
56+
ARG MEMPOOL_ENABLED=true
57+
58+
# node
59+
FROM ghcr.io/intersectmbo/cardano-node:${CARDANO_NODE_VERSION}
60+
#FROM debian:stable-slim
61+
62+
COPY ${CARDANO_NODE_SOCKET} /node/ipc
63+
COPY ${CARDANO_NODE_DB} /node/data/db
64+
COPY ${CARDANO_CONFIG} /node/config
65+
66+
COPY ./docker/run_backend.sh /app/run_backend.sh
67+
68+
EXPOSE ${CARDANO_NODE_PORT}
69+
70+
#ENTRYPOINT ["/bin/sh", "/app/run_backend.sh"]
71+
72+
ENTRYPOINT cardano-node run --database-path /data/db --host-addr 0.0.0.0 --port 3001 --socket-path /node/ipc/node.socket --topology /node/config/topology.json --config /node/config/config.json
73+
74+
##CMD ["/bin/sh", "-c", "bash"]

docker/Dockerfile_ubuntu

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
FROM debian:stable-slim as build
2+
RUN apt-get update -y \
3+
&& apt-get install -y automake build-essential pkg-config libffi-dev libgmp-dev libssl-dev libtinfo-dev \
4+
libsystemd-dev zlib1g-dev make g++ tmux git jq wget libncursesw5 libtool autoconf libsqlite3-dev m4 \
5+
ca-certificates gcc libc6-dev \
6+
&& apt-get clean
7+
ENV PATH="/root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH"
8+
RUN wget https://downloads.haskell.org/~cabal/cabal-install-3.2.0.0/cabal-install-3.2.0.0-x86_64-unknown-linux.tar.xz \
9+
&& tar -xf cabal-install-3.2.0.0-x86_64-unknown-linux.tar.xz \
10+
&& rm cabal-install-3.2.0.0-x86_64-unknown-linux.tar.xz cabal.sig \
11+
&& mkdir -p ~/.local/bin \
12+
&& mv cabal ~/.local/bin/ \
13+
&& cabal update && cabal --version
14+
RUN wget https://downloads.haskell.org/ghc/8.10.2/ghc-8.10.2-x86_64-deb9-linux.tar.xz \
15+
&& tar -xf ghc-8.10.2-x86_64-deb9-linux.tar.xz \
16+
&& rm ghc-8.10.2-x86_64-deb9-linux.tar.xz \
17+
&& cd ghc-8.10.2 \
18+
&& ./configure \
19+
&& make install \
20+
&& cd / \
21+
&& rm -rf /ghc-8.10.2
22+
ARG LIBSODIUM_VERSION=""
23+
RUN git clone https://github.com/input-output-hk/libsodium \
24+
&& cd libsodium \
25+
&& git fetch --all --recurse-submodules --tags \
26+
&& git tag \
27+
&& git checkout tags/$LIBSODIUM_VERSION \
28+
&& ./autogen.sh \
29+
&& ./configure \
30+
&& make \
31+
&& make install \
32+
&& cd .. && rm -rf libsodium
33+
ENV LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" \
34+
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
35+
ARG VERSION="8.9.2"
36+
RUN echo "Building tags/$VERSION..." \
37+
&& echo tags/$VERSION > /CARDANO_BRANCH \
38+
&& git clone https://github.com/input-output-hk/cardano-node.git \
39+
&& cd cardano-node \
40+
&& git fetch --all --recurse-submodules --tags \
41+
&& git tag \
42+
&& git checkout tags/$VERSION \
43+
&& cabal configure --with-compiler=ghc-8.10.2 \
44+
&& echo "package cardano-crypto-praos" >> cabal.project.local \
45+
&& echo " flags: -external-libsodium-vrf" >> cabal.project.local \
46+
&& cabal build all \
47+
&& mkdir -p /root/.local/bin/ \
48+
&& cp -p dist-newstyle/build/x86_64-linux/ghc-8.10.2/cardano-node-${VERSION}/x/cardano-node/build/cardano-node/cardano-node /root/.local/bin/ \
49+
&& cp -p dist-newstyle/build/x86_64-linux/ghc-8.10.2/cardano-cli-${VERSION}/x/cardano-cli/build/cardano-cli/cardano-cli /root/.local/bin/
50+
FROM debian:stable-slim
51+
COPY --from=build /root/.local/bin/ /bin/
52+
COPY --from=build /usr/local/lib/ /lib/
53+
RUN mkdir -p /data/db
54+
RUN mkdir /ipc
55+
RUN apt-get update && apt-get install git -y
56+
RUN git clone https://github.com/input-output-hk/cardano-configurations.git
57+
ENTRYPOINT cardano-node run --database-path /data/db --host-addr 0.0.0.0 --port "$PORT" --socket-path /ipc/node.socket --topology ./cardano-configurations/network/"$NETWORK"/cardano-node/topology.json --config ./cardano-configurations/network/"$NETWORK"/cardano-node/config.json

0 commit comments

Comments
 (0)