Skip to content

Instantly share code, notes, and snippets.

@mks-m
Forked from romanz/fullnode.md
Last active November 13, 2023 14:26
Show Gist options
  • Save mks-m/e0f1c7555e8f3e7da4a103c2418e82d8 to your computer and use it in GitHub Desktop.
Save mks-m/e0f1c7555e8f3e7da4a103c2418e82d8 to your computer and use it in GitHub Desktop.
Bitcoin Full Node on AWS Free Tier

Running Bitcoin Full Node on AWS Free Tier

Provisioning

  • Launch one T2 micro instance, using Ubuntu 14.04 LTS AMI.
  • Open SSH and Bitcoin Protocol TCP ports: 22, 8333.
  • Attach 40GB EBS volume for blockchain storage to /dev/sdf.
  • Attach 1GB EBS volume for swap to /dev/sdp.

The pricing should be ~3$ for the first year (assuming 30GB upload per month). See here for more details.

Installing

  • Run as superuser:

    add-apt-repository -y ppa:bitcoin/bitcoin apt-get update -y mkdir ~/.bitcoin/ apt-get install bitcoind -y

  • Add the following to /etc/fstab configuration:

    /dev/xvdf is EXT4 filesystem under /home/ubuntu/.bitcoin

    /dev/xvdf /home/ubuntu/.bitcoin ext4 defaults 0 0

    /dev/xvdp1 is a swap partition

    /dev/xvdp1 none swap sw 0 0

  • Use the following configuration file (.bitcoin/bitcoin.conf):

    server=1 daemon=1 connections=40 rpcuser=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX rpcpassword=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY disablewallet=1

  • Use the following traffic control script (.bitcoin/utils/tc.sh) for bandwidth throttling:

    #network interface on which to limit traffic IF="eth0" #limit of the network interface in question LINKCEIL="1gbit" #limit outbound Bitcoin protocol traffic to this rate LIMIT="200kbit" #defines the address space for which you wish to disable rate limiting LOCALNET="172.31.0.0/16"

    #delete existing rules tc qdisc del dev ${IF} root

    #add root class tc qdisc add dev ${IF} root handle 1: htb default 10

    #add parent class tc class add dev ${IF} parent 1: classid 1:1 htb rate ${LINKCEIL} ceil ${LINKCEIL}

    #add our two classes. one unlimited, another limited tc class add dev ${IF} parent 1:1 classid 1:10 htb rate ${LINKCEIL} ceil ${LINKCEIL} prio 0 tc class add dev ${IF} parent 1:1 classid 1:11 htb rate ${LIMIT} ceil ${LIMIT} prio 1

    #add handles to our classes so packets marked with go into the class with "... handle fw ..." tc filter add dev ${IF} parent 1: protocol ip prio 1 handle 1 fw classid 1:10 tc filter add dev ${IF} parent 1: protocol ip prio 2 handle 2 fw classid 1:11

    #limit outgoing traffic to and from port 8333. but not when dealing with a host on the local network iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d ${LOCALNET} -j MARK --set-mark 0x2 iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d ${LOCALNET} -j MARK --set-mark 0x2

  • Use the following logrotate script (.bitcoin/utils/rotate.conf):

    "/home/ubuntu/.bitcoin/debug.log" { daily missingok rotate 5 copytruncate compress }

  • Use the following crontab:

    @reboot bitcoind -daemon @reboot sudo /home/ubuntu/.bitcoin/utils/tc.sh @daily logrotate /home/ubuntu/.bitcoin/utils/logrotate.conf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment