Skip to content

Instantly share code, notes, and snippets.

@romanz
Last active March 20, 2024 19:05
Show Gist options
  • Save romanz/17ff716f13a34df49ff4 to your computer and use it in GitHub Desktop.
Save romanz/17ff716f13a34df49ff4 to your computer and use it in GitHub Desktop.
Bitcoin Full Node on AWS Free Tier

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 (General-Purpose SSD) volume for blockchain storage to /dev/sdf.

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

Installing

(based on the following reddit post)

  • Run as superuser:
$ sudo dd if=/dev/zero of=/opt/swapfile bs=1M count=1024
$ sudo mkswap /opt/swapfile
$ sudo swapon /opt/swapfile 
$ mkdir ~/.bitcoin/
$ sudo add-apt-repository -y ppa:bitcoin/bitcoin
$ sudo apt-get update -y
$ sudo 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
/opt/swapfile swap swap defaults 0 0

Mount them using:

sudo mount -a
  • Torrent bootstrap.dat for speed, as described here.
  • 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 <x> go into the class with "... handle <x> 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
@reboot sudo /home/ubuntu/.bitcoin/utils/tc.sh
@daily logrotate /home/ubuntu/.bitcoin/utils/logrotate.conf

Testing

  • Run bitcoin server and watch its log file:
bitcoind
tail -F ~/.bitcoin/debug.log
@ofarukcaki
Copy link

How 40gb storage is enough for blockchain? the size is about 180gb now

@igorgue
Copy link

igorgue commented Jun 11, 2018

@ofarukcaki How's the first comment on Oct 9, 2014 not 2017?

@inherithandle
Copy link

Now I feel bad it costs $19.25 a month or $30 without a free tier

@krtschmr
Copy link

@inherithandle yeah, i wondered about 3$ a month. lol

@gg2001
Copy link

gg2001 commented Mar 26, 2019

Would mounting S3 be cheaper than using EBS? Would using a hard drive also be cheaper as well?

@kikoncuo
Copy link

BTW you can run the node in 30GB with prune activated

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