# bfanodo ## Tu nodo en BFA. ### Instalando Docker Si usas Debian empeza con: ``` apt-get install 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" apt update apt install -y docker-ce docker-ce-cli containerd.io docker run 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 ``` ### 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**. ### 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.