mirror of
https://github.com/RoboSats/robosats.git
synced 2025-01-31 02:21:35 +00:00
Remove deprecated setup for development environment without docker-compose
This commit is contained in:
parent
6d79cd8351
commit
949b0584fb
249
setup.md
249
setup.md
@ -22,23 +22,23 @@ You can edit the frontend code in `/frontend/src/` to make the changes you want.
|
|||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
0 - `git clone {robosats-project}`
|
0. `git clone {robosats-project}`
|
||||||
|
|
||||||
1 - `cd robosats/frontend`
|
1. `cd robosats/frontend`
|
||||||
|
|
||||||
2 - `npm install`
|
2. `npm install`
|
||||||
|
|
||||||
3 - `npm run dev` (leave it running)
|
3. `npm run dev` (leave it running)
|
||||||
|
|
||||||
4 - On another terminal `npm install -g http-server`
|
4. On another terminal `npm install -g http-server`
|
||||||
|
|
||||||
5 - Then run `http-server "robosats/frontend/static/`
|
5. Then run `http-server "robosats/frontend/static/`
|
||||||
|
|
||||||
6 - Install [Requestly](https://requestly.io/) extension in your browser, it's a lightweight proxy. We want to use it so our browser grabs our local `main.js` instead of the remote. There are many alternatives to Requestly (be aware that Requestly might not respect your privacy. Didn't research it).
|
6. Install [Requestly](https://requestly.io/) extension in your browser, it's a lightweight proxy. We want to use it so our browser grabs our local `main.js` instead of the remote. There are many alternatives to Requestly (be aware that Requestly might not respect your privacy. Didn't research it).
|
||||||
|
|
||||||
7 - Pick a RoboSats backend to test the new frontend: e.g. "robosats.onion.moe", or "unsafe.testnet.robosats.com". You can also use the onion services also if you are using Brave or Tor Browser (untested!)
|
7. Pick a RoboSats backend to test the new frontend: e.g. "robosats.onion.moe", or "unsafe.testnet.robosats.com". You can also use the onion services also if you are using Brave or Tor Browser (untested!)
|
||||||
|
|
||||||
8 - Open Requestly extension and add a new redirect rule. Make "{robosats-site}/static/frontend/main.js" redirect to "127.0.0.1:8080/frontend/main.js" and save the changes.
|
8. Open Requestly extension and add a new redirect rule. Make "{robosats-site}/static/frontend/main.js" redirect to "127.0.0.1:8080/frontend/main.js" and save the changes.
|
||||||
|
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ Then visit `127.0.0.1:4000` on your browser. Once you save changes on a file it
|
|||||||
*Set up time, anywhere between ~45 min and 1 full day (depending on experience, whether you have a copy of the testnet blockchain, etc). Tested in Ubuntu.
|
*Set up time, anywhere between ~45 min and 1 full day (depending on experience, whether you have a copy of the testnet blockchain, etc). Tested in Ubuntu.
|
||||||
|
|
||||||
Spinning up docker for the first time
|
Spinning up docker for the first time
|
||||||
```
|
```bash
|
||||||
docker-compose build --no-cache
|
docker-compose build --no-cache
|
||||||
# Install LND python dependencies into local repository
|
# Install LND python dependencies into local repository
|
||||||
docker run --mount type=bind,src=$(pwd),dst=/usr/src/robosats backend sh generate_grpc.sh
|
docker run --mount type=bind,src=$(pwd),dst=/usr/src/robosats backend sh generate_grpc.sh
|
||||||
@ -74,6 +74,7 @@ docker-compose up -d
|
|||||||
docker exec -it django-dev python3 manage.py makemigrations api control chat
|
docker exec -it django-dev python3 manage.py makemigrations api control chat
|
||||||
docker exec -it django-dev python3 manage.py migrate
|
docker exec -it django-dev python3 manage.py migrate
|
||||||
docker exec -it django-dev python3 manage.py createsuperuser
|
docker exec -it django-dev python3 manage.py createsuperuser
|
||||||
|
# Once requested for the new superuser name, make sure to use the same name you have in the .env-sample variable ESCROW_USERNAME. By default 'admin'.
|
||||||
docker-compose restart
|
docker-compose restart
|
||||||
```
|
```
|
||||||
Copy the `.env-sample` file into `.env` and check the environmental variables are right for your development.
|
Copy the `.env-sample` file into `.env` and check the environmental variables are right for your development.
|
||||||
@ -96,7 +97,7 @@ Commands you will need to startup:
|
|||||||
|
|
||||||
You will need these commands also often or eventually:
|
You will need these commands also often or eventually:
|
||||||
|
|
||||||
* Unlock or 'create' the lnd node
|
* Use `unlock` or `create` your lnd node
|
||||||
`docker exec -it lnd-dev lncli unlock`
|
`docker exec -it lnd-dev lncli unlock`
|
||||||
|
|
||||||
* Create p2wkh addresses
|
* Create p2wkh addresses
|
||||||
@ -111,227 +112,7 @@ You will need these commands also often or eventually:
|
|||||||
* Open channel
|
* Open channel
|
||||||
`docker exec -it lnd-dev lncli --network=testnet openchannel node_id --local_amt LOCAL_AMT --push_amt PUSH_AMT`
|
`docker exec -it lnd-dev lncli --network=testnet openchannel node_id --local_amt LOCAL_AMT --push_amt PUSH_AMT`
|
||||||
|
|
||||||
**RoboSats development site should be accessible on 127.0.0.1:8000**
|
* Lock a bond from your own `lnd-dev` node
|
||||||
|
`docker exec -it lnd-dev lncli -network=testnet payinvoice <BOLT_11_INVOICE> --allow_self_payment`
|
||||||
|
|
||||||
|
**RoboSats development site should be accessible on 127.0.0.1:8000**
|
||||||
## The harder way (deprecated)
|
|
||||||
Setting up the stack on your base system is not supported by this guide anymore. Without dockerization of all services there is a thin chance you manage to have the platform running in less than 2 full days of work. These are legacy instructions, avoid them.
|
|
||||||
### Django development environment
|
|
||||||
### Install Python and pip
|
|
||||||
`sudo apt install python3 python3 pip`
|
|
||||||
|
|
||||||
### Install virtual environments
|
|
||||||
```
|
|
||||||
pip install virtualenvwrapper
|
|
||||||
```
|
|
||||||
|
|
||||||
### Add to .bashrc
|
|
||||||
|
|
||||||
```
|
|
||||||
export WORKON_HOME=$HOME/.virtualenvs
|
|
||||||
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
|
|
||||||
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=' -p /usr/bin/python3 '
|
|
||||||
export PROJECT_HOME=$HOME/Devel
|
|
||||||
source /usr/local/bin/virtualenvwrapper.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Reload startup file
|
|
||||||
`source ~/.bashrc`
|
|
||||||
|
|
||||||
### Create virtual environment
|
|
||||||
`mkvirtualenv robosats_env`
|
|
||||||
|
|
||||||
### Activate environment
|
|
||||||
`workon robosats_env`
|
|
||||||
|
|
||||||
### Install Django and Restframework
|
|
||||||
`pip3 install django djangorestframework`
|
|
||||||
|
|
||||||
## Install Django admin relational links
|
|
||||||
`pip install django-admin-relation-links`
|
|
||||||
|
|
||||||
## Install dependencies for websockets
|
|
||||||
Install Redis
|
|
||||||
`apt-get install redis-server`
|
|
||||||
Test redis-server
|
|
||||||
`redis-cli ping`
|
|
||||||
|
|
||||||
Install python dependencies
|
|
||||||
```
|
|
||||||
pip install channels
|
|
||||||
pip install django-redis
|
|
||||||
pip install channels-redis
|
|
||||||
```
|
|
||||||
## Install Celery for Django tasks
|
|
||||||
```
|
|
||||||
pip install celery
|
|
||||||
pip install django-celery-beat
|
|
||||||
pip install django-celery-results
|
|
||||||
```
|
|
||||||
|
|
||||||
Start up celery worker
|
|
||||||
`celery -A robosats worker --beat -l info -S django`
|
|
||||||
|
|
||||||
*Django 3.2.11 at the time of writting*
|
|
||||||
*Celery 5.2.3*
|
|
||||||
|
|
||||||
### Launch the local development node
|
|
||||||
|
|
||||||
```
|
|
||||||
python3 manage.py makemigrations
|
|
||||||
python3 manage.py migrate
|
|
||||||
python3 manage.py runserver
|
|
||||||
```
|
|
||||||
|
|
||||||
### Install other python dependencies
|
|
||||||
```
|
|
||||||
pip install robohash
|
|
||||||
pip install python-decouple
|
|
||||||
pip install ring
|
|
||||||
```
|
|
||||||
|
|
||||||
### Install LND python dependencies
|
|
||||||
```
|
|
||||||
cd api/lightning
|
|
||||||
pip install grpcio grpcio-tools googleapis-common-protos
|
|
||||||
git clone https://github.com/googleapis/googleapis.git
|
|
||||||
curl -o lightning.proto -s https://raw.githubusercontent.com/lightningnetwork/lnd/master/lnrpc/lightning.proto
|
|
||||||
python3 -m grpc_tools.protoc --proto_path=googleapis:. --python_out=. --grpc_python_out=. lightning.proto
|
|
||||||
```
|
|
||||||
We also use the *Invoices* and *Router* subservices for invoice validation and payment routing.
|
|
||||||
```
|
|
||||||
curl -o invoices.proto -s https://raw.githubusercontent.com/lightningnetwork/lnd/master/lnrpc/invoicesrpc/invoices.proto
|
|
||||||
python3 -m grpc_tools.protoc --proto_path=googleapis:. --python_out=. --grpc_python_out=. invoices.proto
|
|
||||||
curl -o router.proto -s https://raw.githubusercontent.com/lightningnetwork/lnd/master/lnrpc/routerrpc/router.proto
|
|
||||||
python3 -m grpc_tools.protoc --proto_path=googleapis:. --python_out=. --grpc_python_out=. router.proto
|
|
||||||
```
|
|
||||||
Relative imports are not working at the moment, so some editing is needed in
|
|
||||||
`api/lightning` files `lightning_pb2_grpc.py`, `invoices_pb2_grpc.py`, `invoices_pb2.py`, `router_pb2_grpc.py` and `router_pb2.py`.
|
|
||||||
|
|
||||||
For example in `lightning_pb2_grpc.py` , add "from . " :
|
|
||||||
|
|
||||||
`import lightning_pb2 as lightning__pb2`
|
|
||||||
|
|
||||||
to
|
|
||||||
|
|
||||||
`from . import lightning_pb2 as lightning__pb2`
|
|
||||||
|
|
||||||
Same for every other file.
|
|
||||||
|
|
||||||
Generated files can be automatically patched like this:
|
|
||||||
```
|
|
||||||
sed -i 's/^import .*_pb2 as/from . \0/' api/lightning/router_pb2.py
|
|
||||||
sed -i 's/^import .*_pb2 as/from . \0/' api/lightning/invoices_pb2.py
|
|
||||||
sed -i 's/^import .*_pb2 as/from . \0/' api/lightning/router_pb2_grpc.py
|
|
||||||
sed -i 's/^import .*_pb2 as/from . \0/' api/lightning/lightning_pb2_grpc.py
|
|
||||||
sed -i 's/^import .*_pb2 as/from . \0/' api/lightning/invoices_pb2_grpc.py
|
|
||||||
```
|
|
||||||
|
|
||||||
## React development environment
|
|
||||||
### Install npm
|
|
||||||
`sudo apt install npm`
|
|
||||||
|
|
||||||
npm packages we use
|
|
||||||
```
|
|
||||||
cd frontend
|
|
||||||
npm init -y
|
|
||||||
npm i webpack webpack-cli --save-dev
|
|
||||||
npm i @babel/core babel-loader @babel/preset-env @babel/preset-react --save-dev
|
|
||||||
npm i react react-dom --save-dev
|
|
||||||
npm install @material-ui/core
|
|
||||||
npm install @babel/plugin-proposal-class-properties
|
|
||||||
npm install react-router-dom@5.2.0
|
|
||||||
npm install @material-ui/icons
|
|
||||||
npm install material-ui-image
|
|
||||||
npm install @mui/system @emotion/react @emotion/styled
|
|
||||||
npm install react-native
|
|
||||||
npm install react-native-svg
|
|
||||||
npm install react-qr-code
|
|
||||||
npm install @mui/material
|
|
||||||
npm install websocket
|
|
||||||
npm install react-countdown
|
|
||||||
npm install @mui/icons-material
|
|
||||||
npm install @mui/x-data-grid
|
|
||||||
npm install react-responsive
|
|
||||||
npm install react-qr-reader
|
|
||||||
```
|
|
||||||
Note we are using mostly MaterialUI V5 (@mui/material) but Image loading from V4 (@material-ui/core) extentions (so both V4 and V5 are needed)
|
|
||||||
|
|
||||||
### Launch
|
|
||||||
from frontend/ directory
|
|
||||||
`npm run dev`
|
|
||||||
|
|
||||||
## Robosats background threads.
|
|
||||||
|
|
||||||
There is 3 processes that run asynchronously: two admin commands and a celery beat scheduler.
|
|
||||||
The celery worker will run the task of caching external API market prices and cleaning(deleting) the generated robots that were never used.
|
|
||||||
`celery -A robosats worker --beat -l debug -S django`
|
|
||||||
|
|
||||||
The admin commands are used to keep an eye on the state of LND hold invoices and check whether orders have expired
|
|
||||||
```
|
|
||||||
python3 manage.py follow_invoices
|
|
||||||
python3 manage.py clean_order
|
|
||||||
```
|
|
||||||
|
|
||||||
It might be best to set up system services to continuously run these background processes.
|
|
||||||
|
|
||||||
### Follow invoices admin command as system service
|
|
||||||
|
|
||||||
Create `/etc/systemd/system/follow_invoices.service` and edit with:
|
|
||||||
|
|
||||||
```
|
|
||||||
[Unit]
|
|
||||||
Description=RoboSats Follow LND Invoices
|
|
||||||
After=lnd.service
|
|
||||||
StartLimitIntervalSec=0
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
WorkingDirectory=/home/<USER>/robosats/
|
|
||||||
StandardOutput=file:/home/<USER>/robosats/follow_invoices.log
|
|
||||||
StandardError=file:/home/<USER>/robosats/follow_invoices.log
|
|
||||||
Type=simple
|
|
||||||
Restart=always
|
|
||||||
RestartSec=1
|
|
||||||
User=<USER>
|
|
||||||
ExecStart=python3 manage.py follow_invoices
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
```
|
|
||||||
|
|
||||||
Then launch it with
|
|
||||||
|
|
||||||
```
|
|
||||||
systemctl start follow_invoices
|
|
||||||
systemctl enable follow_invoices
|
|
||||||
```
|
|
||||||
### Clean orders admin command as system service
|
|
||||||
|
|
||||||
Create `/etc/systemd/system/clean_orders.service` and edit with (replace <USER> for your username):
|
|
||||||
|
|
||||||
```
|
|
||||||
[Unit]
|
|
||||||
Description=RoboSats Clean Orders
|
|
||||||
After=lnd.service
|
|
||||||
StartLimitIntervalSec=0
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
WorkingDirectory=/home/<USER>/robosats/
|
|
||||||
StandardOutput=file:/home/<USER>/robosats/clean_orders.log
|
|
||||||
StandardError=file:/home/<USER>/robosats/clean_orders.log
|
|
||||||
Type=simple
|
|
||||||
Restart=always
|
|
||||||
RestartSec=1
|
|
||||||
User=<USER>
|
|
||||||
ExecStart=python3 manage.py clean_orders
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
```
|
|
||||||
|
|
||||||
Then launch it with
|
|
||||||
|
|
||||||
```
|
|
||||||
systemctl start clean_orders
|
|
||||||
systemctl enable clean_orders
|
|
||||||
```
|
|
Loading…
Reference in New Issue
Block a user