Running a Helium Miner on DigitalOcean

In this tutorial, we are going to configure a brand new $5/month DigitalOcean server that will run one or multiple Helium miners. Note that by using the link above, you will be rewarded with a $100 credit bonus that is valid for two months, which is perfect to test the platform and also two months of free miner hosting!

I am not going to get into details about what Helium is and how to use it, but it’s an amazing project where people all around the world are getting together to build a HUGE LoraWAN mesh network to enable anyone to have access to an almost-free IoT network. To check more, go to

This tutorial video

If this video helped you, please consider donating to:

  • BuyMeACoffee –
  • BTC – bc1qwn59fjhmz2wy376y6vltjj73a63j0nzaapu42f
  • ETH – 0x2b4d4a660CddaE942C26821a5512c32023719476
  • HNT – 14bnEtUmqPaCrXmjzQ8XasTJhz7hfyWY9gt2ByqUdvBJVVEczmr

Create a new DigitalOcean Server

After creating your DigitalOcean account, log in, and create a new Droplet like the gif below:

Once your droplet has finished provisioning, you will be able to connect to it using the provided IPv4 address and the password that you used on the previous step. For this tutorial, the server IPv4 is, remember this as we will use it in many future steps.

Let’s connect to the server using the terminal. If you are on Mac you can use iTerm, and if you are on Windows, I recommend checking out the Windows Terminal. If you have any questions, just fill out the comment form with your questions and I will do the best to help you out!

To connect to the server, on the terminal, type ssh root@ (change the IP to your own server address), type yes and the password.

If you see root@helium-miner:~#, this means that you are connected! Type apt update && apt upgrade to make sure we have all programs running on the latest version!

Good job, let’s move on to the next steps.

Let’s check if docker is working by typing docker ps:

Opening Ports

From the helium miner documentation: Before launching the Miner, you will want to configure ports on your network to forward two ports:

  • 44158/TCP: the Miner communicates to other Miners over this port. The networking logic knows how to get around a lack of forwarding here, but you will get better performance by forwarding the port.
  • 1680/UDP: the radio connects to the Miner over this port. You will not be able to forward packets or participate in Proof of Coverage without this.

This means that for the miner, we need to open ports 44158/TCP and 1680/UDP, to do so, type ufw allow 44158/tcp and ufw allow 1680/udp.

Running your container

It’s time to configure and install the miner. First of all, let’s create a folder where we will store all the miner files. On the terminal, type mkdir ~/miner_data to create an empty folder where all the miner data will resid.

Create a file caller with nano and type the following code block:

docker run -d \
--restart always \
--publish 1680:1680/udp \
--publish 44158:44158/tcp \
--name miner \
--mount type=bind,source=/root/miner_data,target=/var/data \

You need to change two lines on the block, the first is to make sure you are using the right REGION_OVERRIDE frequency to:

US915 | EU868 | EU433 | CN470 | CN779 | AU915 | AS923 | KR920 | IN865
As I am in Europe, I am going with EU868 (Europe, frequency 868Mhz).

The second part that you need to update is the last line, where you need to select the right docker image. You can get the latest version at For this server, make sure to use an amd64 image such as miner-amd64_2020.08.21.0_GA, which is the latest one (at the time I am writing this).

At this point, everything is ready to go! All you need to do is to start the miner using sh and it should start!!! The first thing docker will do is check if you have the images on your server, which you don’t, and download them. Then it will automatically start the miner, which will then start syncing with the blockchain!

To check if the image is running, type docker ps, and the result should be something similar to this:

On your gateway, point it to our server and you will be good to go!


Backup your swarm key

This step is extremely important! Once helium enables miners to actually mine HNT tokens, you will need to pay $50 to join the network, and if you lose the key, you will need to purchase a new one!

To back up the key, go to the miner folder ~/miner_data/miner, and inside you will find a file called swarm_key. Make sure you save this somewhere safe for future use. (If something goes wrong with the server, this is the only file that will enable you to recover your miner!)

