mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-16 18:00:46 +00:00
add node docker image
This commit is contained in:
parent
6917c59b16
commit
c6c993a1f1
2 changed files with 199 additions and 0 deletions
37
Dockerfile.node
Normal file
37
Dockerfile.node
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
FROM golang:1.10-alpine as builder
|
||||||
|
|
||||||
|
RUN apk add --no-cache make gcc musl-dev linux-headers
|
||||||
|
|
||||||
|
ADD . /XDCchain
|
||||||
|
|
||||||
|
RUN cd /XDCchain \
|
||||||
|
&& make XDC \
|
||||||
|
&& chmod +x /XDCchain/build/bin/XDC
|
||||||
|
|
||||||
|
FROM alpine:latest
|
||||||
|
|
||||||
|
LABEL maintainer="admin@xinfin.org"
|
||||||
|
|
||||||
|
WORKDIR /XDCchain
|
||||||
|
|
||||||
|
COPY --from=builder /XDCchain/build/bin/XDC /usr/local/bin/XDC
|
||||||
|
|
||||||
|
ENV IDENTITY ''
|
||||||
|
ENV PASSWORD ''
|
||||||
|
ENV PRIVATE_KEY ''
|
||||||
|
ENV BOOTNODES ''
|
||||||
|
ENV EXTIP ''
|
||||||
|
ENV SYNC_MODE 'full'
|
||||||
|
ENV NETWORK_ID '89'
|
||||||
|
ENV WS_SECRET ''
|
||||||
|
ENV NETSTATS_HOST 'netstats-server'
|
||||||
|
ENV NETSTATS_PORT '3000'
|
||||||
|
|
||||||
|
RUN apk add --no-cache ca-certificates
|
||||||
|
|
||||||
|
COPY docker/XDCchain ./
|
||||||
|
COPY genesis/ ./
|
||||||
|
|
||||||
|
EXPOSE 8545 8546 30303 30303/udp
|
||||||
|
|
||||||
|
ENTRYPOINT ["./entrypoint.sh"]
|
||||||
162
docker/XDCchain/entrypoint.sh
Normal file
162
docker/XDCchain/entrypoint.sh
Normal file
|
|
@ -0,0 +1,162 @@
|
||||||
|
#!/bin/sh -x
|
||||||
|
|
||||||
|
# vars from docker env
|
||||||
|
# - IDENTITY (default to empty)
|
||||||
|
# - PASSWORD (default to empty)
|
||||||
|
# - PRIVATE_KEY (default to empty)
|
||||||
|
# - BOOTNODES (default to empty)
|
||||||
|
# - EXTIP (default to empty)
|
||||||
|
# - SYNC_MODE (default to 'full')
|
||||||
|
# - NETWORK_ID (default to '89')
|
||||||
|
# - WS_SECRET (default to empty)
|
||||||
|
# - NETSTATS_HOST (default to 'netstats-server:3000')
|
||||||
|
# - NETSTATS_PORT (default to 'netstats-server:3000')
|
||||||
|
|
||||||
|
# constants
|
||||||
|
DATA_DIR="data"
|
||||||
|
KEYSTORE_DIR="keystore"
|
||||||
|
|
||||||
|
# variables
|
||||||
|
genesisPath=""
|
||||||
|
params=""
|
||||||
|
accountsCount=$(
|
||||||
|
XDC account list --datadir $DATA_DIR --keystore $KEYSTORE_DIR \
|
||||||
|
2> /dev/null \
|
||||||
|
| wc -l
|
||||||
|
)
|
||||||
|
|
||||||
|
# file to env
|
||||||
|
for env in IDENTITY PASSWORD PRIVATE_KEY BOOTNODES WS_SECRET NETSTATS_HOST \
|
||||||
|
NETSTATS_PORT EXTIP SYNC_MODE NETWORK_ID; do
|
||||||
|
file=$(eval echo "\$${env}_FILE")
|
||||||
|
if [[ -f $file ]] && [[ ! -z $file ]]; then
|
||||||
|
echo "Replacing $env by $file"
|
||||||
|
export $env=$(cat $file)
|
||||||
|
elif [[ "$env" == "BOOTNODES" ]] && [[ ! -z $file ]]; then
|
||||||
|
echo "Bootnodes file is not available. Waiting for it to be provisioned..."
|
||||||
|
while true ; do
|
||||||
|
if [[ -f $file ]] && [[ $(grep -e enode $file) ]]; then
|
||||||
|
echo "Fount bootnode file."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo "Still no bootnodes file, sleeping..."
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
export $env=$(cat $file)
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# networkid
|
||||||
|
if [[ ! -z $NETWORK_ID ]]; then
|
||||||
|
case $NETWORK_ID in
|
||||||
|
88 )
|
||||||
|
genesisPath="mainnet.json"
|
||||||
|
;;
|
||||||
|
89 )
|
||||||
|
genesisPath="testnet.json"
|
||||||
|
;;
|
||||||
|
90 )
|
||||||
|
genesisPath="devnet.json"
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
echo "network id not supported"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
params="$params --networkid $NETWORK_ID"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# data dir
|
||||||
|
if [[ ! -d $DATA_DIR/XDC ]]; then
|
||||||
|
echo "No blockchain data, creating genesis block."
|
||||||
|
XDC init $genesisPath --datadir $DATA_DIR 2> /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
# identity
|
||||||
|
if [[ -z $IDENTITY ]]; then
|
||||||
|
IDENTITY="unnamed_$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# password file
|
||||||
|
if [[ ! -f ./password ]]; then
|
||||||
|
if [[ ! -z $PASSWORD ]]; then
|
||||||
|
echo "Password env is set. Writing into file."
|
||||||
|
echo "$PASSWORD" > ./password
|
||||||
|
else
|
||||||
|
echo "No password set (or empty), generating a new one"
|
||||||
|
$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32} > password)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# private key
|
||||||
|
if [[ $accountsCount -le 0 ]]; then
|
||||||
|
echo "No accounts found"
|
||||||
|
if [[ ! -z $PRIVATE_KEY ]]; then
|
||||||
|
echo "Creating account from private key"
|
||||||
|
echo "$PRIVATE_KEY" > ./private_key
|
||||||
|
XDC account import ./private_key \
|
||||||
|
--datadir $DATA_DIR \
|
||||||
|
--keystore $KEYSTORE_DIR \
|
||||||
|
--password ./password
|
||||||
|
else
|
||||||
|
echo "Creating new account"
|
||||||
|
XDC account new \
|
||||||
|
--datadir $DATA_DIR \
|
||||||
|
--keystore $KEYSTORE_DIR \
|
||||||
|
--password ./password
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
account=$(
|
||||||
|
XDC account list --datadir $DATA_DIR --keystore $KEYSTORE_DIR \
|
||||||
|
2> /dev/null \
|
||||||
|
| head -n 1 \
|
||||||
|
| cut -d"{" -f 2 | cut -d"}" -f 1
|
||||||
|
)
|
||||||
|
echo "Using account $account"
|
||||||
|
params="$params --unlock $account"
|
||||||
|
|
||||||
|
# bootnodes
|
||||||
|
if [[ ! -z $BOOTNODES ]]; then
|
||||||
|
params="$params --bootnodes $BOOTNODES"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# extip
|
||||||
|
if [[ ! -z $EXTIP ]]; then
|
||||||
|
params="$params --nat extip:${EXTIP}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# syncmode
|
||||||
|
if [[ ! -z $SYNC_MODE ]]; then
|
||||||
|
params="$params --syncmode ${SYNC_MODE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# netstats
|
||||||
|
if [[ ! -z $WS_SECRET ]]; then
|
||||||
|
echo "Will report to netstats server ${NETSTATS_HOST}:${NETSTATS_PORT}"
|
||||||
|
params="$params --ethstats ${IDENTITY}:${WS_SECRET}@${NETSTATS_HOST}:${NETSTATS_PORT}"
|
||||||
|
else
|
||||||
|
echo "WS_SECRET not set, will not report to netstats server."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# dump
|
||||||
|
echo "dump: $IDENTITY $account $BOOTNODES"
|
||||||
|
|
||||||
|
exec XDC $params \
|
||||||
|
--verbosity 4 \
|
||||||
|
--datadir $DATA_DIR \
|
||||||
|
--keystore $KEYSTORE_DIR \
|
||||||
|
--identity $IDENTITY \
|
||||||
|
--password ./password \
|
||||||
|
--port 30303 \
|
||||||
|
--rpc \
|
||||||
|
--rpccorsdomain "*" \
|
||||||
|
--rpcaddr 0.0.0.0 \
|
||||||
|
--rpcport 8545 \
|
||||||
|
--rpcvhosts "*" \
|
||||||
|
--ws \
|
||||||
|
--wsaddr 0.0.0.0 \
|
||||||
|
--wsport 8546 \
|
||||||
|
--wsorigins "*" \
|
||||||
|
--mine \
|
||||||
|
--gasprice "1" \
|
||||||
|
--targetgaslimit "420000000" \
|
||||||
|
"$@"
|
||||||
Loading…
Reference in a new issue