Skip to content
Snippets Groups Projects
README.md 4.53 KiB
Newer Older
Robert Martin-Legene's avatar
Robert Martin-Legene committed
# bfanodo

Robert Martin-Legene's avatar
Robert Martin-Legene committed
## Tu propio nodo en BFA.

### Instalando Docker

Si usas Debian empeza con:

```
Robert Martin-Legene's avatar
Robert Martin-Legene committed
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"
Robert Martin-Legene's avatar
Robert Martin-Legene committed
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
apt update
apt install -y docker-ce docker-ce-cli containerd.io
Robert Martin-Legene's avatar
Robert Martin-Legene committed
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:

```
Robert Martin-Legene's avatar
Robert Martin-Legene committed
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
Robert Martin-Legene's avatar
Robert Martin-Legene committed
### Caracteristicas

Daniel Franca's avatar
Daniel Franca committed
El **bfanodo** es un container/Docker que se puede descargar y correr en tu
propia servidor, maquina virtual o datacenter. 
Daniel Franca's avatar
Daniel Franca committed

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.
Daniel Franca's avatar
Daniel Franca committed
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
Daniel Franca's avatar
Daniel Franca committed
`-p` en `start.sh`.

Daniel Franca's avatar
Daniel Franca committed
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).
Robert Martin-Legene's avatar
Robert Martin-Legene committed
```
$ docker container port bfanodo
30303/tcp -> 0.0.0.0:30303
8545/tcp -> 0.0.0.0:8545
Daniel Franca's avatar
Daniel Franca committed
8546/tcp -> 0.0.0.0:8546
Daniel Franca's avatar
Daniel Franca committed
Es importante entender que si tu servidor incluye otros dockers, se pueden conectar con el parametro  `--link`,
como se puede ver aqui: 
Robert Martin-Legene's avatar
Robert Martin-Legene committed
```
Robert Martin-Legene's avatar
Robert Martin-Legene committed
$ docker run --rm -it --link bfanodo alpine env | grep BFANODO_PORT | sort
Robert Martin-Legene's avatar
Robert Martin-Legene committed
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
```
Daniel Franca's avatar
Daniel Franca committed
Los puertos de los otros dockers están disponibles, sin usar
`--link` . Pero no van a estar publicados en las variables del entorno.
Robert Martin-Legene's avatar
Robert Martin-Legene committed
```
Robert Martin-Legene's avatar
Robert Martin-Legene committed
$ docker run --rm alpine sh -c "date | nc 172.17.0.2 8545" ; echo
Robert Martin-Legene's avatar
Robert Martin-Legene committed
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
Connection: close

400 Bad Request
```
(puerto abierto)

### Cuentas

Daniel Franca's avatar
Daniel Franca committed
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).
Daniel Franca's avatar
Daniel Franca committed
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.
Robert Martin-Legene's avatar
Robert Martin-Legene committed
### Registros / logs

Daniel Franca's avatar
Daniel Franca committed
Estos comandos pueden brindar mas informacion sobre tu bfanodo (y hasta darte un shell):
Robert Martin-Legene's avatar
Robert Martin-Legene committed
```
$ docker stats bfanodo
$ docker logs bfanodo
$ docker exec bfanodo localstate.pl
$ docker exec -it bfanodo bash
Robert Martin-Legene's avatar
Robert Martin-Legene committed
```
Para crear el docker se utilizó el script `build.sh`. Por favor, no lo uses si no sabés como funciona todo.