1 How to run your own Electrum server
2 ===================================
7 This document is an easy to follow guide to installing and running your own
8 Electrum server on Linux. It is structured as a series of steps you need to
9 follow, ordered in the most logical way. The next two sections describe some
10 conventions we use in this document and hardware, software and expertise
13 The most up-to date version of this document is available at:
15 https://github.com/spesmilo/electrum-server/blob/master/HOWTO.md
20 In this document, lines starting with a hash sign (#) or a dollar sign ($)
21 contain commands. Commands starting with a hash should be run as root,
22 commands starting with a dollar should be run as a normal user (in this
23 document, we assume that user is called 'bitcoin'). We also assume the
24 bitcoin user has sudo rights, so we use '$ sudo command' when we need to.
26 Strings that are surrounded by "lower than" and "greater than" ( < and > )
27 should be replaced by the user with something appropriate. For example,
28 <password> should be replaced by a user chosen password. Do not confuse this
29 notation with shell redirection ('command < file' or 'command > file')!
31 Lines that lack hash or dollar signs are pastes from config files. They
32 should be copied verbatim or adapted, without the indentation tab.
37 **Expertise.** You should be familiar with Linux command line and
38 standard Linux commands. You should have basic understanding of git,
39 Python packages. You should have knowledge about how to install and
40 configure software on your Linux distribution. You should be able to
41 add commands to your distribution's startup scripts. If one of the
42 commands included in this document is not available or does not
43 perform the operation described here, you are expected to fix the
44 issue so you can continue following this howto.
46 **Software.** A recent Linux distribution with the following software
47 installed: `python`, `easy_install`, `git`, a SQL server, standard C/C++
48 build chain. You will need root access in order to install other software or
49 Python libraries. You will need access to the SQL server to create users and
52 **Hardware.** It's recommended to run a pruning server with leveldb.
53 It is a light setup with diskspace requirements well under 1 GB growing
54 very moderately and less taxing on I/O and CPU once it's up and running.
55 Full (archival) servers on the other hand use SQL. At the time of this writing,
56 the Bitcoin blockchain is 5.5 GB large. The corresponding SQL database is
57 about 4 time larger, so you should have a minimum of 22 GB free space just
58 for SQL, growing continuously.
59 CPU speed is also important, mostly for the initial block chain import, but
60 also if you plan to run a public Electrum server, which could serve tens
61 of concurrent requests. See step 6 below for some initial import benchmarks
67 ### Step 0. Create a user for running bitcoind and Electrum server
69 This step is optional, but for better security and resource separation I
70 suggest you create a separate user just for running `bitcoind` and Electrum.
71 We will also use the `~/bin` directory to keep locally installed files
72 (others might want to use `/usr/local/bin` instead). We will download source
73 code files to the `~/src` directory.
75 # sudo adduser bitcoin
80 If you don't see `/home/bitcoin/bin` in the output, you should add this line
81 to your `.bashrc`, `.profile` or `.bash_profile`, then logout and relogin:
83 PATH="$HOME/bin:$PATH"
85 ### Step 1. Download and install Electrum
87 We will download the latest git snapshot for Electrum and 'install' it in
90 $ mkdir -p ~/src/electrum
92 $ git clone https://github.com/spesmilo/electrum-server.git server
93 $ chmod +x ~/src/electrum/server/server.py
94 $ ln -s ~/src/electrum/server/server.py ~/bin/electrum
96 ### Step 2. Donwnload Bitcoind from git & patch it
98 In order for the latest versions of Electrum to work properly we will need to use the latest
99 build from Git and also patch it with an electrum specific patch.
101 $ cd src && git clone git://github.com/bitcoin/bitcoin.git
103 $ patch -p1 < ~/src/electrum/server/patch/patch
104 $ cd src && make -f makefile.unix
106 ### Step 3. Configure and start bitcoind
108 In order to allow Electrum to "talk" to `bitcoind`, we need to set up a RPC
109 username and password for `bitcoind`. We will then start `bitcoind` and
110 wait for it to complete downloading the blockchain.
113 $ $EDITOR ~/.bitcoin/bitcoin.conf
115 Write this in `bitcoin.conf`:
117 rpcuser=<rpc-username>
118 rpcpassword=<rpc-password>
125 Allow some time to pass, so `bitcoind` connects to the network and starts
126 downloading blocks. You can check its progress by running:
130 You should also set up your system to automatically start bitcoind at boot
131 time, running as the 'bitcoin' user. Check your system documentation to
132 find out the best way to do this.
135 ### Step 4. Select your backend - pruning leveldb or full abe server
137 Electrum server can currently be operated in two modes - as a pruning server
138 or as a full server. The pruning server uses leveldb and keeps a smaller and
139 faster database by pruning spent transactions. It's a lot quicker to get up
140 and running and requires less maintenance and diskspace than the full abe
143 The full version uses abe as a backend. While the blockchain in bitcoind
144 is at roughly 5.5 GB in January 2013, the abe mysql for a full server requires
145 ~25 GB diskspace for innodb and can take a week or two (!) to freshly index
146 on most but the fastest of hardware.
148 Full servers are useful for recovering all past transactions when restoring
149 from seed. Those are then stored in electrum.dat and won't need to be recovered
150 until electrum.dat is removed. Pruning servers summarize spent transactions
151 when restoring from seed which can be feature. Once seed recovery is done
152 switching between pruning and full servers can be done at any time without effect
153 to the transaction history stored in electrum.dat.
155 While it's useful for Electrum to have a number of full servers it is
156 expected that the vast majority of servers available publicly will be
159 If you decide to setup a pruning server with leveldb take a break from this
160 document, read and work through README.leveldb then come back
161 install jsonrcp (but not abe) from step 5 and then skip to step 8
163 ### Step 5. Install Electrum dependencies
165 Electrum server depends on various standard Python libraries. These will be
166 already installed on your distribution, or can be installed with your
167 package manager. Electrum also depends on two Python libraries which we wil
168 l need to install "by hand": `Abe` and `JSONRPClib`.
170 $ sudo easy_install jsonrpclib
172 $ wget https://github.com/jtobey/bitcoin-abe/archive/v0.7.1.tar.gz
174 $ sudo python setup.py install
176 Electrum server does not currently support abe > 0.7.1 so please stick
177 with 0.7.1 for the time being. If you're version is < 0.7 you need to upgrade
180 Please note that the path below might be slightly different on your system,
181 for example python2.6 or 2.8.
183 $ sudo chmod +x /usr/local/lib/python2.7/dist-packages/Abe/abe.py
184 $ ln -s /usr/local/lib/python2.7/dist-packages/Abe/abe.py ~/bin/abe
187 ### Step 6. Configure the database
189 Electrum server uses a SQL database to store the blockchain data. In theory,
190 it supports all databases supported by Abe. At the time of this writing,
191 MySQL and PostgreSQL are tested and work ok, SQLite was tested and *does not
192 work* with Electrum server.
197 mysql> create user 'electrum'@'localhost' identified by '<db-password>';
198 mysql> create database electrum;
199 mysql> grant all on electrum.* to 'electrum'@'localhost';
206 ### Step 7. Configure Abe and import blockchain into the database
208 When you run Electrum server for the first time, it will automatically
209 import the blockchain into the database, so it is safe to skip this step.
210 However, our tests showed that, at the time of this writing, importing the
211 blockchain via Abe is much faster (about 20-30 times faster) than
212 allowing Electrum to do it.
214 $ cp ~/src/bitcoin-abe/abe.conf ~/abe.conf
217 For MySQL, you need these lines:
220 connect-args = { "db" : "electrum", "user" : "electrum" , "passwd" : "<database-password>" }
222 For PostgreSQL, you need these lines:
228 $ abe --config ~/abe.conf
230 Abe will now start to import blocks. You will see a lot of lines like this:
232 'block_tx <block-number> <tx-number>'
234 You should wait until you see this message on the screen:
236 Listening on http://localhost:2750
238 It means the blockchain is imported and you can exit Abe by pressing CTRL-C.
239 You will not need to run Abe again after this step, Electrum server will
240 update the blockchain by itself. We only used Abe because it is much faster
241 for the initial import.
243 Important notice: This is a *very* long process. Even on fast machines,
244 expect it to take hours. Here are some benchmarks for importing
245 ~196K blocks (size of the Bitcoin blockchain in Septeber 2012):
247 * System 1: ~9 hours.
248 * CPU: Intel Core i7 Q740 @ 1.73GHz
250 * System 2: ~55 hours.
251 * CPU: Intel Xeon X3430 @ 2.40GHz
252 * HDD: 2 x SATA in a RAID1.
254 ### Step 8. Configure Electrum server
256 Electrum reads a config file (/etc/electrum.conf) when starting up. This
257 file includes the database setup, bitcoind RPC setup, and a few other
260 $ sudo cp ~/src/electrum/server/electrum.conf.sample /etc/electrum.conf
261 $ sudo $EDITOR /etc/electrum.conf
263 Go through the sample config options and set them to your liking.
264 If you intend to run the server publicly have a look at README-IRC.md
266 Ifu're looking to run SSL / HTTPS you need to generate a self-signed certificate
267 using openssl. Otherwise you can just comment out the SSL / HTTPS ports and run
270 ### Step 9. (Finally!) Run Electrum server
272 The magic moment has come: you can now start your Electrum server:
276 You should see this on the screen:
278 starting Electrum server
281 If you want to stop Electrum server, open another shell and run:
283 $ electrum-server stop
285 You should also take a look at the 'start' and 'stop' scripts in
286 `~/src/electrum/server`. You can use them as a starting point to create a
287 init script for your system.
289 ### Step 10. Test the Electrum server
291 We will assume you have a working Electrum client, a wallet and some
292 transactions history. You should start the client and click on the green
293 checkmark (last button on the right of the status bar) to open the Server
294 selection window. If your server is public, you should see it in the list
295 and you can select it. If you server is private, you need to enter its IP
296 or hostname and the port. Press Ok, the client will disconnect from the
297 current server and connect to your new Electrum server. You should see your
298 addresses and transactions history. You can see the number of blocks and
299 response time in the Server selection window. You should send/receive some
300 bitcoins to confirm that everything is working properly.
302 ### Step 11. Join us on IRC
304 Say hi to the dev crew, other server operators and fans on
305 irc.freenode.net #electrum and we'll try to congratulate you
306 on supporting the community by running an Electrum node