vls-container/README.md
Lakshya Singh 8702d3cc1a
env: add versions for all services
- btc 26.0
- cln 24.0
- vls 0.11.0
- txoo 0.6.4
Signed-off-by: Lakshya Singh <lakshay.singh1108@gmail.com>
2024-03-13 22:07:07 +05:30

225 lines
7.5 KiB
Markdown

# VLS Containers
## Installing Docker
### Docker Documentation
Docker Engine is available on a variety of Linux distros, macOS, and Windows 10 through Docker Desktop, and as a static binary installation. Refer to the official [docker documentation](https://docs.docker.com/engine/install/)
- [Ubuntu](https://docs.docker.com/engine/install/ubuntu/)
- [Fedora](https://docs.docker.com/engine/install/fedora/)
### Distro Packages
Debian/Ubuntu:
```
sudo apt install docker.io docker-doc docker-compose containerd runc
sudo systemctl enable --now docker
```
Fedora/RHEL:
```
sudo dnf install docker docker-compose containerd runc
sudo systemctl enable --now docker
```
### Docker v1/v2 Compatibility
- Currently available `docker-compose` packages in different linux distributions (debian, ubuntu, fedora, etc) are not up to date, they are still at version `1` which has been deprecated by `docker` with release of version `2`.
- `docker-compose` version `2` is available through official docker repositories not the distribution ones.
- Docker Compose files in this repository work with version 2 and are also __backward compatible__ with version 1.
- If you are using the distribution installation the `docker compose` command used below has to be changed to `docker-compose` instead.
## VLS standalone Setup
Below are the steps required to run `vlsd2` as a standalone container.
### Docker Image
```bash
# Build the latest docker image
cd vlsd
docker build -t vlsd .
```
### Volume Creation
```bash
docker volume create vls_data
```
### Environment Variables
VLS container needs the follwing environment variables set:
- `BITCOIND_RPC_URL`: URL of `bitcoind`'s RPC port.
- `VLS_NETWORK`: `testnet` or `regtest`.
Frequently used optional environment variables are:
- `VLS_PERMISSIVE`
- `RUST_LOG`
### `vlsd2` Command Arguments
Required command arguments:
- `connect`: URL of `remote_hsmd_socket` running in the lightning node.
For information on all possible arguments to `vlsd` see [documentation](https://gitlab.com/lightning-signer/validating-lightning-signer/-/blob/main/vls-proxy/src/config.rs?ref_type=heads).
### Running container
There is a `docker-compose.yml` in the `vlsd` folder which can be used to run a standalone `vlsd` service with `network_mode` set to host.
```bash
cd vlsd
export VLS_GIT_HASH=$VLS_GIT_HASH
docker compose up
```
**_Note_**: Make sure to set `BITCOIND_RPC_URL`, `VLS_GIT_HASH` and `CLN_RMEOTE_HSMD_URL` as either environment variables or in the `docker-compose.yml` file before running the above command. You can take `VLS_GIT_HASH` from [.env](./.env) or from the main [repo](https://gitlab.com/lightning-signer/validating-lightning-signer)
If you wish to run it as a standalone container without using `docker-compose` you can use the following command:
```bash
docker run \
-d \
--rm \
--name vlsd \
--network host \
--build_arg VLS_GIT_HASH=$VLS_GIT_HASH
-e VLS_NETWORK=testnet \
-e BITCOIND_RPC_URL=$BITCOIND_RPC_URL \
--mount 'type=volume,src=vls_data,dst=/home/vls/.lightning-signer' \
vlsd \
--connect=$CLN_REMOTE_HSMD_URL
```
## Single Node Setup
You can run `bitcoind`, `lightningd`, `txood` and `vlsd` on a single node using available docker compose file in the main directory.
**_Note_**: Use this only for experimentation and testing purposes as running `vlsd` on the same machine as `CLN` is not as secure as running it on dedicated hardware.
### Volume Creation
Testnet:
```bash
docker volume create bitcoin_data
docker volume create lightning_data
docker volume create txoo_data
docker volume create vls_data
```
The `regtest` docker compose configuration doesn't use external volumes. The automatically created volumes can be destroyed via the `down --volumes` docker compose command.
### Docker Compose Run
```bash
docker compose --profile vls up --build
```
### Selecting Bitcoin Chains
We have two possible overrides over the default `testnet` configuration in `docker-compose.yml`:
- `docker-compose.testnet.yml`
- `docker-compose.regtest.yml`
To use override we have to pass it down both the config using `-f` flag:
```bash
export DOCKER_COMPOSE_OVERRIDE=docker-compose.testnet.yml
export COMPOSE_PROJECT_NAME=testnet
docker compose --profile vls -f docker-compose.yml -f $DOCKER_COMPOSE_OVERRIDE up --build
```
__Note__: Even while using `testnet` running using the override is recommended as that will expose the `P2P` port for `bitcoind` and `P2P` port for `lightningd` on the host.
### Single Node without VLS
To run a single node without `vls` service we can use the same `docker-compose.yml` file in the main directory by just removing the `profile` flag `vls` from all commands.
```bash
docker compose up --build
```
Above command will run `bitcoind`, `lightningd` and `txood` services on a single node.
### Additional Regtest Commands
We have to run these commands after bitcoind is up and running.
Create wallet and make it load automatically:
```bash
docker container exec bitcoind-regtest bitcoin-cli createwallet default
docker container exec bitcoind-regtest bitcoin-cli unloadwallet default
docker container exec bitcoind-regtest bitcoin-cli loadwallet default true
```
Generate Address for node:
```bash
docker container exec bitcoind-regtest bitcoin-cli getnewaddress
```
Generate Blocks
```bash
docker container exec bitcoind-regtest bitcoin-cli generatetoaddress 50 $NODE_ADDRESS
```
### Testnet CLN + CLBOSS Commands
```bash
# Create a connection to a random node (maybe from 1ML.com)
docker container exec lightningd-test lightning-cli --testnet connect \
02ae1e6091d2a9c4db5096558668d2456b1c0e9067cb72273eab1199bcfb208888 67.227.190.47:9735
# Allocate an onchain address to fund the node
docker container exec lightningd-test lightning-cli --testnet newaddr
# List onchain and channel funds
docker container exec lightningd-test lightning-cli --testnet listfunds
# Show CLBOSS status
docker container exec lightningd-test lightning-cli --testnet clboss-status | less
# Show node summary status
docker container exec lightningd-test lightning-cli --testnet summary
```
## Choosing Versions
The currently set default versions for services is as follows in the [.env](.env) file:
- **Bitcoin Core**: v26.0
- **Core Lightning**: v24.02
- **TXOO**: v0.6.4
- **VLS**: v0.11.0
You just can switch to a particular version/commit for a service by updating the git hash and then rebuilding the service:
```bash
cd vls-container
# update bitcoin core version
sed -i 's/23.0/23.2/g' .env
# build images again
docker compose --profile vls build
```
Note: For `bitcoind` its also important to update the `BITCOIN_SHA256SUMS_HASH`. It is the *SHA256 HASH* of `SHA256SUMS` file.
## Future Work
- [x] standalone dockerfile for vlsd
- [x] docker compose for vls
- [x] standalone docker image for `txood`
- [x] standalone docker image for `lightningd`
- [x] standalone docker image for `bitcoind`
- [ ] supporting signet
- [x] Profile configuration to run `vls`
- [x] Healthcheck for `txoo`
- [x] Healthcheck for `vls`
- [ ] Lightning Storage Server Dockerfile and Compose Service
- [ ] Postgres Service for Lightning Storage Server
## References
- [bitcoind](https://github.com/ruimarinho/docker-bitcoin-core/blob/master/23/alpine/Dockerfile) by @ruimarinho
- [lightningd with clboss](https://github.com/tsjk/docker-core-lightning/blob/main/Dockerfile) by @tsjk
- [elements lightning](https://github.com/ElementsProject/lightning/blob/master/contrib/docker/Dockerfile.alpine) by @ElementsProject
- [docker compose](https://github.com/LukasBahrenberg/lightning-dockercompose/blob/master/docker-compose.yaml) by @LukasBahrenberg