ThunderHub is an open-source LND node manager where you can manage and monitor your node on any device or browser. It allows you to take control of the lightning network with a simple and intuitive UX and the most up-to-date tech stack.
-> If the "node -v" output is >=18, you can move to the next section.
-> If Nodejs is not installed (-bash: /usr/bin/node: No such file or directory), follow this Node + NPM bonus guide to install it
Reverse proxy & Firewall
In the security section, we set up Nginx as a reverse proxy. Now we can add the ThunderHub configuration.
Enable the Nginx reverse proxy to route external encrypted HTTPS traffic internally to ThunderHub. The error_page 497 directive instructs browsers that send HTTP requests to resend them over HTTPS.
With user admin, create the reverse proxy configuration
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Reload NGINX configuration to apply changes
sudosystemctlreloadnginx
Configure the firewall to allow incoming HTTP requests from anywhere to the web server
sudoufwallow4002/tcpcomment'allow ThunderHub SSL from anywhere'
Installation
Create the thunderhub user & group
We do not want to run Thunderhub code alongside bitcoind and lnd because of security reasons. For that, we will create a separate user and run the code as the new user. We will install Thunderhub in the home directory since it doesn't need too much space.
Create a new thunderhub user and group
sudoadduser--disabled-password--gecos""thunderhub
Add thunderhub user to the lnd group to allow to the user thunderhub reading the admin.macaroon and tls.cert files
sudoadduserthunderhublnd
Change to the thunderhub user
sudosu-thunderhub
Set a temporary version environment variable to the installation
VERSION=0.13.31
Import the GPG key of the developer
curlhttps://github.com/apotdevin.gpg|gpg--import
Download the source code directly from GitHub, select the latest release branch associated, and go to the thunderhub folder
gpg: Signature made Fri May 26 16:56:42 2023 CEST
gpg: using RSA key 3C8A01A8344B66E7875CE5534403F1DFBE779457
gpg: Good signature from "Anthony Potdevin <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3C8A 01A8 344B 66E7 875C E553 4403 F1DF BE77 9457
Install all dependencies and the necessary modules using NPM
Not to run the npm audit fix command, which could break the original code!!
npminstall
Example of expected output ⬇️
npm warn deprecated @types/[email protected]: This is a stub types definition. cron provides its own type definitions, so you do not need this installed.
npm warn deprecated [email protected]: This module is not used anymore, and has been replaced by @npmcli/package-json
npm warn deprecated @babel/[email protected]: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class -properties instead.
npm warn deprecated [email protected]: The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm warn deprecated [email protected]: The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm warn deprecated [email protected]: The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm warn deprecated [email protected]: The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm warn deprecated @babel/[email protected]: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.
npm warn deprecated @apollo/[email protected]: The use of GraphQL Playground in Apollo Server was supported in previous versions, but this is no longer the case as of December 31, 2022. This package exists for v4 migration purposes only. We do not intend to resolve security issues or other bugs with this package if they arise, so please migrate away from this to [Apollo Server's default Explorer](https://www.apollographql.com/docs/apollo-server/api/plugin/landing-pages) as soon as possible.
npm warn deprecated [email protected]: The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm warn deprecated [email protected]: The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm warn deprecated [email protected]: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md
> [email protected] prepare
> husky install
husky - Git hooks installed
added 1949 packages, and audited 1950 packages in 46s
251 packages are looking for funding
run `npm fund` for details
23 vulnerabilities (2 low, 6 moderate, 15 high)
To address issues that do not require attention, run:
npm audit fix
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
npm notice
npm notice New patch version of npm available! 10.8.1 -> 10.8.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.8.2
npm notice To update run: npm install -g [email protected]npm notice
(Optional) Improve your privacy by opt-out of Next.js telemetry
npxnexttelemetrydisable
Expected output:
Your preference has been saved to /home/thunderhub/.config/nextjs-nodejs/config.json.
Status: Disabled
You have opted-out of Next.js' anonymous telemetry program.
No data will be collected from your machine.
Learn more: https://nextjs.org/telemetry
Build it
npmrunbuild
Example of expected output ⬇️
> [email protected] prebuild
> rimraf dist && rimraf .next
> [email protected] build
> npm run build:nest && npm run build:next
> [email protected] build:nest
> nest build
> [email protected] build:next
> cd src/client && next build
./src/components/chart/BarChart.tsx
61:6 Warning: React Hook useMemo has a missing dependency: 'dataKey'. Either include it or remove the dependency array. react-hooks/exhaustive-deps
./src/components/chart/HorizontalBarChart.tsx
139:6 Warning: React Hook useMemo has a missing dependency: 'maxValue'. Either include it or remove the dependency array. react-hooks/exhaustive-deps
./src/components/table/DebouncedInput.tsx
30:6 Warning: React Hook useEffect has missing dependencies: 'debounce' and 'onChange'. Either include them or remove the dependency array. If 'onChange' changes too often, find the parent component that defines it and wrap that definition in useCallback. react-hooks/exhaustive-deps
info - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
✓ Linting and checking validity of types
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
✓ Creating an optimized production build
✓ Compiled successfully
✓ Collecting page data
✓ Collecting build traces
✓ Finalizing page optimization
Route (pages) Size First Load JS
┌ λ / 23.9 kB 557 kB
├ /_app 0 B 243 kB
├ λ /404 344 B 243 kB
├ λ /amboss 3.92 kB 250 kB
├ λ /chain 5.69 kB 265 kB
├ λ /channels 6.61 kB 310 kB
├ λ /channels/[slug] 4.44 kB 250 kB
├ λ /chat 6.63 kB 255 kB
├ λ /dashboard 586 B 247 kB
├ λ /forwards 23.5 kB 545 kB
├ λ /leaderboard 3.62 kB 281 kB
├ λ /lnmarkets 5.2 kB 248 kB
├ λ /login 5.54 kB 249 kB
├ λ /peers 6.29 kB 265 kB
├ λ /rebalance 9.28 kB 287 kB
├ λ /settings 8.66 kB 257 kB
├ λ /settings/dashboard 458 B 247 kB
├ λ /sso 2.78 kB 246 kB
├ λ /stats 7.02 kB 253 kB
├ λ /swap 11.2 kB 289 kB
├ λ /tools 7.38 kB 250 kB
└ λ /transactions 5.08 kB 523 kB
+ First Load JS shared by all 247 kB
├ chunks/framework-80ea8c0f440c6a32.js 45.4 kB
├ chunks/main-5aa2e2aecccdc7ca.js 33 kB
├ chunks/pages/_app-43ed1c524f6479ab.js 162 kB
├ chunks/webpack-bafa1815dd7342f2.js 2.17 kB
└ css/9f506b76c3634369.css 4.22 kB
λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
Check the correct installation by requesting the version
Replace the [E] ThunderHub password to your one, keeping quotes [' ']
(Optional) You can pre-enable automatic healthchecks ping and/or channel backups to Amboss before starting ThunderHub by adding some lines at the end of the file (without indentation)
Keep in mind that if you stop ThunderHub, Amboss will interpret that your node is offline because the connection is established between ThunderHub <> Amboss to send healthchecks pings
These features are not available for a testnet node
Exit thunderhub user session to return to the admin user session
exit
Create systemd service
As user admin, create the service file
sudonano/etc/systemd/system/thunderhub.service
Paste the following configuration. Save and exit
# RaMiX: systemd unit for Thunderhub
# /etc/systemd/system/thunderhub.service
[Unit]
Description=ThunderHub
Requires=lnd.service
After=lnd.service
[Service]
WorkingDirectory=/home/thunderhub/thunderhub
ExecStart=/usr/bin/npm run start
User=thunderhub
Group=thunderhub
# Process management
####################
TimeoutSec=300
# Hardening Measures
####################
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true
PrivateDevices=true
[Install]
WantedBy=multi-user.target
Enable autoboot (optional)
sudosystemctlenablethunderhub
Prepare "thunderhub" monitoring by the systemd journal and check log logging output. You can exit monitoring at any time with Ctrl-C
journalctl-futhunderhub
Run
To keep an eye on the software movements, start your SSH program straight forward (eg. PuTTY) a second time, connect to the RaMiX node, and log in as "admin"
Start the service
sudosystemctlstartthunderhub
Example of expected output on the first terminal with journalctl -fu thunderhub ⬇️
Jun 28 23:35:43 ramix npm[513274]: > [email protected] start
Jun 28 23:35:43 ramix npm[513274]: > cross-env NODE_ENV=production nest start
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [NestFactory] Starting Nest application...
Jun 28 23:35:53 ramix npm[513313]: Getting production env variables.
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] AppModule dependencies initialized +82ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] PassportModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] LndModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ApiModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] MainModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] DiscoveryModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ConfigHostModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ScheduleModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ConfigModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ConfigModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ThrottlerModule dependencies initialized +4ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] JwtModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ViewModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] GraphQLSchemaBuilderModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] WinstonModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] FilesModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] FetchModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] AuthenticationModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] AccountsModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] BaseModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] BitcoinModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] GithubModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] UserConfigModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] AuthenticationModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] AccountModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] NodeModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] BosModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] GraphQLModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] WsModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] WalletModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ToolsModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] MacaroonModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] NetworkModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] PeerModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ChainModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] EdgeModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ChannelsModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ForwardsModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] HealthModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] TransactionsModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] InvoicesModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] ChatModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] BoltzModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] NodeModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] AuthModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] LnUrlModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] AmbossModule dependencies initialized +1ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] SubModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: [Nest] 513313 - 06/28/2023, 11:35:53 PM LOG [InstanceLoader] LnMarketsModule dependencies initialized +0ms
Jun 28 23:35:53 ramix npm[513313]: {
Jun 28 23:35:53 ramix npm[513313]: message: 'WS server created',
Jun 28 23:35:53 ramix npm[513313]: level: 'info',
Jun 28 23:35:53 ramix npm[513313]: timestamp: '2023-06-28T21:35:53.547Z'
Jun 28 23:35:53 ramix npm[513313]: }
Jun 28 23:35:53 ramix npm[513313]: {
Jun 28 23:35:53 ramix npm[513313]: context: 'RoutesResolver',
Jun 28 23:35:53 ramix npm[513313]: level: 'info',
Jun 28 23:35:53 ramix npm[513313]: message: 'ViewController {/}:',
Jun 28 23:35:53 ramix npm[513313]: timestamp: '2023-06-28T21:35:53.552Z'
Jun 28 23:35:53 ramix npm[513313]: }
Jun 28 23:35:53 ramix npm[513313]: {
Jun 28 23:35:53 ramix npm[513313]: context: 'RouterExplorer',
Jun 28 23:35:53 ramix npm[513313]: level: 'info',
Jun 28 23:35:53 ramix npm[513313]: message: 'Mapped {/, GET} route',
Jun 28 23:35:53 ramix npm[513313]: timestamp: '2023-06-28T21:35:53.555Z'
Jun 28 23:35:53 ramix npm[513313]: }
Jun 28 23:35:53 ramix npm[513313]: {
Jun 28 23:35:53 ramix npm[513313]: context: 'RouterExplorer',
Jun 28 23:35:53 ramix npm[513313]: level: 'info',
Jun 28 23:35:53 ramix npm[513313]: message: 'Mapped {/*, GET} route',
Jun 28 23:35:53 ramix npm[513313]: timestamp: '2023-06-28T21:35:53.555Z'
Jun 28 23:35:53 ramix npm[513313]: }
Jun 28 23:35:53 ramix npm[513313]: {
Jun 28 23:35:53 ramix npm[513313]: message: 'Server accounts that will be available: ramix',
Jun 28 23:35:53 ramix npm[513313]: level: 'info',
Jun 28 23:35:53 ramix npm[513313]: timestamp: '2023-06-28T21:35:53.563Z'
Jun 28 23:35:53 ramix npm[513313]: }
Jun 28 23:35:54 ramix npm[513313]: Persisted queries are enabled and are using an unbounded cache. Your server is vulnerable to denial of service attacks via memory exhaustion. Set `cache: "bounded"` or `persistedQueries: false` in your ApolloServer constructor, or see https://go.apollo.dev/s/cache-backends for other alternatives.
Jun 28 23:35:54 ramix npm[513313]: {
Jun 28 23:35:54 ramix npm[513313]: context: 'GraphQLModule',
Jun 28 23:35:54 ramix npm[513313]: level: 'info',
Jun 28 23:35:54 ramix npm[513313]: message: 'Mapped {/graphql, POST} route',
Jun 28 23:35:54 ramix npm[513313]: timestamp: '2023-06-28T21:35:54.092Z'
Jun 28 23:35:54 ramix npm[513313]: }
Jun 28 23:35:54 ramix npm[513313]: {
Jun 28 23:35:54 ramix npm[513313]: context: 'NestApplication',
Jun 28 23:35:54 ramix npm[513313]: level: 'info',
Jun 28 23:35:54 ramix npm[513313]: message: 'Nest application successfully started',
Jun 28 23:35:54 ramix npm[513313]: timestamp: '2023-06-28T21:35:54.524Z'
Jun 28 23:35:54 ramix npm[513313]: }
Jun 28 23:35:54 ramix npm[513313]: Application is running on: http://[::1]:3000
Jun 28 23:35:54 ramix npm[513313]: (node:513313) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an IP address is not permitted by RFC 6066. This will be ignored in a future version.
Jun 28 23:35:54 ramix npm[513313]: (Use `node --trace-deprecation ...` to show where the warning was created)
[...]
Your browser will display a warning because we use a self-signed SSL certificate. We can do nothing about that because we would need a proper domain name (e.g., https://yournode.com) to get an official certificate that browsers recognize. Click on "Advanced" and proceed to the ThunderHub web interface
Now point your browser to https://ramix.local:4002 or the IP address (e.g. https://192.168.x.xxx:4002). You should see the home page of ThunderHub
Ensure the service is working and listening at the default 3000 port and the HTTPS 4002 port
With the Tor browser, you can access this onion address from any device
Access to your Amboss node account
In the "Home" screen - "Quick Actions" section, click on the Amboss icon "Login", wait for the top right corner notification to show you "Logged in" and click again on the Amboss icon "Go to". This will open a secondary tab in your browser to access your Amboss account node
If you can't do "Login", maybe the cause is that you don't have a public channel opened yet. You'll need at least one public channel that has been open for a few days. Planning to open a public small-size channel to be connected with some Lightning Network peers or directly to the Amboss node. More info on Amboss docs
Making sure we are connected to the Amboss account, now back to Thunderhub for the next steps
Enable auto backups and healthcheck notifications to the Amboss account
Enable automatic backups to Amboss
In ThunderHub, from the left sidebar, click on 🌍Amboss.
In the Backups section, push on the Push button to test and push the first backup to Amboss. If all is good, you could enable automatic backups to Amboss, by pushing on Enable just above, now the backup file encrypted will be updated automatically on Amboss for every channel opening and closing.
Ensure that the last date of the backup is the same as before.
You could test that the possible recovery process would be available, by clicking on the "Get" button and copying the entire string, then going back to the Thunderhub from the left sidebar, clicking on "Tools", going to the "Backups" section -> "Verify Channels Backup" -> click on "Verify" button, paste the before string copied and click on "Verify" button again. A green banner "Valid backup String" should appear.
Also is recommended to download the backup file from ThunderHub and store locally it in a safe place for future recovery. You can do this "Tools" section in Thunderhub, "Backups" -> "Backup all channels" -> click the "Download" button.
Enable automatic healthcheck pings to Amboss
In ThunderHub, from the left sidebar, click on 🌍Amboss.
Go to the Healthchecks section and push the "Enable" button to enable automatic healthcheck pings to Amboss.
Now go to the Amboss Monitoring section, and configure "Healthcheck Settings" as you wish.
Go to the Notifications section to enable the different notification ways that you wish to be notified.
Feel free to link to the Telegram bot notifications, enable different notifications, complete your public node profile in Amboss, and other things in the different sections of your account
Keep in mind that if you stop ThunderHub, Amboss will interpret that your node is offline because the connection is established between ThunderHub <-> Ambos to send healthchecks pings
Recovering channels using the ThunderHub method
After possible data corruption of your LND node, ensure that this old node is completely off before starting the recovery.
Once you have synced the new node, on-chain recovered with seeds, full on-chain re-scan complete, and Thunderhub installed and running, go to the Thunderhub dashboard.
From the left sidebar, click on "Tools", and go to the "Backups" section -> "Recover Funds from Channels" -> push the "Recover" button.
In this box, enter the complete string text that contains your manually downloaded channels backup file in the step before, or use the string using the content of the latest Amboss automatic backup (recommended) and push again the "Recover" button.
All of the channels that you had opened in your old node will be forced closed and they will appear in the "Pending" tab in the "Channels" section until closings are confirmed. Check logs of LND to see how the recovery process is executed and get more information about it
Use this guide as a last resort if you have lost access to your node or are unable to start LND due to a fatal error. This guide will close all your channels. Your funds will become available on-chain at varying speeds
Upgrade
Updating to a new release should be straightforward.
Stay logged in with the user admin, stop the service
npm WARN deprecated [email protected]: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md
npm WARN deprecated [email protected]: The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm WARN deprecated [email protected]: The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm WARN deprecated [email protected]: The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm WARN deprecated [email protected]: The `apollo-server` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm WARN deprecated [email protected]: The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
npm WARN deprecated [email protected]: The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
(#################⠂) ⠧ reify:value-or-promise: timing reifyNode:node_modules/foreground-child/node_modules/signal-exit Completed in 39393ms
[...]
> [email protected] prepare
> husky install
husky - Git hooks installed
added 1879 packages, and audited 1880 packages in 1m
201 packages are looking for funding
run `npm fund` for details
16 vulnerabilities (1 low, 5 moderate, 10 high)
To address all issues, run:
npm audit fix
Run `npm audit` for details.
npm notice
npm notice New minor version of npm available! 9.5.1 -> 9.8.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.8.0
npm notice Run npm install -g [email protected] to update!
npm notice
Build it
npm run build
Example of expected output ⬇️
> [email protected] prebuild
> rimraf dist && rimraf .next
> [email protected] build
> npm run build:nest && npm run build:next
> [email protected] build:nest
> nest build
> [email protected] build:next
> cd src/client && next build
./src/components/chart/BarChart.tsx
61:6 Warning: React Hook useMemo has a missing dependency: 'dataKey'. Either include it or remove the dependency array. react-hooks/exhaustive-deps
./src/components/chart/HorizontalBarChart.tsx
139:6 Warning: React Hook useMemo has a missing dependency: 'maxValue'. Either include it or remove the dependency array. react-hooks/exhaustive-deps
./src/components/table/DebouncedInput.tsx
30:6 Warning: React Hook useEffect has missing dependencies: 'debounce' and 'onChange'. Either include them or remove the dependency array. If 'onChange' changes too often, find the parent component that defines it and wrap that definition in useCallback. react-hooks/exhaustive-deps
info - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
✓ Linting and checking validity of types
▲ Next.js 14.0.1
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
✓ Creating an optimized production build
✓ Compiled successfully
✓ Collecting page data
✓ Collecting build traces
✓ Finalizing page optimization
Route (pages) Size First Load JS
┌ λ / 23.8 kB 561 kB
├ /_app 0 B 246 kB
├ λ /404 344 B 246 kB
├ λ /amboss 3.31 kB 252 kB
├ λ /chain 5.73 kB 268 kB
├ λ /channels 6.75 kB 312 kB
├ λ /channels/[slug] 4.47 kB 253 kB
├ λ /chat 6.76 kB 259 kB
├ λ /dashboard 586 B 250 kB
├ λ /forwards 24.1 kB 550 kB
├ λ /leaderboard 3.62 kB 283 kB
├ λ /lnmarkets 5.22 kB 251 kB
├ λ /login 5.6 kB 252 kB
├ λ /peers 6.3 kB 269 kB
├ λ /rebalance 9.45 kB 289 kB
├ λ /settings 8.73 kB 260 kB
├ λ /settings/dashboard 458 B 250 kB
├ λ /sso 2.79 kB 249 kB
├ λ /stats 7.18 kB 256 kB
├ λ /swap 11.4 kB 291 kB
├ λ /tools 7.46 kB 253 kB
└ λ /transactions 5.09 kB 527 kB
+ First Load JS shared by all 250 kB
├ chunks/framework-1ebad0ea60aef44d.js 45.7 kB
├ chunks/main-f884d18fd3231f30.js 33.2 kB
├ chunks/pages/_app-23ed15c0ff29868f.js 165 kB
├ chunks/webpack-9d8d1d250efc304b.js 2.17 kB
└ css/ba8e388a301f6e52.css 3.78 kB
λ (Dynamic) server-rendered on demand using Node.js
Check the correct update
head -n 3 /home/thunderhub/thunderhub/package.json | grep version
Example of expected output:
> "version": "0.13.20",
Exit to go back to the admin user
exit
Start the service again
sudo systemctl start thunderhub
If the update fails, you probably will have to stop Thunderhub, follow the Uninstall ThunderHub section to delete thunderhub user, and repeat the installation process starting from the Preparation section
Uninstall
Uninstall service
With user admin , stop thunderhub
sudo systemctl stop thunderhub
Disable autoboot (if enabled)
sudo systemctl disable thunderhub
Delete the service
sudo rm /etc/systemd/system/thunderhub.service
Delete user & group
Delete the "thunderhub" user. Do not worry about the userdel: thunderhub mail spool (/var/mail/thunderhub) not found
sudo userdel -rf thunderhub
Uninstall Tor hidden service
Comment or remove the ThunderHub hidden service lines in torrc. Save and exit