Compare commits

...
Sign in to create a new pull request.

11 commits

Author SHA1 Message Date
Ben van Hartingsveldt
89f5237d85
Improve note text 2025-07-23 21:32:31 +02:00
Ben van Hartingsveldt
95078acc24
Fix note color 2025-07-23 21:29:59 +02:00
Ben van Hartingsveldt
b2e160f3d3
Fix importing non-cached CSS file 2025-07-23 21:25:19 +02:00
Ben van Hartingsveldt
28f8607fc7
Fill all tutorial pages 2025-07-23 21:18:52 +02:00
Ben van Hartingsveldt
d897d08d83
Fix navigation 2025-07-23 20:39:47 +02:00
Ben van Hartingsveldt
cedccbcc00
Fix tutorials page 2025-07-23 20:39:13 +02:00
Ben van Hartingsveldt
76e36deefa
Add chart image 2025-07-22 13:52:15 +02:00
Ben van Hartingsveldt
65b775e312
Add other protocols 2025-07-21 15:56:04 +02:00
Ben van Hartingsveldt
0b302314a5
Fill protocol pages 2025-07-18 20:17:58 +02:00
Ben van Hartingsveldt
35d0ef20b3
Add protocol pages 2025-07-18 20:12:01 +02:00
b75e114c79
Merge pull request #4 from LBRYFoundation/migrate-framework
migrate to hono and bun
2025-04-23 02:34:01 +02:00
22 changed files with 626 additions and 18 deletions

View file