Check if the blockchain is in sync

The command docker exec miner miner info height && curl will compare the height of the blockchain we have on the server with the real one. Once the two numbers match, it means that our server is fully in sync and ready to roll!

As you can see in the image above, my server is yet not in sync as locally I have 455760 and the official block height is 465893.

Running multiple miners on the same server

To run a second miner, you need to open two new ports, 1681/udp and 44159/tcp with ufw allow 44159/tcp and ufw allow 1681/udp.

Create a new folder for the miner data with mkdir ~/miner_data2, create a new and edit the file as suggested below:

docker run -d \
--restart always \
--publish 1681:1680/udp \
--publish 44159:44158/tcp \
--name miner2 \
--mount type=bind,source=/root/miner_data2,target=/var/data \

Then to run it, simply type sh
To test the block sync, use docker exec miner2 miner info height && curl


  1. I’m getting an error message when running the code.

    “docker run” requires at least 1 argument.
    See ‘docker run -help’.
    Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

    Run a command in a new container 2: –env: not found 3: –restart: not found 4: –publish: not found 5: –publish: not found 6: –name: not found 7: –mount: not found 8: not found

  2. I set this up two nights ago (thank you, btw. AWS is a nightmare) and I left it to finish syncing. All seemed good. Logged back into my DO account just now and am getting a message that my account has been locked. “your account has been flagged for abuse. If you feel that our system has made an error please open a support ticket.” Any advice?

  3. Great tutorial. Nicely done.

    Do you have hardware for each of these miners? I’m not quite understanding the purpose of this set up if you don’t. (Sorry I’m new to the Helium DIY space).

  4. I guess you’d update the line
    when a new miner is out? I’m a noob

  5. I receive a similar error, and I cannot find where I am copying anything wrong.

    ubuntu@ip-172-31-19-62:~$ sh
    “docker run” requires at least 1 argument.
    See ‘docker run –help’.

    Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

    Run a command in a new container

    1. Hey Jay, I’m also a bit noobish but I managed to back-up my key using the “scp” command:

      From destination (if you are writing the command on your local Pi/Windows Subsystem Linux Terminal):
      scp username@droplet_ip:/path/to/file /path/to/destination

      From source (if you are writing the command on your mining Pi/DigitalOcean/AWS terminat):
      scp /path/to/file username@destination_host:/path/to/destination

      From elsewhere:
      scp username@source_ip:/path/to/file username@destination:/path/to/destination

    1. Good idea! I am extremely busy in the next two weeks, as soon as this load of work is done, I will put some more love on the tutorials and update with more information! 🙂

  6. what if you copy the swam key from a real official helium hotspot and put it on a diy helium hotspot.
    would it mine HNT?
    in that way would it be possible to mine HNT on it without even having the wireless stuff installed on it?

      1. So helium miner on digital ocean still able to buy swarm key for 50 now days or is it waisting time because I just ran through all the steps and now ready for the 50 keys to mine hnt

  7. Thanks for the video and great walk through. I’m new to helium mining. I originally set up port forwarding on my router for 44158 and 1681, but I didn’t realize my IP address was private due to my service provider. This seems like the solution for me to be able to obtain a static IP Address and fix my port forwarding issue.

    Question: How does the server I set up on digital ocean know to connect with my particular helium miner?

    The configuration shown via is for the helium blockchain as a whole, no?

    Sorry I’m really new to these networking ideas.

  8. do miners arrive with blank ATECC608A chips is it the onboarding process that then issues the swarm key

  9. in regards to “do miners arrive with blank ATECC608A chips is it the onboarding process that then issues the swarm key” is looks like the chip is shipped with a unique serial number … and that the chip also generates all keys (secret and public) internally . This makes me think that then these keys are actualy triggered to be made during the onboarding process locking the miner to the helium blockchain info from data sheet

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.