>> (p.1)
    Author Topic: 🔥🔥 Complete GUIDE for Lightning Desktop Nodes  (Read 565 times)
    This is a self-moderated topic. If you do not want to be moderated by the person who started this topic, create a new topic. (1 post by 1+ user deleted.)
    Satofan44 (OP)
    Member
    **
    Offline Offline

    Activity: 98
    Merit: 247


    View Profile
    May 09, 2025, 06:13:56 PM
    Last edit: June 10, 2025, 08:59:40 PM by Satofan44
    Merited by LoyceV (42), Halab (2), joker_josue (2), Mahiyammahi (2)
     #1

    I got inspired from trying to participate in NotATether's Lightning challenge, and decided to undertake on a big project. I am aware that there are various guides online, documentation and everything but as my experience trying to set up lightning shows, they have issues. Sometimes information is lacking, sometimes they have errors or outdated instructions, and other times they come with different assumptions of user knowledge which are implicit and not warranted or helpful.

    My focus will be on desktop wallets, as mobile wallets usually do not require guides or require minimum setup. If you have issues with a mobile application, contact the developers of it. It is likely related to your specific device and OS version configuration. This is an experimental break-down of every wallet that I have attempted to install. The guide will also focus on providing information for a Linux Ubuntu using up to date information. If someone else wants to repeat this process for your own OS, you are very welcome to contribute with that information. If you have suggestions or feedback, feel free to post them here or DM me directly.  Smiley

    Important Reminders
    • Some attempts might not work out, as was the case with my first try using Eclair. But that doesn’t make the guide less valuable, failure is an integral part of this journey. As we figure things out, I’ll update the guide accordingly. There will also be a FAQ section which is very much needed. My personal experience is that sometimes looking up information regarding errors results with no useful information.
    • At times basic Linux knowledge is required and expected. If you're new to Linux, make sure you're comfortable with tasks like navigating directories, using the terminal, and more. If you're not sure, check out a guide such as this one: https://www.geeksforgeeks.org/30-days-of-linux/. For those that have a GUI, you will have an easier time just using it for basic operations instead of the commands but you are welcome to try and learn.



    Part 1: Prerequisites and Installation

    The list of LN wallets that are part of this guide:

    Operating System: Ubuntu 24.04 LTS, desktop or server.
    Probably any Ubuntu/Debian derivative will work, but I can't guarantee it. You are free to try. To limit duplication of information, a short-guide for Bitcoin Core will be provided in this section.

    1. User Account Setup:
    For security reasons, you should not run anything as root. It is recommended to create a new user account. I highly recommend that you read more about this here: https://dev.to/despider/why-not-to-use-root-user-317a.
    For this guide, we will create a user called lightning and work under it. Open a terminal and run the commands at each step in the order that they are provided. Commands are always shown in code blocks.

    1. Create the user called lightning. You will be asked to set a password. For the remaining information that you are asked to input, you don't have to enter anything.
    Code:
    sudo adduser lightning
    sudo usermod -aG sudo lightning
    2. To work using this user account you must use this command.
    Code:
    su lightning

    2. Bitcoin Core Setup:
    1. Download the latest release from here: https://bitcoincore.org/en/download/. At the time of writing this was v29.0. In most situations where Ubuntu is usually used, you will require the file that is linked as Linux (tgz). Note: If you want to do additional verification on the download, the instructions for several operating systems are found on the same link. I will not reproduce them here. I will work in thehome/ folder but you can work in any location of your preference. In this step, the commands will navigate to the user's home folder, download Bitcoin Core and extract it.
    Code:
    cdhome/lightning/
    wget https://bitcoincore.org/bin/bitcoin-core-29.0/bitcoin-29.0-x86_64-linux-gnu.tar.gz
    tar -xvf bitcoin-29.0-x86_64-linux-gnu.tar.gz
    2. To be able to start bitcoind and bitcoin-cli from anywhere, it has to be moved to a new location. We do this under /home/lightning/.bin and load the configuration from .profile using the source command to make it work. You will need to use the source command to load the configuration for each new terminal you open (if they are non login terminals like you would have when using Ubuntu Desktop).
    Code:
    mkdirhome/lightning/bin
    mvhome/lightning/bitcoin-29.0/bin/bitcoin-clihome/lightning/bin
    mvhome/lightning/bitcoin-29.0/bin/bitcoindhome/lightning/bin
    sourcehome/lightning/.profile
    3. The default data directory is ~/.bitcoin which in our case ishome/lightning/.bitcoin. To keep things simpler we will also use this location. You can change this by specifying --datadir if you want. In this step, we create the directory, the bitcoin.conf files and specify the needed configurations. I will use nano as the text editor as it is more user friendly.  
    Code:
    mkdirhome/lightning/.bitcoin
    nanohome/lightning/.bitcoin/bitcoin.conf
    Use the following configuration options and make sure to specify your own RPC username and password.
    Quote
    daemon=1
    server=1
    txindex=1
    wallet=firstwallet
    rpcuser=yourusername
    rpcpassword=yourpassword

    zmqpubrawblock=tcp://127.0.0.1:29000
    zmqpubhashblock=tcp://127.0.0.1:29000
    zmqpubrawtx=tcp://127.0.0.1:29001
    Information about each option used here is provided in the FAQ. Please read the 3rd post of this thread. Note: You will need 750 GB or more disk space to run a full node.

    4. If you have done everything correctly the following things will be done: First start bitcoind, and give it a few seconds of time to run properly. Then use bitcoin-cli to create a new wallet called firstwallet.
    Code:
    bitcoind
    bitcoin-cli createwallet firstwallet
    To confirm you have done this successfully, you will receive a response like this:
    Quote
    {
      "name": "firstwallet"
    }
    Next, a shutdown of the software is done using the -cli and it is started again using the bitcoind. Note: as some system configurations can be slow, always give bitcoind a few seconds of time before running the next command in any code block. If you run commands too fast after startup you will receive a error.
    Code:
    bitcoin-cli stop
    bitcoind
    While this step was not entirely necessary as Bitcoin Core will automatically load the created wallet in the current instance, it is provided so that the configuration file can be tested. You want to make sure that your wallet will load when you restart the software as well. To check the currently loaded wallets after doing a restart, use the following command:
    Code:
    bitcoin-cli listwallets
    Again, if you get this response that means you have completed the steps correctly.
    Quote
    {
      "name": "firstwallet"
    }
    5. The final step is to fully synchronize the blockchain. You can check the status of your node with the following command:
    Code:
    bitcoin-cli getblockchaininfo
    You will receive a response like this:
    Quote
    {
      "chain": "main",
      "blocks": 219242,
      "headers": 895831,
      "bestblockhash": "0000000000000012767dba93bdb63e4a3e0df576e3a2e8439a78c813feb3d792",
      "bits": "1a05a6b1",
      "target": "00000000000005a6b10000000000000000000000000000000000000000000000",
      "difficulty": 2968775.332075074,
      "time": 1359805720,
      "mediantime": 1359804704,
    "verificationprogress": 0.01017237324622422,
      "initialblockdownload": true,

      "chainwork": "000000000000000000000000000000000000000000000028fe60976baa91803d",
      "size_on_disk": 6124750373,
      "pruned": false,
      "warnings": [
      ]
    }
    If you see something like this, that means you have successfully completed all steps so far. Congratulations!  Smiley The blocks line tells you how many blocks you have synchronized, and the headers tells you the current block number of the Bitcoin blockchain. Alternatively, you can also follow the progress with verificationprogress which needs to reach 0.99 or wait until initialblockdownload is set to false. It is important to remember that synchronization time is not linear, so if it took you 4 hours to reach 25% of the blocks that does not mean that it will take you just 12 more hours to reach full synchronization.

    At this point, I strongly suggest that you take a break and let it synchronize. You have deserved it.



    Eclair
    Prerequisites: Bitcoin Core and Adoptium OpenJDK.

    Adoptium OpenJDK Setup:
    1. In the first step, download the Adoptium JDK from Github: https://github.com/adoptium/temurin21-binaries/releases. Then extract it and move it tohome/lightning/bin. The version at the time of writing this guide is 21.0.7+6, so you may need to adjust the wget command if there is a newer version of it is explicitly required by Eclair. This information was sourced from this guide, which I followed to successfully install Adoptium on my own systems. You can consult it if more steps are needed by your configuration.
    Code:
    cdhome/lightning/
    wget https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.7%2B6/OpenJDK21U-jdk_x64_linux_hotspot_21.0.7_6.tar.gz
    tar -xvf OpenJDK21U-jdk_x64_linux_hotspot_21.*.tar.gz
    mv jdk-21.0.7+6home/lightning/bin/
    2. Export the environment variables by adding them to .bashrc. Using sed, we can append these two lines to the file. Next, force an update on .bashrc with the source command
    Code:
    sed -i '$a export JAVA_HOME=/home/lightning/bin/jdk-21.0.7+6'home/lightning/.bashrc
    sed -i '$a export PATH=$PATH:$JAVA_HOME/bin'home/lightning/
    sourcehome/lightning/.bashrc

    3. Verify that the JAVA variables are set properly:
    Code:
    echo $JAVA_HOME
    You should get a response like this:
    Quote
    /home/lightning/bin/jdk-21.0.7+6
    4. To set the default JAVA version for the system.
    Code:
    sudo update-alternatives --installusr/bin/java javahome/lightning/bin/jdk-21.0.7+6/bin/java 1
    sudo update-alternatives --config java
    Quote
    You will get a response similar to this depending on your system:

    There is 1 choice for the alternative java (providingusr/bin/java).

      Selection    Path                        Priority   Status
    ------------------------------------------------------------
    * 0            /home/lightning/jdk-21.0.7+6/bin/java   1         auto mode
      1            /home/lightning/jdk-21.0.7+6/bin/java   1         manual mode

    Press <enter> to keep the current choice
    • , or type selection number:
    If you have multiple versions of java, select this one as the default by entering the right number. In this case select 0. With this, the prerequisites are complete and you can start the Eclair installation process.


    Eclair Setup:
    1. Download the latest version of eclair-node and extract the files to a separate folder. At the time of writing this is Eclair v0.12.0 and we will use a folder located inhome/lightning/. Only the eclair-cli will be moved to another location so that we can access it from anywhere.
    Code:
    cdhome/lightning/
    wget https://github.com/ACINQ/eclair/releases/download/v0.12.0/eclair-node-0.12.0-4df8cd0-bin.zip
    unzip eclair-node-0.12.0-4df8cd0-bin.zip
    mv eclair-node-0.12.0-4df8cd0/bin/eclair-clihome/lightning/bin
    2. Next, create .eclair in the home directory similar to what was required for Bitcoin Core and create a configuration file named eclair.conf. The options in bold are those which you need to edit. Make sure that your API password is strong, and that the RPC configuration data matches that which you have set up in bitcoin.conf.
    Code:
    mkdirhome/lightning/.eclair/
    nanohome/lightning/.eclair/eclair.conf

    Quote
    eclair.node-alias=alias
    eclair.server.port=9735
    eclair.api.enabled=true
    eclair.api.port=8080
    eclair.api.password=Password
    eclair.bitcoind.rpcuser=YourUsernameFromBitcoin.Conf
    eclair.bitcoind.rpcpassword=YourPasswordFromBitcoin.Conf
    eclair.bitcoind.zmqblock="tcp://127.0.0.1:29000"
    eclair.bitcoind.zmqtx="tcp://127.0.0.1:29001"
    eclair.bitcoind.wallet=firstwallet
    This is a minimum working configuration. Many more configurations and examples can be found here: https://github.com/ACINQ/eclair/blob/master/docs/Configure.md.

    3. Next, test that the node can be started. You will see no output, which is good. The test is to just make sure if no errors are thrown. You can exit by pressing CTRL + C.
    Code:
    /home/lightning/eclair-node-0.12.0-4df8cd0/bin/eclair-node.sh

    4. To enable the node to run in the background, a system service needs to be created. To do this, a systemd file must be created.
    Code:
    sudo nanolib/systemd/system/eclair.service
    Copy the following block inside eclair.service:
    Quote
    [Unit]
    Description=Eclair Shell Script

    [Service]
    ExecStart=/home/lightning/eclair-node-0.12.0-4df8cd0/bin/eclair-node.sh

    [Install]
    WantedBy=multi-user.target
    Afterwards, run the following commands to reload the daemon, enable the service and start it.
    Code:
    sudo systemctl daemon-reload
    sudo systemctl enable eclair.service
    sudo systemctl start eclair.service

    5. If you've done everything correctly so far, the eclair node should be runnign by now. To confirm this, run the following command:
    Code:
    eclair-cli getinfo
    You will need to enter your Eclair API password, the one you set up in the file eclair.conf. You will get an output similar to this one, which confirms that your node is successfully running.
    Quote
    {
      "version": "0.12.0-4df8cd0",
      "nodeId": "hidden",
      "alias": "helloLightning",
      "color": "#49daaa",
      "features": {
        "activated": {
          "option_simple_close": "optional",
          "option_route_blinding": "optional",
          "option_dual_fund": "optional",
          "gossip_queries_ex": "optional",
          "option_data_loss_protect": "mandatory",
          "var_onion_optin": "mandatory",
          "option_static_remotekey": "mandatory",
          "option_scid_alias": "optional",
          "option_onion_messages": "optional",
          "option_support_large_channel": "optional",
          "option_anchors_zero_fee_htlc_tx": "optional",
          "payment_secret": "mandatory",
          "option_shutdown_anysegwit": "optional",
          "option_channel_type": "optional",
          "basic_mpp": "optional",
          "gossip_queries": "optional",
          "option_quiesce": "optional",
          "option_payment_metadata": "optional"
        },
        "unknown": []
      },
      "chainHash": "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000",
      "network": "mainnet",
      "blockHeight": 895432,
      "publicAddresses": [],
      "instanceId": "hidden"
    }

    Congratulations! You are now ready to use Eclair. For more information, visit the official Eclair documentation: https://github.com/ACINQ/eclair/tree/master/docs, https://github.com/ACINQ/eclair/blob/master/docs/Guides.md, https://github.com/ACINQ/eclair/blob/master/docs/FAQ.md.



    LND
    Prerequisites: Bitcoin Core.

    1. Download the latest version of LND and extract the files to a separate folder. At the time of writing this is lnd v0.18.5-beta and we will again use a folder located inhome. If you want to do additional verification on binaries, information is provided directly in the release. As you have already learned how to extract files in previous parts of this guide, multiple operations will be done in this step. Following the information from the documentation, we will move the binaries to a location where the system can find it.
    Code:
    cdhome/lightning/
    wget https://github.com/lightningnetwork/lnd/releases/download/v0.18.5-beta/lnd-linux-amd64-v0.18.5-beta.tar.gz
    tar -xvf lnd-linux-amd64-v0.18.5-beta.tar.gz
    mv lnd-linux-amd64-v0.18.5-beta/lndhome/lightning/bin
    mv lnd-linux-amd64-v0.18.5-beta/lnclihome/lightning/bin

    2. Before starting LND, a configuration file must be provided. To do this, the .lnd folder must be created inhome/lightning/ and a basic configuration must be set in the file lnd.conf. Make sure that your RPC username and password match the ones that you have set up for Bitcoin Core. The configuration only includes the basic necessary configurations and a few recommended lines from the documentation. Please read up on them if you are interested in what they do.
    Code:
    mkdirhome/lightning/.lnd
    nanohome/lightning/.lnd/lnd.conf
    Quote
    bitcoin.node=bitcoind
    bitcoind.rpcuser=YourUsernameFromBitcoin.Conf
    bitcoind.rpcpass=YourPasswordFromBitcoin.Conf
    bitcoind.zmqpubrawblock=tcp://127.0.0.1:29000
    bitcoind.zmqpubrawtx=tcp://127.0.0.1:29001
    bitcoin.mainnet=true

    rpcmiddleware.enable=true
    db.bolt.auto-compact=true
    alias=ChooseNodeName

    3. If you have done everything correctly, LND can be started simply by writing lnd in the console. However, first we will create a systemctl service using the provided sample file.
    Code:
    sudo nanolib/systemd/system/lnd.service
    Copy the following block inside lnd.service:
    Quote
    [Unit]
    Description=Lightning Network Daemon

    [Service]
    ExecStart=/home/lightning/bin/lnd
    ExecStop=/home/lightning/bin/lncli stop

    [Install]
    WantedBy=multi-user.target
    Afterwards, run the following commands to reload the daemon, enable the service and start it.
    Code:
    sudo systemctl daemon-reload
    sudo systemctl enable lnd.service
    sudo systemctl start lnd.service

    4. The final step involves creating a wallet, after which you will be able to use lncli. Set a strong password of your choosing, a passphrase is optional, and make sure to back up the 24 words.
    Code:
    lncli createwallet

    5. Verify that LND is running correctly using the getinfo command. Keep in mind that you may need to unlock your wallet first with lncli unlock.
    Code:
    lncli getinfo
    You will get a response like this, I have removed some lines from it to keep it shorter:
    Quote
    {
        "version":  "0.18.5-beta commit=v0.18.5-beta",
        "commit_hash":  "4ccf4fc24c750d098cf24566ef4bbc0311c7d476",
        "identity_pubkey":  "03da538f07b1bafd88dbee79349ea567f391fc22c4aa65aa6772c880f7d94b2a4e",
        "alias":  "helloLightning",
        "color":  "#3399ff",
        "num_pending_channels":  0,
        "num_active_channels":  0,
        "num_inactive_channels":  0,
        "num_peers":  0,
        "block_height":  895990,
        "block_hash":  "0000000000000000000099c27e6d08fa06abad3b04ceabdc34806511d17987e0",
        "best_header_timestamp":  "1746812177",
        "synced_to_chain":  false,
        "synced_to_graph":  false,
        "testnet":  false,
        "chains":  [
            {
                "chain":  "bitcoin",
                "network":  "mainnet"
            }
        ],
    Congratulations! You are now ready to use LND. Please refer to this guide for more information: https://docs.lightning.engineering/lightning-network-tools/lnd/first-steps-with-lnd.



    Core Lightning
    Prerequisites: Bitcoin Core.
    1. Download the latest version of lightning and extract the files to a separate folder. At the time of writing this is v25.02.2 and we will use a folder located inhome. As you have already learned how to extract files in previous parts of this guide, multiple operations will be done in this step. Additionally, libpq-dev must be installed to be able to run this implementation.
    Code:
    cdhome/lightning/
    wget https://github.com/ElementsProject/lightning/releases/download/v25.02.2/clightning-v25.02.2-Ubuntu-24.04-amd64.tar.xz
    tar -xvf clightning-v25.02.2-Ubuntu-24.04-amd64.tar.xz
    sudo apt-get install libpq-dev libsodium-dev
    2. To be able to call the lightningd and lightning-cli from anywhere, for this implementation we will create a symlink as it requires many libraries that come extracted with it.
    Code:
    ln -shome/lightning/usr/bin/lightningdhome/lightning/bin
    ln -shome/lightning/usr/bin/lightning-clihome/lightning/bin
    3. You can now conduct a test-run by invoking the command that follows. Freely exit with CTRL + C when you are ready.
    Code:
    cdhome/lightning/
    lightningd --network=bitcoin --log-level=debug
    4. Now add a configuration file so that lightningd can run in the background.
    Code:
    touchhome/lightning/.lightning/debug.log
    nanohome/lightning/.lightning/config
    Quote
    daemon
    log-file=/home/lightning/.lightning/debug.log
    alias=HelloCoreLightning
    5. Invoke lightningd to start your node.
    Code:
    lightningd
    6. Run a test to make sure it is working.
    Code:
    lightning-cli getinfo
    You should get a response like this:
    Quote
    {
       "id": "yourID",
       "alias": "HelloCoreLightning",
       "color": "039622",
       "num_peers": 0,
       "num_pending_channels": 0,
       "num_active_channels": 0,
       "num_inactive_channels": 0,
       "address": [
          {
             "type": "ipv4",
             "address": "yourIP",
             "port": 9735
          },
          {
             "type": "ipv6",
             "address": "yourIP",
             "port": 9735
          }
       ],
       "binding": [
          {
             "type": "ipv6",
             "address": "::",
             "port": 9735
          },
          {
             "type": "ipv4",
             "address": "0.0.0.0",
             "port": 9735
          }
       ],
       "version": "v25.02.1",
       "blockheight": 896289,
       "network": "bitcoin",
       "fees_collected_msat": 0,
       "lightning-dir": "/home/lightning/.lightning/bitcoin",
       "warning_lightningd_sync": "Still loading latest blocks from bitcoind.",
       "our_features": {
          "init": "08a0880a8a59a1",
          "node": "88a0880a8a59a1",
          "channel": "",
          "invoice": "02000002024100"
       }
    }
    I have used again a minimal working configuration, many more options are available here: https://docs.corelightning.org/docs/configuration.




    Bonus: ThunderHub
    ThunderHub is a lightning node manager that lets you manage your LND node through your browser, it is not a lightning wallet. You can only use it if you have installed LND. This is not mandatory, and it is also quite difficult.
    Prerequisites: LND, NPM, NodeJS (Version 18 or higher), Git.

    1. Check if your system has NPM and Node installed.
    Code:
    npm -v
    node -v
    If any of these or both of these return command not found, in that case you need to install what is missing.
    2. Install NPM and NodeJS and Git.
    Code:
    sudo apt install npm nodejs git
    3. Verify your versions of NPM and Nod by using the commands from step 1.
    Code:
    npm -v
    node -v
    4. Download ThunderHub, install it, do a test run.
    Code:
    git clone https://github.com/apotdevin/thunderhub.githome/lightning/thunderhub/
    cdhome/lightning/thunderhub
    npm install
    npm run build
    5. Create a symbolic link from inside thunderhub to your .lnd folder and verify that it is there.
    Code:
    ln -shome/lightning/.lndhome/thunderhub/.lnd
    ls -la
    Within the output of the second command you should see a line like this:
    Quote
    .lnd ->home/lightning/.lnd
    6. Prepare the environment variables. First we copy the file and then edit it using nano.
    Code:
    cphome/lightning/thunderhub/.envhome/lightning/thunderhub/.env.local
    nano .env.local
    You can write the following lines at the beginning of the file. Keep in mind that lines starting with # are commented out on purpose, ignore them.
    Quote
    LOG_LEVEL='debug'
    NODE_ENV=production
    PORT=3010
    ACCOUNT_CONFIG_PATH = '/home/lightning/thunderhub/thubConfig.yaml'
    7. Create the YAML account where you will define the account information. The bolded field, password, is one you must set. The underlined fields, serverUrl, macaroonPath, certificatePath, do not need to be changed if you have followed my guide. If you have installed LND somewhere else, just locate the correct paths and adjust this part of the configuration.
    Code:
    nanohome/lightning/thunderhub/thubConfig.yaml
    Quote
    masterPassword: 'PASSWORD' # Default password unless defined in account
    accounts:
      - name: 'MyThunderHub'
        serverUrl: '127.0.0.1:10009'
        macaroonPath: '/home/lightning/thunderhub/.lnd/data/chain/bitcoin/mainnet/admin.macaroon'
        certificatePath: '/home/lightning/thunderhub/.lnd/tls.cert'
        password: 'passwordHere'
    8. Start ThunderHub to check if it is working properly.
    Code:
    cdhome/lightning/thunderhub
    npm run start:prod
    If it is working, you should see output that has stuff like this:
    Quote
    {
      message: 'Connected to helloLightning(ID)BTC',
      level: 'info',
      timestamp: 'date-time-here'
    }
    That is it. If it is working, you can open a browser and navigate to 127.0.0.1:3010 to check it out. You can exit by pressing CTRL + C.
    9. In the last step, create a systemctl service so that ThunderHub starts automatically and in the background.
    Code:
    sudo nanoetc/systemd/system/thunderhub.service
    Paste all of the following:
    Quote
    [Unit]
    Description=Thunderhub
    Wants=lnd.service
    After=network.target lnd.service

    [Service]
    WorkingDirectory=/home/lightning/hunderhub/thunderhub
    ExecStart=/usr/bin/npm run start:prod

    [Install]
    WantedBy=multi-user.target
    Reload systemctl, enable and start the service.
    Code:
    sudo systemctl daemon-reload
    sudo systemctl enable thunderhub.service
    sudo systemctl start thunderhub.service



    Disclaimer: This guide is meant to provide help in the users that decide to install Lightning. I am not responsible for any issues that may lead to you losing any amount of Bitcoin because of this. You are your own bank, and as such you are solely responsible for any losses that occur.
Page 1
Viewing Page: 1