-
-
Save mks-m/e0f1c7555e8f3e7da4a103c2418e82d8 to your computer and use it in GitHub Desktop.
Bitcoin Full Node on AWS Free Tier
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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](http://calculator.s3.amazonaws.com/index.html#r=IAD&s=EC2&key=calc-7C655B73-FA35-40F0-9518-4773E3E4A8C7) for more details. | |
## Installing | |
- Run as superuser: | |
``` | |
$ sudo add-apt-repository -y ppa:bitcoin/bitcoin | |
$ sudo apt-get update -y | |
$ mkdir ~/.bitcoin/ | |
$ 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 | |
# /dev/xvdp1 is a swap partition | |
/dev/xvdp1 none swap sw 0 0 | |
``` | |
Mount them using: | |
``` | |
sudo mount -a | |
``` | |
- 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 | |
``` | |
- Connect to its public IP from https://getaddr.bitnodes.io/, to make sure it is accepting connections from other nodes. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment