mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-19 21:31:37 +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