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 (23)
FROM ethereum/solc:0.5.10-alpine AS solc
FROM ethereum/client-go:alltools-v1.9.2
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" ]
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/*
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 ${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" ]
RUN git checkout ${GITBRANCH} && git pull
VOLUME [ "/home/bfa" ]
# bfanodo
## Un nodo transaccional para BFA.
## 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 podes bajar y correr en tu
propia maquina, maquina virtual o datacenter. Se levanta como un nodo
transaccional, **sin cuentas**, abierto a todo el mundo.
Si no queres brindar este servicio a la red, podes usar *ipfilter* o
(mas facil) no publicar el puerto 8545 (atalo (bind) a 127.0.0.1
solamente, igual que puerto 8546). Para hacer eso, tenes que cambiar
los parametros `-p` en `start.sh`.
El **bfanodo** es un container/Docker que se puede descargar y correr en tu
propia servidor, maquina virtual o datacenter.
Como ves en el ejemplo abajo, puerto 30303/tcp y 8545/tcp estan abiertos al
mundo (0.0.0.0 = INADDR_ANY) y 8546/tcp esta abierto solamente para
conecciones de tu maquina.
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 -> 127.0.0.1:8546
8546/tcp -> 0.0.0.0:8546
```
Es importante entender que "tu maquina" incluye otros dockers en
la misma maquina, si las has conectado con el parametro `--link`,
como se puede ver aqui:
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
......@@ -45,8 +86,8 @@ 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 estan disponibles de los otros dockers tambien sin usar
`--link` pero no van a estar publicados en variables del entorno.
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
......@@ -59,50 +100,36 @@ Connection: close
### Cuentas
Una leccion aprendido durante el primer año de BFA es, que el `geth`
normalmente no necesita una cuenta asociado (eso obviamente es distinto si
lo usas como nodo sellador).
Las cuentas deben estar asociados a los applicaciones que se conecta al
nodo. Ese hace es sistema mas seguro, y **cada applicacion necesita su
propia cuenta**.
Si no sos miembro del grupo `docker` (en `/etc/group` ) tenes que hacer todo como `root`
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).
Te va a crear un directorio en `~/dockers/volumes/bfanodo,home,bfa,bfa,network,node,geth` . Si tenes cuentas/llaves van ahi. Toda la blockchain tambien se ve ahi, para que no hay que bajar toda la blockchain de vuelta al actualizar el nodo.
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**.
### Instalando Docker
En [https://docs.docker.com/install/] hay instrucciones para instalar Docker para varios
sistemas (CentOS, Debian, Fedora, Ubuntu).
Una vez instalado, podes 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 esta en https://docs.docker.com/install/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities
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 '):
Normalmente es suficiente (en Debian) con:
```
$ echo 'GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"' >> /etc/default/grub
$ update-grub
$ reboot
docker run --rm -v `pwd`:/casa -u `id -u` bfaar/nodo geth --keystore /casa account new --password /dev/null
```
### Instalando bfanodo
```
$ wget https://gitlab.bfa.ar/docker/bfanodo/raw/master/start.sh
$ ./start.sh
```
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
Para ver como esta tu bfanodo, estos comandos pueden brindar mas informacion (y hasta darte un shell):
Estos comandos pueden brindar mas informacion sobre tu bfanodo (y hasta darte un shell):
```
$ docker stats bfanodo
$ docker logs bfanodo
$ docker exec bfanodo bfalog.sh
$ docker exec bfanodo localstate.pl
$ docker exec -it bfanodo bash
```
### Crear
Para crear el docker uso el script `build.sh`. No lo uses si no sabes como funciona todo.
\ No newline at end of file
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.
# 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}
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 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 )
docker push bfaar/nodo:${TAG} || ( echo "Did you remember to log in using 'docker login'?" ; false )
fi
......@@ -4,23 +4,34 @@ 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
echo 'Can not find Docker. Make sure it is installed.' >&2
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"
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
docker run --rm $mounts -u root alpine chown -R 30303:30303 /home/bfa/bfa/network
docker run -d --memory 4g $mounts -p 8545:8545 -p 127.0.0.1:8546:8546 -p 30303:30303 --restart=unless-stopped --name bfanodo rlegene/bfanode
# 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}