@ -56,7 +56,7 @@ export default (context) => {
<link rel="shortcut icon" href="/assets/favicon.ico"/>
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=inter:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet" />
<link rel="stylesheet" href="/assets/bundle.css"/>
<link rel="stylesheet" href="/assets/bundle.css?v=${Math.random()}"/>
<script src="/assets/scripts/sockets.js"></script>
`;

View file

@ -23,6 +23,16 @@ export default currentUrl => {
title: "LBRY overview",
url: "/overview"
},
{
name: "Tutorials",
title: "LBRY Tutorials",
url: "/tutorials"
},
{
name: "Protocols",
title: "LBRY Protocols",
url: "/protocols"
},
{
name: "Playground",
title: "Experience LBRY",
@ -33,11 +43,6 @@ export default currentUrl => {
title: "View LBRY resources",
url: "/resources"
},
{
name: "Tutorials",
title: "LBRY Tutorials",
url: "/tutorials"
},
{
name: "Community",
title: "Interact with LBRY",

19
app/components/note.js Normal file
View file

@ -0,0 +1,19 @@
"use strict";
// I M P O R T
import { html } from 'hono/html'
// E X P O R T
export default () => html`
<div class="component--note">
<strong class="component--note__title">Note</strong>
<span>LBRYCRD is deprecated and not officially supported anymore. It is recommended to use LBCD.</span>
</div>
`;

BIN
app/dist/LBRYNetworkProtocolChart.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

View file

@ -15,6 +15,7 @@
@import "partials/navigation";
@import "partials/mission-statement";
@import "partials/modal";
@import "partials/note";
@import "partials/pre";
@import "layout";

View file

@ -0,0 +1,29 @@
.component--note {
padding: 1rem 1rem 1rem 1.25rem;
background-color: #ffa50050;
border-left: 0.5rem solid #ffa500;
line-height: 1.55;
margin-bottom: 1.5rem;
position: relative;
user-select: text;
-ms-user-select: text;
-moz-user-select: text;
-webkit-user-select: text;
@media (min-width: 901px) {
font-size: 1.25rem;
}
@media (max-width: 900px) {
font-size: 1.05rem;
}
}
.component--note__title {
color: #ffa500;
display: block;
letter-spacing: 0.025rem;
text-transform: uppercase;
}

28
documents/protocols.md Normal file
View file

@ -0,0 +1,28 @@
---
title: Protocols
description: Understand how LBRY works low level and build your own implementations.
---
- [Blockchain P2P Protocol](/protocols/blockchain-p2p)
- [Blockchain RPC Protocol](/protocols/blockchain-rpc)
- [Content Protocol](/protocols/content)
- [DHT Protocol](/protocols/dht)
- [Hub Protocol](/protocols/hub)
- [Hub Ping Protocol](/protocols/hub-ping)
- [Media Streaming Protocol](/protocols/media-streaming)
- [Media RPC Protocol](/protocols/media-rpc)
- [Reflector Protocol](/protocols/reflector)
![Protocol Chart](/assets/LBRYNetworkProtocolChart.png)

View file

@ -0,0 +1,10 @@
---
title: Blockchain P2P Protocol
description: The protocol used between blockchain nodes.
---
This protocol is used between blockchain nodes to communicate between each other.
- **Port:** 9246/TCP
See: [https://developer.bitcoin.org/reference/p2p_networking.html](Bitcoin.org P2P Network)

View file

@ -0,0 +1,10 @@
---
title: Blockchain RPC Protocol
description: The protocol used to query the blockchain.
---
This protocol is used to query information from the blockchain. For example, the LBRY hub uses this protocol to check for new blocks and to advance it into its own database.
- **Port:** 9245/TCP
See: [https://developer.bitcoin.org/reference/rpc/index.html](Bitcoin.org RPC API Reference) and [https://lbry.tech/api/blockchain](LBRY Blockchain API)

View file

@ -0,0 +1,60 @@
---
title: Content Protocol
description: The protocol used to download blobs.
---
This protocol provides a way to pull a blob from a specific node. The protocol uses JSON blocks. The end of a JSON block can be detected if the JSON is valid after receiving a `}`, thereby closing the root object. Another JSON block directly follows it, without any whitespace. This protocol supports composite requests, so multiple requests can be merged into one, as also for the response. For example, one request can both contain `requested_blobs` and `blob_data_payment_rate`, and the server will answer with one response containing both `available_blobs` and `blob_data_payment_rate`.
- **Port:** 3333/TCP (distributed peer, previously)
- **Port:** 4444/TCP (distributed peer)
- **Port:** 5567/TCP (fixed peer)
## Availability
This request will check what blobs are available on the peer. It takes the sent list of blob hashes from `requested_blobs`, checks everyone of them, and returns a list of available blobs in `available_blobs`. Also, the request contains `lbrycrd_address`, which is a boolean property. In the response the `lbrycrd_address` property is a string containing an address. However, the use of `lbrycrd_address` for paying for blob data is not implemented yet.
```json5
//REQUEST
{"lbrycrd_address":false,"requested_blobs":["aabbcc","ddeeff"]}
//or
{"lbrycrd_address":true,"requested_blobs":["aabbcc","ddeeff"]}
//RESPONSE
{"lbrycrd_address":"bJxKvpD96kaJLriqVajZ7SaQTsWWyrGQct","requested_blobs":["aabbcc","ddeeff"]}
//or
{"lbrycrd_address":"bJxKvpD96kaJLriqVajZ7SaQTsWWyrGQct","requested_blobs":["aabbcc"]}
//or
{"lbrycrd_address":"bJxKvpD96kaJLriqVajZ7SaQTsWWyrGQct","requested_blobs":["ddeeff"]}
//or
{"lbrycrd_address":"bJxKvpD96kaJLriqVajZ7SaQTsWWyrGQct","requested_blobs":[]}
```
## Payment Rate
The reason behind this request is unknown at this moment. The request contains the `blob_data_payment_rate` property with a float. The result is always `RATE_ACCEPTED`, unless the float is below zero. Then the server will respond with `RATE_TOO_LOW`. At this moment, `RATE_UNSET` is not used.
```json5
//REQUEST
{"blob_data_payment_rate":123.456}
//RESPONSE
{"blob_data_payment_rate":"RATE_ACCEPTED"}
//or
{"blob_data_payment_rate":"RATE_TOO_LOW"}
//or
{"blob_data_payment_rate":"RATE_UNSET"}
```
## Blob
This request will get the blob itself. The hash will be sent using `requested_blob`. The server then reacts with an `incoming_blob`. If everything is correct, the `incoming_blob` contains a `blob_hash` property and a `length` property. The blob data directly follows after the JSON block response. If an error occurs, the `incoming_blob` contains an `error` property (and `blob_hash` is empty and `length` is zero).
```json5
//REQUEST
{"requested_blob":"aabbcc"}
//RESPONSE
{"incoming_blob":{"blob_hash":"aabbcc","length":123}}/*[Raw Blob Data]*/
//or
{"incoming_blob":{"blob_hash":"","length":0,"error":"Blob not found"}}
```

View file

@ -0,0 +1,85 @@
---
title: DHT Protocol
description: The protocol used to find other nodes.
---
The DHT protocol is used to discover and connect with other nodes. It follows the Kademlia specification, with some slight modiciations. In the Kademlia spec there are 4 message types: `PING`, `FIND_NODE`, `FIND_VALUE` and `STORE`. The protocol uses Bencoding, but is different from the BitTorrent specification (BEP 5).
- **Port:** 4444/UDP
The root dictionary can hold 5 properties: `0`, `1`, `2`, `3` and `4`. Note: Bencoding requires those keys to be strings, but some old software could send those as integers. This is wrong. The request must have all those properties, the response only requires `0`, `1`, `2` and `3`. The error, like the request, also requires all properties.
- The `0` property is the message type, where the value is an integer with `0` for request, `1` for response and `2` for error.
- The `1` property is the message ID, which contains a string of 20 bytes and is unique for every request-response or request-error pair.
- The `2` property is the node ID, which contains a string of 48 bytes and is unique for every node.
- The `3` property is the method (string; one of the 4) in case of a request message type, the response (mixed) in case of a response message type, and the error type (string) in case of a error message type.
- The `4` property is the arguments (list) in case of a request message type, absent in case of a response message type, and the response (string) in case of a error message type.
When a node wants to send an error back (it doesn't need to in every case), then the error message looks like the response message. However, the `3` property now contains the error type and optionally, `4` contains more information.
## Ping
The request has a property `3` with value `ping`.
In protocol version `0`, there are no request arguments.
In protocol version `1`, there is 1 request argument:
- A dictionary containing `protocolVersion` with integer value `1`.
In both versions, the response has a property `3` with value `pong`.
## Find Node
The request has a property `3` with value `findNode`.
In protocol version `0`, there is 1 request argument:
- A 48-byte string containing a key.
In protocol version `1`, there are 2 request arguments:
- A 48-byte string containing a key.
- A dictionary containing `protocolVersion` with integer value `1`.
In both versions, the response has a property `3` with a list as value. Every item in the list is a tuple (another list), containing the node ID as 48-byte string, the IP as string and the port as integer.
## Find Value
The request has a property `3` with value `findValue`.
In protocol version `0`, there is 1 request argument:
- A 48-byte string containing a key.
In protocol version `1`, there are 2 request arguments:
- A 48-byte string containing a key.
- A dictionary containing `p` (optionally) with an integer value to indicate the page, and `protocolVersion` with integer value `1`.
In both versions, the response has a property `3` with a dictionary as value:
- The directory at least contains a property `token`, which is needed when storing values on the connected node. If the node supports protocol version `1`, it should have `protocolVersion` set to integer `1`. If it only supports version `0`, `protocolVersion` can be integer `0` or absent.
- Based on if the node has the key, it will return the `contacts` property or the property where the name is the same as the key argument in the request. If the key is not known by the node, the `contacts` property is present. Like the `findNode` function response, the `contacts` property will contain a list of tuples, containing the node ID, IP address and DHT port number.
- If the key is known by the node, `contacts` isn't required, but allowed to be present. The response now at least has a property with the same 48 byte long name as the key in the request. This property is a list, where every item in the list is a compact address. This compact address contains information on where the blob can be downloaded.
- The optional `p` property is an integer with the amount of pages of download locations. If there are no download locations, the `p` value is integer `0`. If the `p` property is set in the request, the `contacts` property is absent.
### Compact Address
The compact address is a value of 54 bytes. The first 4 bytes are the binary format of the IPv4 address. The next 2 bytes are the TCP port where the blob can be downloaded. The remanining 48 bytes are the node id of the associated DHT peer.
## Store
The request has a property `3` with value `store`.
In protocol version `0`, there are 4 request arguments:
- A 48-byte string containing a key (e.g. blob hash).
- A value.
- An original publisher ID.
- An age.
The value is a dictory with the properties `token`, `lbryid` and `port`. The `token` property holds the token value of the connected node, where the token value is received from an earlier `findValue` request. The `lbryid` property holds the node ID of the sending node. The `port` property holds the port number of where the blob can be downloaded.
In protocol version `1`, there are 6 request arguments:
- A blob hash.
- A token.
- A port.
- An original publisher ID.
- An age.
- A dictionary containing `protocolVersion` with integer value `1`.
In both versions, the response has a property `3` with value `OK`.

View file

@ -0,0 +1,8 @@
---
title: Hub Ping Protocol
description: The protocol used to ping a hub server to check if it is running.
---
This protocol is used to ping a hub server to check if it is running. If it is, the hub server also returns some additional information that can be used to determine if the hub server is a good fit for that client.
- **Port:** 50001/UDP

View file

@ -0,0 +1,17 @@
---
title: Hub Protocol
description: The protocol used to search and resolve claims, manage wallets, and quickly find blockchain information.
---
This protocol is used to search and resolve claims, manage wallets, and quickly find blockchain information. It is based on Bitcoin's BIP40, with some LBRY-specific additions, like Claimtrie methods.
- **Port:** 50001/TCP
- **Port:** 50002/TCP (SSL/TLS)
## Method: `blockchain.claimtrie.resolve`
This method resolves specific LBRY claims and returns more information.
## Method: `blockchain.claimtrie.search`
This method search for LBRY claims by a set of keywords and some filters.

View file

@ -0,0 +1,10 @@
---
title: Media RPC Protocol
description: The protocol used to query the media server.
---
This protocol is used to query information from the media server.
- **Port:** 5279/TCP
See: [https://lbry.tech/api/sdk](LBRY SDK API)

View file

@ -0,0 +1,8 @@
---
title: Media Streaming Protocol
description: The protocol used to stream content from the media server.
---
This protocol is used to stream content from the media server.
- **Port:** 5280/TCP

View file

@ -0,0 +1,72 @@
---
title: Reflector Protocol
description: The protocol used to upload blobs.
---
This protocol provides a way to actively push blobs to the network, instead of waiting for them to get pulled. The protocol uses JSON blocks. The end of a JSON block can be detected if the JSON is valid after receiving a `}`, thereby closing the root object. Another JSON block directly follows it, without any whitespace. At this moment, there will be no error block sent when an error occurs. Version `0` of the protocol supports blobs, version `1` of the protocol also supports SD blobs. Unknown properties are ignored and will not cause an error.
- **Port:** 5566/TCP
## Handshake
Before doing anything with blobs, the handshake should be sent. The `version` property is required and should be an integer valued `0` or `1`. If the server supports that version, it will send back an JSON block where the `version` property has the same value. If the `value` property contains an invalid protocol number or a protocol number that isn't supported, the server throws an error and closes the connection.
```json5
//REQUEST
{"version":0}
//or
{"version":1}
//RESPONSE
{"version":0}
//or
{"version":1}
```
## Blob Hash and Blob Size
After the handshake, blobs can be received. First, the server wants to know more about the blob itself, before it wants to receive the blob data itself. The clients needs to send a JSON block with the blob hash and the blob size. It is important to note that this request is different for normal blobs and SD (Stream Descriptor) blobs. The properties `blob_hash` and `blob_size` are required OR the properties `sd_blob_hash` and `sd_blob_size` are required. The hash cannot be empty and the size cannot be zero or exceed the maximum blob size.
Then, the server will check if it wants to receive the blob. It can do several checks, e.g. checking if it already has the blob or if the blob is blacklisted. If the server wants the blob, it will send a JSON block with the `send_blob` property for normal blobs and a JSON block with `send_sd_blob` for SD blobs. If the server notices that it has the SD blob, but misses some of the blobs defined in the SD blob, it will at those hashes to `needed_blobs`. If the server doesn't want the blob, the client can send information about another blob.
```json5
//REQUEST
{"blob_hash":"aabbcc","blob_size":123} // if version>=0
//or
{"sd_blob_hash":"ddeeff","sd_blob_size":456} // if version>=1
//RESPONSE
{"send_blob":false} // if version>=0
//or
{"send_blob":true} // if version>=0
//or
{"send_sd_blob":false} // if version>=1
//or
{"send_sd_blob":true} // if version>=1
//or
{"send_sd_blob":false,"needed_blobs":[]} // if version>=1
//or
{"send_sd_blob":true,"needed_blobs":[]} // if version>=1
//or
{"send_sd_blob":false,"needed_blobs":["aabbcc","ddeeff"]} // if version>=1
//or
{"send_sd_blob":true,"needed_blobs":["aabbcc","ddeeff"]} // if version>=1
```
## Blob Data
If the server wants the blob, it will read exactly the amount of bytes that were stated in the blob information. If there goes something wrong with sending the blob data (e.g. there was a socket timeout or the blob hash calculation didn't match the blob hash from the blob information), the server will send a message that it didn't receive the blob. This will be a JSON block with the `received_blob` property for normal blobs and a JSON block with `received_sd_blob` for SD blobs. After this message, the client can send information about another blob.
```json5
//REQUEST
/*[Raw Blob Data]*/
//RESPONSE
{"received_blob":false} // if version>=0
//or
{"received_blob":true} // if version>=0
//or
{"received_sd_blob":false} // if version>=1
//or
{"received_sd_blob":true} // if version>=1
```

View file

@ -2,24 +2,39 @@
title: Tutorials
description: Learn how to setup, use, deploy, and develop with LBRY.
---
# LBRY Programming Tutorials
## Tutorial #1 - "Hello Satoshi!"
## Deployment tutorials
These tutorials will explain how to run different elements from the LBRY Network.
### Blockchain
- [Setup a LBRY blockchain with lbrycrd](/tutorials/setup-blockchain-lbrycrd)
- [Setup a LBRY blockchain with lbcd](/tutorials/setup-blockchain-lbcd)
### Hub
- [Setup a LBRY Hub](/tutorials/setup-hub)
### SDK
- [Setup the LBRY SDK with lbrynet](/tutorials/setup-sdk-lbrynet)
## Programming tutorials
### Tutorial #1 - "Hello Satoshi!"
Learn how to [create and modify a simple LBRY electron application](/tutorial-hellosatoshi) we'll call "[Hello Satoshi](/tutorial-hellosatoshi)".
---
# Setup your Development Environment
## Old tutorials
## Desktop Application
[Video tutorial](/resources/video-lbrydesktop) to setup the [Desktop app](https://github.com/lbryio/lbry-desktop) development environment.
### Setup your Development Environment
## Android Application
[Video tutorial](/resources/video-lbryandroid) to setup the [Android app](https://github.com/lbryio/lbry-android) development environment.
- **Desktop Application** - [Video tutorial](/resources/video-lbrydesktop) to setup the [Desktop app](https://github.com/lbryio/lbry-desktop) development environment.
- **Android Application** - [Video tutorial](/resources/video-lbryandroid) to setup the [Android app](https://github.com/lbryio/lbry-android) development environment.
- **LBRY SDK** - [Video tutorial](/resources/video-lbrysdk) to setup the [LBRY SDK](https://github.com/lbryio/lbry-sdk) development environment.
- **LBRY Blockchain** - [Video tutorial](/resources/video-lbrycrd) to setup the [LBRY Blockchain](https://github.com/lbryio/lbrycrd) development environment.
## LBRY SDK
[Video tutorial](/resources/video-lbrysdk) to setup the [LBRY SDK](https://github.com/lbryio/lbry-sdk) development environment.
## LBRY Blockchain
[Video tutorial](/resources/video-lbrycrd) to setup the [LBRY Blockchain](https://github.com/lbryio/lbrycrd) development environment.

View file

@ -0,0 +1,53 @@
---
title: Setup LBRY blockchain with LBCD
description: Learn how to setup the LBRY blockchain with LBCD.
---
## Running
### With Docker
```shell
docker run -d lbryfoundation/lbcd
```
Or if you want to change some parameters:
```shell
docker run --entrypoint "lbcd --notls" -d lbryfoundation/lbcd
```
For all possible parameters, see [doc.go](https://github.com/lbryio/lbcd/blob/a0ff51b84acc553c9e9568e80c7873c03e24d679/doc.go). E.g., when changing the RPC credentials, use `--rpcuser` and `--rpcpass`.
### With Docker Compose
Create a `docker-compose.yml` file with this content:
```yml
version: "3"
volumes:
lbcd:
services:
lbcd:
image: lbry/lbcd:latest
restart: always
network_mode: host
command:
- "--notls"
- "--rpcuser=lbry"
- "--rpcpass=lbry"
- "--rpclisten=127.0.0.1"
volumes:
- "lbcd:/root/.lbcd"
ports:
- "127.0.0.1:9245:9245"
- "9246:9246" # p2p port
```
Then run:
```shell
docker-compose up -d
```

View file

@ -0,0 +1,33 @@
---
title: Setup LBRY blockchain with LBRYCRD
description: Learn how to setup the LBRY blockchain with LBRYCRD.
---
<Note/>
## Building
### With Docker
```shell
git clone https://github.com/lbryio/lbrycrd.git
cd lbrycrd
docker run -v "$(pwd):/lbrycrd" --rm -v "${HOME}/ccache:/ccache" -w /lbrycrd -e CCACHE_DIR=/ccache lbry/build_lbrycrd packaging/build_linux_64bit.sh
```
### Ubuntu
```shell
sudo apt install build-essential git libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates
git clone https://github.com/lbryio/lbrycrd.git
cd lbrycrd
./packaging/build_linux_64bit.sh
./src/test/test_lbrycrd
```
## Running
```shell
lbrycrdd -server -daemon
```

View file

@ -0,0 +1,42 @@
---
title: Setup Elasticsearch
description: Learn how to setup Elasticsearch.
---
## Running
### With Docker Compose
Create a `docker-compose.yml` file with this content:
```yml
version: "3"
volumes:
es01:
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.16.0
container_name: es01
environment:
- node.name=es01
- discovery.type=single-node
- indices.query.bool.max_clause_count=8192
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true -Xms8g -Xmx8g" # no more than 32, remember to disable swap
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- "es01:/usr/share/elasticsearch/data"
ports:
- "127.0.0.1:9200:9200"
```
Then run:
```shell
docker-compose up -d
```

View file

@ -0,0 +1,84 @@
---
title: Setup LBRY Hub
description: Learn how to setup the LBRY Hub.
---
## Running
The Hub needs a running Elasticsearch instance. [Learn how to set up Elasticsearch.](/tutorials/setup-elasticsearch)
### With Docker Compose
Create a `docker-compose.yml` file with this content:
```shell
version: "3"
volumes:
lbry_rocksdb:
services:
scribe:
depends_on:
- scribe_elastic_sync
image: lbry/hub:${SCRIBE_TAG:-master}
restart: always
network_mode: host
volumes:
- "lbry_rocksdb:/database"
environment:
- HUB_COMMAND=scribe
- SNAPSHOT_URL=https://snapshots.lbry.com/hub/lbry-rocksdb.zip
command:
- "--daemon_url=http://lbry:lbry@127.0.0.1:9245"
- "--max_query_workers=2"
- "--cache_all_tx_hashes"
- "--index_address_statuses"
scribe_elastic_sync:
image: lbry/hub:${SCRIBE_TAG:-master}
restart: always
network_mode: host
ports:
- "127.0.0.1:19080:19080" # elastic notifier port
volumes:
- "lbry_rocksdb:/database"
environment:
- HUB_COMMAND=scribe-elastic-sync
- FILTERING_CHANNEL_IDS=770bd7ecba84fd2f7607fb15aedd2b172c2e153f 95e5db68a3101df19763f3a5182e4b12ba393ee8
- BLOCKING_CHANNEL_IDS=dd687b357950f6f271999971f43c785e8067c3a9 06871aa438032244202840ec59a469b303257cad b4a2528f436eca1bf3bf3e10ff3f98c57bd6c4c6
command:
- "--elastic_host=127.0.0.1"
- "--elastic_port=9200"
- "--max_query_workers=2"
herald:
depends_on:
- scribe_elastic_sync
- scribe
image: lbry/hub:${SCRIBE_TAG:-master}
restart: always
network_mode: host
ports:
- "50001:50001" # electrum rpc port and udp ping port
- "2112:2112" # comment out to disable prometheus metrics
volumes:
- "lbry_rocksdb:/database"
environment:
- HUB_COMMAND=herald
- FILTERING_CHANNEL_IDS=770bd7ecba84fd2f7607fb15aedd2b172c2e153f 95e5db68a3101df19763f3a5182e4b12ba393ee8
- BLOCKING_CHANNEL_IDS=dd687b357950f6f271999971f43c785e8067c3a9 06871aa438032244202840ec59a469b303257cad b4a2528f436eca1bf3bf3e10ff3f98c57bd6c4c6
command:
- "--index_address_statuses"
- "--daemon_url=http://lbry:lbry@127.0.0.1:9245"
- "--elastic_host=127.0.0.1"
- "--elastic_port=9200"
- "--max_query_workers=4"
- "--host=0.0.0.0"
- "--max_sessions=100000"
- "--prometheus_port=2112" # comment out to disable prometheus metrics
```
Then run:
```shell
docker-compose up -d
```

View file

@ -0,0 +1,19 @@
---
title: Setup LBRY SDK with lbrynet
description: Learn how to setup the LBRY SDK with lbrynet.
---
## Running
The media server RPC will run on `127.0.0.1:5279` by default, so it is only accessibly by the machine itself.
### With executable
- Download the latest version at [https://github.com/lbryio/lbry-sdk/releases](https://github.com/lbryio/lbry-sdk/releases) for the right target operating system.
- Extract the ZIP file.
- Run:
```shell
lbrynet start
```