diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..d778d2c56ae837fd1ed5ce06f1c495797f2655c5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM ethereum/solc:0.5.10-alpine AS solc +FROM ethereum/client-go:alltools-v1.9.2 +LABEL maintainer="Robert Martin-Legene <robert@nic.ar>" +HEALTHCHECK --start-period=15s CMD [ "/usr/bin/nc", "-z", "-w", "2", "127.0.0.1", "8545" ] +CMD [ "/home/bfa/bfa/bin/singlestart.sh" ] +COPY --from=solc /usr/local/bin/solc /usr/local/bin +EXPOSE 8545 8546 30303 +ENV USERNAME=bfa HOME=/home/bfa +ENV BFAHOME=${HOME}/bfa BFANETWORKIDPROD=47525974938 BFANETWORKIDTEST=55555000000 VIRTUALIZATION=DOCKER +ENV BFANETWORKDIRPROD=${BFAHOME}/network BFANETWORKDIRTEST=${BFAHOME}/test2network PATH=${BFAHOME}/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +RUN adduser -u 30303 -s /bin/bash -h ${HOME} -D ${USERNAME} ${USERNAME} && apk add --no-cache git bash jq perl perl-class-accessor perl-json perl-json-xs perl-lwp-protocol-https nodejs npm binutils python3 && rm -f /var/cache/apk/* +USER ${USERNAME} +WORKDIR ${HOME} +RUN git clone --quiet https://gitlab.bfa.ar/blockchain/nucleo.git ${BFAHOME} && cd ${BFAHOME} && npm install --no-optional && npm audit fix +ENV BFANETWORKID=${BFANETWORKIDPROD} BFANETWORKDIR=${BFANETWORKDIRPROD} +ENV BFANODEDIR=${BFANETWORKDIR}/node BFATOML=${BFANETWORKDIR}/config.toml +RUN mkdir -p ${BFANODEDIR} && ln -s ${BFANODEDIR} .ethereum +RUN sed -i 's/^HTTPHost = "127.0.0.1"/HTTPHost = "0.0.0.0"/' ${BFATOML} +WORKDIR ${BFAHOME} +VOLUME [ "/home/bfa" ] diff --git a/build.sh b/build.sh new file mode 100755 index 0000000000000000000000000000000000000000..857be342aa15b1a74cf2bc80b354a8b317437f2f --- /dev/null +++ b/build.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# 20190829 Robert Martin-Legene +# This builds the docker bfanode on a Debian host system. +# If on another distribution, maybe you need to find docker-squash with pip3 + +trap "exit 1" ERR +TAG=latest +DOCKERFILENAME=Dockerfile +if [ "$1" == "test" ] +then + TAG=test + DOCKERFILENAME=Dockerfile-${TAG} + sed 's/BFANETWORKID=..BFANETWORKIDPROD. BFANETWORKDIR=..BFANETWORKDIRPROD./BFANETWORKID=${BFANETWORKIDTEST} BFANETWORKDIR=${BFANETWORKDIRTEST}/' < Dockerfile > ${DOCKERFILENAME} +fi +docker build -f ${DOCKERFILENAME} -t bfanode:${TAG} . +rm -f Dockerfile-test || true +docker tag bfanode:${TAG} rlegene/bfanode:${TAG} +if [ "$USER" = "robert" ] +then + read -p 'Upload? : ' -n 1 + echo + test "$REPLY" = "y" || exit 0 + docker push rlegene/bfanode:${TAG} || ( echo "Did you remember to log in using 'docker login'?" ; false ) + ## Some day maybe we will have our own working registry. + #docker tag bfanode:${TAG} registry.gitlab.bfa.ar:5005/blockchain/bfanode:${TAG} + #docker push registry.gitlab.bfa.ar:5005/blockchain/bfanode:${TAG} || ( echo "Did you remember to log in using 'docker login'?" ; false ) +fi diff --git a/start.sh b/start.sh new file mode 100755 index 0000000000000000000000000000000000000000..207f716052a0baddef0f98a65db348078ae4cf5d --- /dev/null +++ b/start.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +trap 'exit 1' ERR + +if ! which docker > /dev/null 2>&1 +then + echo 'Can not find Docker. Make sure it is installed.' + if grep -q Debian /etc/issue + then + echo Consider + echo 'echo deb "[arch=amd64] https://download.docker.com/linux/debian stretch stable" > /etc/apt/sources.list.d/docker.list' + echo 'apt update' + echo 'apt install docker-ce-cli' + if grep -vq swapaccount=1 /etc/default/grub + then + echo 'Also, you should read https://docs.docker.com/install/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities' + fi + fi + exit 1 +fi + +mkdir -p ${HOME}/dockers/volumes/bfanodo,home,bfa,bfa,network,node,geth +mounts="-v ${HOME}/dockers/volumes/bfanodo,home,bfa,bfa,network,node,geth:/home/bfa/bfa/network/node/geth" + +docker run --rm $mounts -u root alpine chown -R 30303:30303 /home/bfa/bfa/network +docker run -d --memory 4g $mounts -p 127.0.0.1:8545:8545 -p 127.0.0.1:8546:8546 -p 30303:30303 --restart=unless-stopped --name bfanodo rlegene/bfanode