Adds cloud-init systemd HOWTO for lbrycrd on DigitalOcean.
This commit is contained in:
parent
1d575c28cf
commit
e4b00e1ad9
1 changed files with 173 additions and 0 deletions
173
contrib/lbrycrd-cloud-init.md
Normal file
173
contrib/lbrycrd-cloud-init.md
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
# lbrycrd cloud-init with systemd
|
||||||
|
|
||||||
|
Contributing Author: [EnigmaCurry](https://www.enigmacurry.com)
|
||||||
|
|
||||||
|
Last Update: April 17 2019
|
||||||
|
|
||||||
|
This is meant to be the easiest instructions possible for running a full lbrycrd
|
||||||
|
node on DigitalOcean. It's pretty much just cut-and-paste.
|
||||||
|
|
||||||
|
This should also work on any host that supports
|
||||||
|
[cloud-init](https://cloud-init.io/), but I've not tested it anywhere except for
|
||||||
|
DigitalOcean.
|
||||||
|
|
||||||
|
If you wish to use docker-compose, there is an [alternative
|
||||||
|
configuration](https://github.com/lbryio/lbry-docker/tree/master/lbrycrd)
|
||||||
|
for that. This tutorial will use cloud-init and systemd to control docker.
|
||||||
|
|
||||||
|
## It's easy to run your own full lbrycrd node
|
||||||
|
|
||||||
|
[![Video of creating lbrycrd droplet on DigitalOcean](https://spee.ch/@EnigmaCurry:d/lbrycrd-video-thumb.jpg)](https://spee.ch/@EnigmaCurry:d/lbrycrd-docker-cloud-init.mp4)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
* Login to your DigitalOcean account and create a new droplet.
|
||||||
|
* Choose Ubuntu 18.04. (This will likely NOT work on other versions without tweaks.)
|
||||||
|
* Select a Standard droplet with 8GB of memory ($40 per month in 2019.)
|
||||||
|
* You may be able to get away with only 4GB.
|
||||||
|
* Select whatever datacenter you want.
|
||||||
|
* Mark the checkbox called `User data`, and paste the following into the box:
|
||||||
|
|
||||||
|
```
|
||||||
|
#cloud-config
|
||||||
|
|
||||||
|
## DigitalOcean user-data for Ubuntu 18.04 droplet
|
||||||
|
## Installs docker
|
||||||
|
## Setup systemd service for lbrycrd
|
||||||
|
## (This config just runs docker on vanilla Ubuntu,
|
||||||
|
## it uses systemd inplace of docker-compose or kubernetes.)
|
||||||
|
|
||||||
|
write_files:
|
||||||
|
- path: "/etc/lbry/lbrycrd.conf"
|
||||||
|
content: |
|
||||||
|
datadir=/data
|
||||||
|
port=9246
|
||||||
|
rpcuser=test
|
||||||
|
rpcpassword=test
|
||||||
|
rpcport=9245
|
||||||
|
regtest=0
|
||||||
|
server=1
|
||||||
|
txindex=1
|
||||||
|
daemon=0
|
||||||
|
listen=1
|
||||||
|
|
||||||
|
- path: "/etc/systemd/system/lbrycrd.service"
|
||||||
|
content: |
|
||||||
|
[Unit]
|
||||||
|
Description=lbrycrd docker container
|
||||||
|
After=snap.docker.dockerd.service
|
||||||
|
Requires=snap.docker.dockerd.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
TimeoutStartSec=0
|
||||||
|
ExecStartPre=-/snap/bin/docker stop lbrycrd
|
||||||
|
ExecStart=/snap/bin/docker run \
|
||||||
|
--rm \
|
||||||
|
--name lbrycrd \
|
||||||
|
-p 9246:9246 \
|
||||||
|
-p 127.0.0.1:9245:9245 \
|
||||||
|
--mount type=volume,source=lbrycrd-data,target=/data \
|
||||||
|
--mount type=bind,source=/etc/lbry/lbrycrd.conf,target=/etc/lbry/lbrycrd.conf \
|
||||||
|
--hostname lbrycrd \
|
||||||
|
-e RUN_MODE=default \
|
||||||
|
lbry/lbry-docker:lbrycrd-production
|
||||||
|
ExecStop=/snap/bin/docker stop lbrycrd
|
||||||
|
Restart=always
|
||||||
|
RestartSec=120
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
|
||||||
|
- path: "/root/.bash_aliases"
|
||||||
|
content: |
|
||||||
|
alias lbrycrd-cli="docker exec lbrycrd lbrycrd-cli -conf=/etc/lbry/lbrycrd.conf"
|
||||||
|
|
||||||
|
runcmd:
|
||||||
|
- apt-get update
|
||||||
|
- DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
|
||||||
|
- snap install docker
|
||||||
|
- until /snap/bin/docker ps; do echo "Waiting for docker startup..."; sleep 1; done; echo "Docker is up."
|
||||||
|
- /snap/bin/docker volume create lbrycrd-data
|
||||||
|
- systemctl enable --now lbrycrd
|
||||||
|
- echo "Good to go."
|
||||||
|
```
|
||||||
|
* Select your SSH key so you can login.
|
||||||
|
* Give it a good hostname.
|
||||||
|
* Click Create.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### How to administer the system
|
||||||
|
|
||||||
|
Copy the IP address from the droplet status page, SSH into the droplet as root
|
||||||
|
using the same SSH key you configured for the droplet.
|
||||||
|
|
||||||
|
The config file is in `/etc/lbry/lbrycrd.conf` on the host.
|
||||||
|
|
||||||
|
The systemd service is called `lbrycrd`, in
|
||||||
|
`/etc/systemd/system/lbrycrd.service`. It is preconfigured to start on system
|
||||||
|
startup.
|
||||||
|
|
||||||
|
#### Monitor the installer log
|
||||||
|
|
||||||
|
You can tail the log to monitor the install progress:
|
||||||
|
|
||||||
|
```
|
||||||
|
tail -f /var/log/cloud-init-output.log
|
||||||
|
```
|
||||||
|
|
||||||
|
Wait for the final `Good to go` message to know that the installer has finished.
|
||||||
|
|
||||||
|
#### Check the status of the systemd service
|
||||||
|
|
||||||
|
You can interact with systemd using `systemctl` (status, start, stop, restart,
|
||||||
|
etc.) and `journalctl` (logging) tools.
|
||||||
|
|
||||||
|
```
|
||||||
|
systemctl status lbrycrd
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
journalctl --unit lbrycrd
|
||||||
|
```
|
||||||
|
|
||||||
|
[Here is a tutorial to get you familiarized with
|
||||||
|
systemd](https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal)
|
||||||
|
|
||||||
|
#### Check the container
|
||||||
|
|
||||||
|
You can get the same information directly from docker:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker ps
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
docker logs lbrycrd
|
||||||
|
```
|
||||||
|
|
||||||
|
### Utilize lbrycrd-cli
|
||||||
|
|
||||||
|
You can use lbrycrd-cli from the host console. A bash alias has been added to
|
||||||
|
/root/.bash_aliases that invokes the lbrycrd-cli inside the running container.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ lbrycrd-cli getinfo
|
||||||
|
{
|
||||||
|
"version": 120400,
|
||||||
|
"protocolversion": 70013,
|
||||||
|
"walletversion": 60000,
|
||||||
|
"balance": 0.00000000,
|
||||||
|
"blocks": 551965,
|
||||||
|
"timeoffset": 0,
|
||||||
|
"connections": 12,
|
||||||
|
"proxy": "",
|
||||||
|
"difficulty": 739465688254.7942,
|
||||||
|
"testnet": false,
|
||||||
|
"keypoololdest": 1555360604,
|
||||||
|
"keypoolsize": 101,
|
||||||
|
"paytxfee": 0.00000000,
|
||||||
|
"relayfee": 0.00001000,
|
||||||
|
"errors": ""
|
||||||
|
}
|
||||||
|
```
|
Loading…
Reference in a new issue