-
Notifications
You must be signed in to change notification settings - Fork 241
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: add Docker Usage Instructions to README.md #1424
base: master
Are you sure you want to change the base?
Conversation
LGTM |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice! 💯
Just a few questions/comments to try to make this as simple as possible!
|
||
### Updating | ||
|
||
Run `docker stop avago; docker rm avago;` then start a new container with the latest version tag in your `docker run` command. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit (or maybe &&
is more appropriate)
Run `docker stop avago; docker rm avago;` then start a new container with the latest version tag in your `docker run` command. | |
Run `docker stop avago; docker rm avago` then start a new container with the latest version tag in your `docker run` command. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would keep ;
for idempotency. It doesn’t make an actual difference since docker stop
always returns zero, but ;
makes a clear statement: "all commands will execute no matter what."
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree to remove the trailing ;
I'm not sure why it's there.
For the middle ;
, anyway docker rm avago
will fail if the stop failed.
- `AVAGO_HTTP_PORT` is set to `8080` instead of `9650` to avoid conflicts with the validator. | ||
- `AVAGO_HTTP_ALLOWED_HOSTS` and `AVAGO_HTTP_HOST` are required to allow the RPC server to be accessed from outside. You'll need to secure it with HTTPS; Caddy is recommended. | ||
|
||
RPC example uses another folder `~/.avalanchego_rpc` to avoid conflicts with the validator if you want to run both on the same machine. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
curious is it common / recommended to run both on the same machine?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don’t see why not. It’s a trusted binary, so Docker-level isolation should be enough, as long as you have sufficient resources. Subnet-EVM without X and C chains doesn’t require much. Would I run it on the same machine for DFK? Probably not. But for 95% of other networks, especially on Fuji, I don’t see an issue.
Actually, that raises another question—why is it not recommended to run the same node as both a validator and a public RPC node?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not recommended as the validator could be targeted with many API requests when it is its turn to propose a block, or otherwise targeted so it can miss participating in necessary consensus queries.
Co-authored-by: Quentin McGaw <[email protected]> Signed-off-by: containerman17 <[email protected]>
-v ~/.avalanchego_rpc/:/home/avalanche/.avalanchego \ | ||
-e AVAGO_NETWORK_ID=fuji \ | ||
-e AVAGO_PARTIAL_SYNC_PRIMARY_NETWORK=true \ | ||
-e AVAGO_TRACK_SUBNETS=hk755meusfKqBb9C9RfzzCxZFkdSXhaFHTcbtycMUSQ11o2cd \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should this be?
-e AVAGO_TRACK_SUBNETS=hk755meusfKqBb9C9RfzzCxZFkdSXhaFHTcbtycMUSQ11o2cd \ | |
-e AVAGO_TRACK_SUBNETS=REPLACE_THIS_WITH_YOUR_SUBNET_ID \ |
### Networking | ||
|
||
Using `--network host` is recommended to avoid any issues. | ||
If you know what you are doing, you will need port `AVAGO_STAKING_PORT` (default `9651`) open for the validator to connect to the subnet. For the RPC server, open `AVAGO_HTTP_PORT` (default `9650`). Do not attempt to remap `AVAGO_STAKING_PORT` using the Docker `-p` flag (e.g., `-p 9651:1234`); it will not work. Instead, set `AVAGO_STAKING_PORT=1234` and then use `-p 1234:1234`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you know what you are doing, you will need port `AVAGO_STAKING_PORT` (default `9651`) open for the validator to connect to the subnet. For the RPC server, open `AVAGO_HTTP_PORT` (default `9650`). Do not attempt to remap `AVAGO_STAKING_PORT` using the Docker `-p` flag (e.g., `-p 9651:1234`); it will not work. Instead, set `AVAGO_STAKING_PORT=1234` and then use `-p 1234:1234`. | |
If you know what you are doing, you will need port `AVAGO_STAKING_PORT` (default `9651`) open for the validator to connect to the subnet. For the RPC server, open `AVAGO_HTTP_PORT` (default `9650`). Only port map the `AVAGO_STAKING_PORT` to the same port number, on both the container (e.g. `-p 1234:1234`) and your router port forwarding, otherwise it won't be reachable, which is explained below. |
- `AVAGO_PARTIAL_SYNC_PRIMARY_NETWORK`: Ensures you don't sync the X and C-Chains. | ||
- `AVAGO_TRACK_SUBNETS`: Sets the subnet ID to track. It will track all chains in the subnet. | ||
- `AVAGO_NETWORK_ID=fuji`: Sets the network ID to Fuji. Remove to sync Mainnet. | ||
- `AVAGO_PUBLIC_IP_RESOLUTION_SERVICE=ifconfigme`: Required for AWS EC2 instances to be accessed from outside AWS. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit A markdown table with env variable, default value and description would be nice
``` | ||
|
||
- `AVAGO_STAKING_PORT` is set to `9653` in case you want to run this on the same machine as the validator. Remove this to set to the default `9651`. | ||
- `AVAGO_HTTP_PORT` is set to `8080` instead of `9650` to avoid conflicts with the validator. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would leave AVAGO_HTTP_PORT=9650
in the docker run command, and specify that the port can be changed in case of a conflict.
avaplatform/subnet-evm:v0.7.1-rc.0 | ||
``` | ||
|
||
- `AVAGO_STAKING_PORT` is set to `9653` in case you want to run this on the same machine as the validator. Remove this to set to the default `9651`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would leave AVAGO_STAKING_PORT=9651
in the docker run command, and specify that the port can be changed in case of a conflict.
|
||
```bash | ||
docker run -it -d \ | ||
--name rpc \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A more explicit name would be nice, for example
--name rpc \ | |
--name avago-fuji-rpc \ |
|
||
```bash | ||
docker run -it -d \ | ||
--name avago \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
--name avago \ | |
--name avago-fuji-validator \ |
docker run -it -d \ | ||
--name avago \ | ||
--network host \ | ||
-v ~/.avalanchego:/home/avalanche/.avalanchego \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would rather have it as
-v ~/.avalanchego:/home/avalanche/.avalanchego \ | |
-v /your/validator/path:/home/avalanche/.avalanchego \ |
to make it explicit it can be chosen. Plus ~
doesn't work on Windows, if that matters.
docker run -it -d \ | ||
--name rpc \ | ||
--network host \ | ||
-v ~/.avalanchego_rpc/:/home/avalanche/.avalanchego \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be nicer/clearer to just make it explicit the user should pick a path of their choosing
-v ~/.avalanchego_rpc/:/home/avalanche/.avalanchego \ | |
-v /your/rpc/path/:/home/avalanche/.avalanchego \ |
|
||
### Updating | ||
|
||
Run `docker stop avago; docker rm avago;` then start a new container with the latest version tag in your `docker run` command. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree to remove the trailing ;
I'm not sure why it's there.
For the middle ;
, anyway docker rm avago
will fail if the stop failed.
|
||
### Data Persistence | ||
|
||
To persist data across container restarts, you need to mount the `/root/.avalanchego` directory. For example, `-v ~/.avalanchego:/root/.avalanchego`. The container runs as root by default. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm confused, the commands below bind mount /home/avalanche/.avalanchego
although they don't have a user setting. Does it run as root or not by default??
Why this should be merged
The README.md currently lacks instructions on running subnet-evm using Docker. Adding a Docker section will help users set up and configure subnet-evm easily in containerized environments.
How this works
Added a new Run in Docker section to the README.md with brief instructions on configuration, data persistence, updating, networking, and example setups for both a Fuji subnet validator and RPC server.
How this was tested
I tested the examples manually.
Need to be documented?
No additional documentation is needed; all information is included in the updated README.md.
Need to update RELEASES.md?
No update to RELEASES.md is necessary since this is a documentation addition.