Sol on Akash for Dummies
How to run a Solana Validator on the Akash Network the simple way
This is a multi Stage deployment guide with the aim of providing users the information to deploy and maintain a Solana Validator Node on the Akash Network with minimal friction and deployment knowledge.
- Stage 1 consists of deploying an Ubuntu image to Akash. Think of it as a normal EC2 AWS Ubuntu instance you can install software and run commands on.
- Stage 2 is the process of running a Solana Validator Node on that Ubuntu instance we deployed to Akash in Stage 1.
Stage 1-
Ubuntu on Akash
(Credit- CoffeeRoaster4435)
Setup an “ssh” Ubuntu image on Akash
Create the Akash-Ubuntu Deploy.yml-
(While also exposing some ports we will need for later)
---
version: "2.0"services:
web:
image: user994455/ubuntu-base:0.2
env:
- sshport=22000
- pubkey=your-public-ssh-key-here
expose:
- port: 22000
as: 22000
to:
- global: true
- global: true
- port: 8899
as: 8899
proto: tcp
to:
- global: true
- port: 8000
as: 8000
proto: tcp
to:
- global: true
- port: 8001
as: 8001
proto: tcp
to:
- global: true
- port: 8002
as: 8002
proto: tcp
to:
- global: true
- port: 8003
as: 8003
proto: tcp
to:
- global: true
- port: 8004
as: 8004
proto: tcp
to:
- global: true
- port: 8005
as: 8005
proto: tcp
to:
- global: true
- port: 8006
as: 8006
proto: tcp
to:
- global: true
- port: 8007
as: 8007
proto: tcp
to:
- global: true
- port: 8008
as: 8008
proto: tcp
to:
- global: true
- port: 8009
as: 8009
proto: tcp
to:
- global: true
- port: 8010
as: 8009
proto: tcp
to:
- global: true
profiles:
compute:
web:
resources:
cpu:
units: 4
memory:
size: 8Gi
storage:
size: 20Gi
placement:
dcloud:
attributes:
host: akash
signedBy:
anyOf:
- "akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63"
pricing:
web:
denom: uakt
amount: 20deployment:
web:
dcloud:
profile: web
count: 1
Prepare your ssh session-
On your workstation setup an ssh public/private key pair.
$ssh-keygen -t rsa
# (a password is optional. But in most cases you don't need one).
# Note that $HOME/.ssh/id_rsa.pub is now created
Update deploy.yml-
Copy and paste the contents of $HOME/.ssh/id_rsa.pub
and paste them into deploy.yml -pubkey=your-public-ssh-key-here
(deploy.yml : line 8). NOTE: Make sure that you do not use any "
around the pubkey as this will cause problems.
Update resources as needed. Set the amount of RAM / CPU / disk space as needed.
Ensure the steps you follow in Deploy Commands are executed in the same directory your Deploy.yml is located in.
(source: https://github.com/coffeeroaster/akash-ubuntu)
Deploy to Akash-
- Install Akash Binaries https://github.com/ovrclk/akash/releases/tag/v0.12.1
- Point To the Binaries In Your Path
export PATH=$PATH:/path/to/directory
You will need an Akash wallet with at least 5 AKT in order to provide escrow to a provider for your deployment. These commands will have certain flags filled to keep the user experience as simple as possible and assume you already have an Akash wallet in your environment. If you do not follow the steps on the Akash Docs https://docs.akash.network/guides/wallet
Deploy Commands
Step 1: Create a certificate & deployment
akash tx cert create client --chain-id akashnet-2 --keyring-backend os --from <your key name> --node=tcp://135.181.60.250:26657 --fees 5000uakt
--------------------------------------------------------------------akash tx deployment create deploy.yml --from <your wallet address here> --node=tcp://135.181.60.250:26657 --chain-id akashnet-2 --fees 5000uakt -y
After you run the akash tx deployment create
command your client will spit out a json string. Within the string you will be given a dseq value.
"key":"dseq","value":"140324"
Note: the dseq value given here cannot be used in order to deploy you must acquire your own.
Step 2: Export your DSEQ as an environment variable
export DSEQ=<your-dseq-value>
Step 3: Make an order and view your bids
akash query market order get --node=http://rpc.akash.forbole.com:80 --owner <your-wallet-address> --dseq $DSEQ --oseq 1 --gseq 1
--------------------------------------------------------------------akash query market bid list --owner <your-wallet-address> --node=http://rpc.akash.forbole.com:80 --dseq $DSEQ
Once you run query market bid list
you will receive bids from multiple different providers.
- bid:bid_id:dseq: "140324"gseq: 1oseq: 1owner: akash1vn06ycjjnvsvl639fet9lajjctuturrtx7fvujprovider: akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7created_at: "140326"price:amount: "1"denom: uaktstate: openescrow_account:balance:amount: "50000000"denom: uaktid:scope: bidxid: akash1vn06ycjjnvsvl639fet9lajjctuturrtx7fvuj/140324/1/1/akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7owner: akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7settled_at: "140326"state: opentransferred:amount: "0"denom: uakt
Simply select a provider from the list. To make the experience easier a provider was added to the following commands.
Step 4: Create your lease & send your manifest
akash tx market lease create --chain-id akashnet-2 --node=tcp://135.181.60.250:26657 --owner <your-wallet-address> --dseq $DSEQ --gseq 1 --oseq 1 --provider akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7 --from <your-key-name> --fees 5000uakt
---------------------------------------------------------------------akash query market lease list --owner <your-wallet-address> --node=tcp://135.181.60.250:26657 --dseq $DSEQ
--------------------------------------------------------------------- akash provider send-manifest deploy.yml --node=tcp://135.181.60.250:26657 --dseq $DSEQ --provider akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7 --home ~/.akash --from <your-wallet-address>
Step 5: View your status and acquire port/URL
akash provider lease-status --node=tcp://135.181.60.250:26657 --home ~/.akash --dseq $DSEQ --from <your-key-name> --provider akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
After running akash provider lease-status
you should get
{
"services": {
"web": {
"name": "web",
"available": 1,
"total": 1,
"uris": null,
"observed_generation": 1,
"replicas": 1,
"updated_replicas": 1,
"ready_replicas": 1,
"available_replicas": 1
}
},
"forwarded_ports": {
"web": [
{
"host": "cluster.ewr1p0.mainnet.akashian.io", <- your url
"port": 22000,
"externalPort": <this is your random port>,
"proto": "TCP",
"available": 1,
"name": "web"
}
]
}
}
Finally to ssh in to your Ubuntu deployment run
ssh -p <your-random-port> root@<your-url>
Stage 2-
Solana Validator Node
Step 1: Install the Solana release v1.6.10 on your machine
sh -c “$(curl -sSfL https://release.solana.com/v1.6.10/install)"
Please update your PATH environment variable to include the solana programs:
Check your version
solana --version
Step 2: Configure Solana CLI
solana config set --url http://api.devnet.solana.com
Confirm the Cluster is reachable
solana transaction-count
Confirm your installation
solana-gossip spy --entrypoint entrypoint.devnet.solana.com:8001
Step 3:
Create Identity
solana-keygen new -o ~/validator-keypair.json
Set the config path to your keypair
solana config set --keypair ~/validator-keypair.json
Airdrop some SOL
solana airdrop 1
Create Your Vote Account
solana-keygen new -o ~/vote-account-keypair.json
Step 4:
Run the Validator Node
solana-validator \
--identity ~/validator-keypair.json \
--vote-account ~/vote-account-keypair.json \
--rpc-port 8899 \
--entrypoint entrypoint.devnet.solana.com:8001 \
--limit-ledger-size \
--log ~/solana-validator.log
Optional-
Run it in the background with Systemd
[Unit]
Description=Solana Validator
After=network.target
Wants=solana-sys-tuner.service
StartLimitIntervalSec=0[Service]
Type=simple
Restart=always
RestartSec=1
User=sol
LimitNOFILE=700000
LogRateLimitIntervalSec=0
Environment="PATH=/bin:/usr/bin:/home/sol/.local/share/solana/install/active_release/bin"
ExecStart=/home/sol/bin/validator.sh[Install]
WantedBy=multi-user.target
In progress-
Since the port 22 is being opened as port 80 in order to allow for ssh, you must use a load balancer/reverse proxy to expose the remainder of the ports.