Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • docker/bfanodo
  • franca/bfanodo
  • silvioq/bfanodo
  • nelson/bfanodo
4 results
Show changes
Commits on Source (31)
FROM bfaar/nodo:toolbase
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" ]
EXPOSE 8545 8546 30303
ENV USERNAME=bfa HOME=/home/bfa
ENV BFAHOME=${HOME}/bfa BFANETWORKIDPROD=47525974938 BFANETWORKIDTEST=55555000000 VIRTUALIZATION=DOCKER GITBRANCH=__GITBRANCH__
ENV BFANETWORKDIRPROD=${BFAHOME}/network BFANETWORKDIRTEST=${BFAHOME}/test2network PATH=${BFAHOME}/bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV BFANETWORKID=__BFANETWORKID__ BFANETWORKDIR=__BFANETWORKDIR__ GITBRANCH=__GITBRANCH__
ENV BFANODEDIR=${BFANETWORKDIR}/node BFATOML=${BFANETWORKDIR}/docker-config.toml
RUN mkdir ${BFANODEDIR} && ln -s ${BFANODEDIR} ${HOME}/.ethereum
USER ${USERNAME}
WORKDIR ${BFAHOME}
RUN git checkout ${GITBRANCH} && git pull
VOLUME [ "/home/bfa" ]
# bfanodo
Un nodo transaccional para BFA.
\ No newline at end of file
## Tu propio nodo en BFA.
### Instalando Docker
Si usas Debian empeza con:
```
apt install -y apt-transport-https ca-certificates curl gnupg-agent \
software-properties-common
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable"
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
apt update
apt install -y docker-ce docker-ce-cli containerd.io
docker run --rm hello-world
echo 'GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"' >> /etc/default/grub
update-grub
reboot
```
Si no usas Debian, en [https://docs.docker.com/install/] hay instrucciones
para instalar Docker para varios sistemas (CentOS, Debian, Fedora, Ubuntu).
Una vez instalado, podés correr varios dockers a la vez. Si ves el aviso
`WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.`
la solucion posible está en
[https://docs.docker.com/install/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities]
### Instalando tu bfanodo
Una vez que tenes Docker instalado, podes instalar tu propio nodo de BFA:
```
wget https://gitlab.bfa.ar/docker/bfanodo/raw/master/start.sh
bash start.sh latest
```
Si queres tu nodo conectado a la red de pruebar (`test2network`) en lugar de
a la red de produccion, el ultimo comando es:
```
bash start.sh test
```
### Caracteristicas
El **bfanodo** es un container/Docker que se puede descargar y correr en tu
propia servidor, maquina virtual o datacenter.
Se levanta como un nodo transaccional, **sin cuentas**, abierto a todo el mundo (o solamente a tu red, si usas NAT o/y firewall).
Ya que el nodo no tiene cuentas, solamente estas ofreciendo una puerta a la blockchain.
Si no deseas brindar este servicio a la red, se puede usar *ipfilter* o,
directamente no publicar los puertos 8545 y 8546 (anclarlos únicamente a 127.0.0.1). Para hacer eso, hay que cambiar los parametros
`-p` en `start.sh`.
Como se puede apreciar en el ejemplo aquí abajo, los puertos 30303/tcp, 8545/tcp y 8546/tcp estan abiertos al
mundo (0.0.0.0 = INADDR_ANY).
```
$ docker container port bfanodo
30303/tcp -> 0.0.0.0:30303
8545/tcp -> 0.0.0.0:8545
8546/tcp -> 0.0.0.0:8546
```
Es importante entender que si tu servidor incluye otros dockers, se pueden conectar con el parametro `--link`,
como se puede ver aqui:
```
$ docker run --rm -it --link bfanodo alpine env | grep BFANODO_PORT | sort
BFANODO_PORT_30303_TCP_ADDR=172.17.0.2
BFANODO_PORT_30303_TCP_PORT=30303
BFANODO_PORT_30303_TCP_PROTO=tcp
BFANODO_PORT_30303_TCP=tcp://172.17.0.2:30303
BFANODO_PORT_30303_UDP_ADDR=172.17.0.2
BFANODO_PORT_30303_UDP_PORT=30303
BFANODO_PORT_30303_UDP_PROTO=udp
BFANODO_PORT_30303_UDP=udp://172.17.0.2:30303
BFANODO_PORT_8545_TCP_ADDR=172.17.0.2
BFANODO_PORT_8545_TCP_PORT=8545
BFANODO_PORT_8545_TCP_PROTO=tcp
BFANODO_PORT_8545_TCP=tcp://172.17.0.2:8545
BFANODO_PORT_8546_TCP_ADDR=172.17.0.2
BFANODO_PORT_8546_TCP_PORT=8546
BFANODO_PORT_8546_TCP_PROTO=tcp
BFANODO_PORT_8546_TCP=tcp://172.17.0.2:8546
BFANODO_PORT=tcp://172.17.0.2:8545
```
Los puertos de los otros dockers están disponibles, sin usar
`--link` . Pero no van a estar publicados en las variables del entorno.
```
$ docker run --rm alpine sh -c "date | nc 172.17.0.2 8545" ; echo
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
Connection: close
400 Bad Request
```
(puerto abierto)
### Cuentas
Una leccion aprendida durante el primer año de BFA es que el `geth`
normalmente no necesita una cuenta asociada (esto obviamente es distinto si
se utiliza como nodo sellador).
Las cuentas deben estar asociadas a las applicaciones que se conectan al
nodo. Esto hace que el sistema sea más seguro, y que **cada applicacion
necesite su propia cuenta**.
Si queres crear la cuenta con `geth` en tu docker y exportarla a la vez, podes
hacerlo con el comando (ojo que los ` no son '):
```
docker run --rm -v `pwd`:/casa -u `id -u` bfaar/nodo geth --keystore /casa account new --password /dev/null
```
Esto va a generar el archivo con la llave en la
carpeta en donde estas actualmente (el `pwd`).
Es **super importante** tomar un copia/backup de el archivo con la llave
generada, antes de empezar usarla en la cadena.
### Registros / logs
Estos comandos pueden brindar mas informacion sobre tu bfanodo (y hasta darte un shell):
```
$ docker stats bfanodo
$ docker logs bfanodo
$ docker exec bfanodo localstate.pl
$ docker exec -it bfanodo bash
```
### Crear
Para crear el docker se utilizó el script `build.sh`. Por favor, no lo uses si no sabés como funciona todo.
FROM ethereum/solc:0.7.2-alpine AS solc
FROM ethereum/client-go:alltools-stable
LABEL maintainer="Robert Martin-Legene <robert@nic.ar>"
CMD [ "/bin/bash" ]
COPY --from=solc /usr/local/bin/solc /usr/local/bin
EXPOSE 8545 8546 30303
ENV USERNAME=bfa HOME=/home/bfa BFAHOME=/home/bfa/bfa BFANETWORKIDPROD=47525974938 BFANETWORKIDTEST=55555000000 VIRTUALIZATION=DOCKER BFANETWORKDIRPROD=/home/bfa/bfa/network BFANETWORKDIRTEST=/home/bfa/bfa/test2network PATH=/home/bfa/bfa/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 curl make g++ && find /var/cache/apk -type f -delete
USER ${USERNAME}
WORKDIR ${HOME}
RUN git clone --quiet https://gitlab.bfa.ar/blockchain/nucleo.git ${BFAHOME} && cd ${BFAHOME} && npm update && npm audit fix
# toolbase
Este container paquete contiene herramientas que son muy paracidos
para la `bfaar/nodo:latest` y `bfaar/nodo:test`
Probablemente no tenes que usarlo directamente, ni pensar que existe.
#!/bin/bash
# 20190829 Robert Martin-Legene
trap "exit 1" ERR
TAG=toolbase
docker build --no-cache -t bfaar/nodo:${TAG} .
read -p 'Upload? : ' -n 1
echo
test "$REPLY" = "y" || exit 0
docker push bfaar/nodo:${TAG}
#!/bin/bash
# 20190829 Robert Martin-Legene
# This builds the docker bfanode on a Debian host system.
trap "exit 1" ERR
OK=0
TAG="$1"
while [ "$OK" = "0" ]
do
case "$TAG" in
"latest")
DOCKERFILENAME=Dockerfile-${TAG}
sed '
s/BFANETWORKID=__BFANETWORKID__/BFANETWORKID=$BFANETWORKIDPROD/;
s/BFANETWORKDIR=__BFANETWORKDIR__/BFANETWORKDIR=$BFANETWORKDIRPROD/;
s/GITBRANCH=__GITBRANCH__/GITBRANCH=master/
' < Dockerfile > ${DOCKERFILENAME}
OK=1
;;
"test")
DOCKERFILENAME=Dockerfile-${TAG}
sed '
s/BFANETWORKID=__BFANETWORKID__/BFANETWORKID=$BFANETWORKIDTEST/;
s/BFANETWORKDIR=__BFANETWORKDIR__/BFANETWORKDIR=$BFANETWORKDIRTEST/;
s/GITBRANCH=__GITBRANCH__/GITBRANCH=dev/
' < Dockerfile > ${DOCKERFILENAME}
OK=1
;;
*)
read -p 'Build which tag (latest/test)? : ' TAG
;;
esac
done
docker build --no-cache -f ${DOCKERFILENAME} -t bfaar/nodo:${TAG} .
rm Dockerfile-${TAG}
if [ "$USER" = "robert" ]
then
read -p 'Upload? : ' -n 1
echo
test "$REPLY" = "y" || exit 0
docker push bfaar/nodo:${TAG} || ( echo "Did you remember to log in using 'docker login'?" ; false )
fi
#!/bin/bash
trap 'exit 1' ERR
if ! which docker > /dev/null 2>&1
then
echo 'Can not find Docker. Make sure it is installed.' >&2
exit 1
fi
if [ "$1" = "test" ]
then
# TEST
tag="test"
name="bfanodotest"
elif [ "$1" = "latest" ]
then
# PROD
tag="latest"
name="bfanodo"
else
echo Argument 1 must be either latest or test. >&2
exit 1
fi
# Run this just a single time.
# Docker itself makes sure it autostarts if it crashes or the server reboots.
docker run \
--detach \
--restart=unless-stopped \
--memory 4g \
$mounts \
-p 8545:8545 \
-p 8546:8546 \
-p 30303:30303 \
--name ${name} \
bfaar/nodo:${tag}