展開に必要なすべての手順を最初から利用できるようにしながら、短くするようにします。
これは本番のSolanaノードのデプロイメントではなく、この記事の最後に見られる理由による開発のデプロイメントであることを指摘する必要があります。
Ubuntu 20.04.2 LTS
Linuxディストリビューションと次のソフトウェアを使用しました。
– akash 🙁 Akashnetでv0.12.1
動作するため)。
–ソラナ:v1.6.10
(Akashnetに展開します)。
ubuntu 20.04.2.LTS Linuxディストリビューションとは?
Linuxのubuntuバージョンということ。OS。
■Ubuntu
Debianをベースに作られた
世界的な人気を持つディストリビューションです。
使いやすいデスクトップで
初心者にも抵抗なく使えるのが特徴ですが、
Debianと同じく
多くの企業のシステムにも使われています。
素敵なあなたの新しい友達:
– Akashnetは将来の分散型クラウドです。
–ソラナは、世界中のビルダーは、スケールの今日という暗号のアプリを作成する支援blockchain高性能です。
アイデアは単純です。SolanaコンテナをデプロイするためにAkashnetデクラウドを活用します。Amazon AWSよりもAkashnetでインスタンスを実行する方が
最大86%安価ですhttps://akashlytics.com/price-compare(この記事を書いた時点で)わかりました
solanaコンテナとは?
solanaのコンテナ。solanaを動かせるライブラリが入った環境。
これをAkashクラウド(インフラ)の上に立てたい
、私はあまり話すのが苦手なので、あなたと私の時間を節約するために、CLIに直接ジャンプしましょう。
1.akashクライアントをインストールします
AKASH_NET="https://raw.githubusercontent.com/ovrclk/net/master/mainnet"
AKASH_VERSION="$(curl -s "$AKASH_NET/version.txt")"
curl https://raw.githubusercontent.com/ovrclk/akash/master/godownloader.sh | sh -s -- "v$AKASH_VERSION"
jq
この記事で使用するツールもインストールしてください。
2.akashウォレットを作成します
akash keys add default
このコマンドは、意志の出力ニーモニックフレーズは、確認して安全な場所に保存します。
また、あなたの住所も出力されますakash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
。私の場合、住所はでした。
export AKASH_ACCOUNT_ADDRESS=akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
Akashウォレットの詳細https://docs.akash.network/guides/wallet
3.akashウォレットに資金を提供します
開始するには、10 AKT
(Akashトークン)について必要になります。
ここに記載されている取引所の1つで購入できますhttps://akash.network/token/
ウォレットの残高を照会できます
export AKASH_NET="https://raw.githubusercontent.com/ovrclk/net/master/mainnet"
export AKASH_NODE="$(curl -s "$AKASH_NET/rpc-nodes.txt" | shuf -n 1)"
akash \
--node "$AKASH_NODE" \
query bank balances "$AKASH_ACCOUNT_ADDRESS"
金種:1 akt = 1000000 uakt(akt * 10 ^ 6)、または
-o json | jq -r '(.balances[0].amount | tonumber / pow(10; 6))'
コマンドラインで追加できます;-)
プロダクションakashnet-2Akashネットワークを使用しています。さまざまなAkashネットワークの詳細については、https: //docs.akash.network/guides/versionを参照してください。
4.証明書ファイルを作成します
デプロイメントを作成するには、最初に証明書を作成する必要があります。これを行うには、次を実行します。
export AKASH_CHAIN_ID="$(curl -s "$AKASH_NET/chain-id.txt")"
akash tx cert create client \
--from default \
--chain-id $AKASH_CHAIN_ID \
--node $AKASH_NODE \
--gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15
証明書はアカウントごとに1回だけ作成する必要があり、すべての展開で使用できます。証明書の詳細https://docs.akash.network/design/mtls
5.デプロイメントマニフェストファイルを準備します
solana.yml
次の内容で名前を付けたファイルを作成します。
---
version: "2.0"
services:
solana:
image: solanalabs/solana:v1.6.10
expose:
- port: 8899
as: 8899
proto: tcp
to:
- global: true
profiles:
compute:
solana:
resources:
cpu:
units: 0.1
memory:
size: 512Mi
storage:
size: 512Mi
placement:
akash:
attributes:
host: akash
signedBy:
anyOf:
- "akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63"
pricing:
solana:
denom: uakt
amount: 10
deployment:
solana:
akash:
profile: solana
count: 1
価格設定-複数の異なるプロバイダーからの入札があることに注意してください。この場合、両方のプロバイダーがたまたま1uAKTの価格を受け入れる用意があります。これは、コンテナを実行するためにブロックごとに1uAKTまたは0.000001AKTを使用してリースを作成できることを意味します。
価格設定は制限を設定するため、プロバイダーは展開に入札する方法を知ることができます。つまり、ブロックごとのuaktの量(各ブロックは6秒ごとに発生します)を支払う用意があります。
したがって、1uaktの場合、月額= $ 3.28相当の1aktを支払うことになります。((1*((60/6)*60*24*30.436875))/10^6)*3.28
$1.44
31 May 2021
signedBy
akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63
ドキュメントのようにする必要がありますhttps://docs.akash.network/guides/deploy
signedBy
は「検証」です。プロバイダーがakashによって承認された後、セキュリティと信頼性を確保するためにakashによって署名されます。
Akashマニフェストの作成に使用されるSDL(スタック定義言語)の詳細https://docs.akash.network/documentation/sdl
6.デプロイメントを作成します
akash tx deployment create solana.yml \
--from default \
--node $AKASH_NODE \
--chain-id $AKASH_CHAIN_ID \
--gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15
このコマンドが問題Error: RPC error -32603 - Internal error: timed out waiting for tx to be included in a block
なく終了する場合は、展開IDを見つけるためにakashブロックチェーンにクエリを実行できます。
$ akash query txs \
--events "message.sender=$AKASH_ACCOUNT_ADDRESS&message.action=create-deployment" \
--page 1 --limit 999999 \
| jq -r '.txs[] | [ .tx.body.messages[].id[] ] | @csv' | \
tail -5
"akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h","1172777"
デプロイメントを照会します。
メッセージの実行に失敗するのを避けるために、次の3つの「SEQ」変数を明示的に「エクスポート」していません。メッセージインデックス:0:後で「akashtxdeploymentcreate」で「Deploymentclosed」エラーが発生しました。このエラーが発生した場合は、単に
unset AKASH_DSEQ
。
$ AKASH_DSEQ=1172777
$ AKASH_GSEQ=1
$ AKASH_OSEQ=1
$ akash query deployment get \
--owner $AKASH_ACCOUNT_ADDRESS \
--node $AKASH_NODE \
--dseq $AKASH_DSEQ
deployment:
created_at: "1172779"
deployment_id:
dseq: "1172777"
owner: akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
state: active
version: R+bMsK3+N7Wtf8MWmUqoIJTgagXPunxFJqV4EXZahYE=
escrow_account:
balance:
amount: "5000000"
denom: uakt
id:
scope: deployment
xid: akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h/1172777
owner: akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
settled_at: "1172791"
state: open
transferred:
amount: "0"
denom: uakt
groups:
- created_at: "1172779"
group_id:
dseq: "1172777"
gseq: 1
owner: akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
group_spec:
name: akash
requirements:
attributes:
- key: host
value: akash
signed_by:
all_of: []
any_of:
- akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63
resources:
- count: 1
price:
amount: "10"
denom: uakt
resources:
cpu:
attributes: []
units:
val: "100"
endpoints:
- kind: RANDOM_PORT
memory:
attributes: []
quantity:
val: "536870912"
storage:
attributes: []
quantity:
val: "536870912"
state: open
お気づきかもしれませんが、5 AKTは現在、の下にescrow_account
あり、akashウォレットの残高はその値だけ減少しています。これらのトークンは、リースを作成するとすぐにこのデプロイメントで使用されます。そして、それらは、リース/デプロイメントを閉じるとすぐに返されます(リース自体に使用されたものを除いたもの)。
7.入札について市場に問い合わせる
実際にデプロイメントを実行したいので、市場が提供するものを確認し、快適な入札を受け入れ、リースを作成し、デプロイメントのマニフェストを送信して、デプロイメントを稼働させる必要があります。
$ akash query market bid list \
--owner=$AKASH_ACCOUNT_ADDRESS \
--node $AKASH_NODE \
--dseq $AKASH_DSEQ \
--state open
bids:
- bid:
bid_id:
dseq: "1172777"
gseq: 1
oseq: 1
owner: akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
provider: akash10cl5rm0cqnpj45knzakpa4cnvn5amzwp4lhcal
created_at: "1172780"
price:
amount: "1"
denom: uakt
state: open
escrow_account:
balance:
amount: "50000000"
denom: uakt
id:
scope: bid
xid: akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h/1172777/1/1/akash10cl5rm0cqnpj45knzakpa4cnvn5amzwp4lhcal
owner: akash10cl5rm0cqnpj45knzakpa4cnvn5amzwp4lhcal
settled_at: "1172780"
state: open
transferred:
amount: "0"
denom: uakt
- bid:
bid_id:
dseq: "1172777"
gseq: 1
oseq: 1
owner: akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h
provider: akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
created_at: "1172780"
price:
amount: "1"
denom: uakt
state: open
escrow_account:
balance:
amount: "50000000"
denom: uakt
id:
scope: bid
xid: akash1h24fljt7p0nh82cq0za0uhsct3sfwsfu9w3c9h/1172777/1/1/akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
owner: akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
settled_at: "1172780"
state: open
transferred:
amount: "0"
denom: uakt
pagination:
next_key: null
total: "0"
AKASH_PROVIDER
環境変数を、利用可能な市場入札から選択したものに設定します。
AKASH_PROVIDER=akash10cl5rm0cqnpj45knzakpa4cnvn5amzwp4lhcal
akash query market bid list
入札が表示されていない場合は、unset AKASH_PROVIDER
環境変数を確認してください。
8.リースを作成/入札を受け入れる
次のコマンドを実行して、上記で選択したプロバイダーからの入札のリースを作成します。
akash tx market lease create \
--chain-id $AKASH_CHAIN_ID \
--node $AKASH_NODE \
--owner $AKASH_ACCOUNT_ADDRESS \
--dseq $AKASH_DSEQ \
--gseq $AKASH_GSEQ \
--oseq $AKASH_OSEQ \
--provider $AKASH_PROVIDER \
--from default \
--gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15
次の手順でマニフェストをアップロードして展開プロセスを完了していなくても、リースが作成されると、プロバイダーは展開のエスクローアカウントからの引き落としを開始することに注意してください。
9.マニフェストを送信してSolanaノードをデプロイします
ここで、Solanaのデプロイを開始するには、マニフェストをプロバイダーに送信する必要があります。
akash provider send-manifest solana.yml \
--node $AKASH_NODE \
--dseq $AKASH_DSEQ \
--provider $AKASH_PROVIDER \
--from default
しばらくすると、展開を確認できるようになります。
$ akash provider lease-status \
--node $AKASH_NODE \
--dseq $AKASH_DSEQ \
--provider $AKASH_PROVIDER \
--from default
{
"services": {
"solana": {
"name": "solana",
"available": 1,
"total": 1,
"uris": null,
"observed_generation": 1,
"replicas": 1,
"updated_replicas": 1,
"ready_replicas": 1,
"available_replicas": 1
}
},
"forwarded_ports": {
"solana": [
{
"host": "cluster.sjc1p0.mainnet.akashian.io",
"port": 8899,
"externalPort": 32509,
"proto": "TCP",
"available": 1,
"name": "solana"
}
]
}
}
エンドポイントURIはcluster.sjc1p0.mainnet.akashian.io:32509
、この記述の最後でわかるので
は32509
なく、ポートである理由8899
です(nodePortを参照)。
10.AkashnetでSolanaコンテナのログを確認します
そこにSolanaノードのニーモニックシードフレーズが表示されます。
$ akash \
--node "$AKASH_NODE" \
provider lease-logs \
--dseq "$AKASH_DSEQ" \
--gseq "$AKASH_GSEQ" \
--oseq "$AKASH_OSEQ" \
--provider "$AKASH_PROVIDER" \
--from default \
--follow
[solana-648bbc8979-hrjq6] solana-faucet 1.6.10 (src:5d4654d2; feat:3533521759)
[solana-648bbc8979-hrjq6] solana-genesis 1.6.10 (src:5d4654d2; feat:3533521759)
[solana-648bbc8979-hrjq6] solana-keygen 1.6.10 (src:5d4654d2; feat:3533521759)
[solana-648bbc8979-hrjq6] solana-validator 1.6.10 (src:5d4654d2; feat:3533521759)
[solana-648bbc8979-hrjq6] + solana address
[solana-648bbc8979-hrjq6] Error: No such file or directory (os error 2)
[solana-648bbc8979-hrjq6] + echo Generating default keypair
[solana-648bbc8979-hrjq6] Generating default keypair
[solana-648bbc8979-hrjq6] + solana-keygen new --no-passphrase
[solana-648bbc8979-hrjq6] Generating a new keypair
[solana-648bbc8979-hrjq6] Wrote new keypair to /root/.config/solana/id.json
[solana-648bbc8979-hrjq6] ==============================================================================
[solana-648bbc8979-hrjq6] pubkey: 2tpqeMBuqQNd2F6pmQmb2Dyj1A6k2yqqCnWXuWh2pX14
[solana-648bbc8979-hrjq6] ==============================================================================
[solana-648bbc8979-hrjq6] Save this seed phrase to recover your new keypair:
[solana-648bbc8979-hrjq6] wagon layer regret misery divorce wild noodle rent actress reflect sister lift
[solana-648bbc8979-hrjq6] ==============================================================================
...
[solana-648bbc8979-hrjq6] [2021-05-31T13:06:27.045978808Z INFO solana_core::cluster_info]
[solana-648bbc8979-hrjq6] IP Address |Age(ms)| Node identifier | Version |Gossip| TPU |TPUfwd| TVU |TVUfwd|Repair|ServeR|ShredVer
[solana-648bbc8979-hrjq6] ------------------+-------+----------------------------------------------+---------+------+------+------+------+------+------+------+--------
[solana-648bbc8979-hrjq6] 127.0.0.1 me| 4558 | 3QDTDmtqV3rLDdkLVPzP5RLg9TdXLFA7QPzv6Eeo72fi | 1.6.10 | 8001 | 8003 | 8004 | 8000 | 8002 | 8006 | 8007 | 48122
[solana-648bbc8979-hrjq6] Nodes: 1
[solana-648bbc8979-hrjq6]
[solana-648bbc8979-hrjq6] RPC Address |Age(ms)| Node identifier | Version | RPC |PubSub|ShredVer
[solana-648bbc8979-hrjq6] ------------------+-------+----------------------------------------------+---------+------+------+--------
[solana-648bbc8979-hrjq6] 127.0.0.1 me| 4558 | 3QDTDmtqV3rLDdkLVPzP5RLg9TdXLFA7QPzv6Eeo72fi | 1.6.10 | 8899 | 8900 | 48122
[solana-648bbc8979-hrjq6] RPC Enabled Nodes: 1
...
11.AkashnetでSolanaノードをクエリします
使用ソラナのJSONのRPC APIを使用すると、あなたのソラナノードを照会することができます:
$ curl -s http://cluster.sjc1p0.mainnet.akashian.io:32509 -X POST -H "Content-Type: application/json" -d '
{"jsonrpc":"2.0","id":1, "method":"getBlockTime","params":[5]}
' | jq -r '.result | todate'
2021-05-31T13:05:39Z
$ curl -s http://cluster.sjc1p0.mainnet.akashian.io:32509 -X POST -H "Content-Type: application/json" -d '
{"jsonrpc":"2.0","id":1, "method":"getIdentity"}
'
{"jsonrpc":"2.0","result":{"identity":"3QDTDmtqV3rLDdkLVPzP5RLg9TdXLFA7QPzv6Eeo72fi"},"id":1}
$ curl -s http://cluster.sjc1p0.mainnet.akashian.io:32509 -X POST -H "Content-Type: application/json" -d '
{"jsonrpc":"2.0", "id":1, "method":"getClusterNodes"}
' | jq .
{
"jsonrpc": "2.0",
"result": [
{
"featureSet": 3533521759,
"gossip": "127.0.0.1:8001",
"pubkey": "3QDTDmtqV3rLDdkLVPzP5RLg9TdXLFA7QPzv6Eeo72fi",
"rpc": "127.0.0.1:8899",
"shredVersion": 48122,
"tpu": "127.0.0.1:8003",
"version": "1.6.10"
}
],
"id": 1
}
12.展開の終了
テストが終了したら、展開を終了できます。
akash tx deployment close \
--node $AKASH_NODE \
--chain-id $AKASH_CHAIN_ID \
--dseq $AKASH_DSEQ \
--owner $AKASH_ACCOUNT_ADDRESS \
--from default \
--gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15
13.展開のためにより多くのAKTをデポジットする
展開に満足していて、1日停止したくない場合は、エスクローアカウントにさらにAKTトークンをデポジットできます。
akash tx deployment deposit \
--from default \
--chain-id $AKASH_CHAIN_ID \
--node $AKASH_NODE 1000000uakt \
--dseq $AKASH_DSEQ \
--gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15
14.本番Solanaバリデーターノード
本番環境のSolanaバリデーターノードのデプロイでは、マニフェストファイルを次のように変更する必要があります。また、推奨されるように、CPU、メモリ、ストレージの制限も解除する必要があります。
---
version: "2.0"
services:
solana:
image: solanalabs/solana:v1.6.10
expose:
- port: 8899
as: 8899
proto: tcp
to:
- global: true
- port: 8001
as: 8001
proto: tcp
to:
- global: true
- port: 8900
as: 8900
proto: tcp
to:
- global: true
- port: 8010
as: 8010
proto: udp
to:
- global: true
- port: 8011
as: 8011
proto: udp
to:
- global: true
- port: 8012
as: 8012
proto: udp
to:
- global: true
- port: 8013
as: 8013
proto: udp
to:
- global: true
- port: 8014
as: 8014
proto: udp
to:
- global: true
- port: 8015
as: 8015
proto: udp
to:
- global: true
- port: 8016
as: 8016
proto: udp
to:
- global: true
- port: 8017
as: 8017
proto: udp
to:
- global: true
- port: 8018
as: 8018
proto: udp
to:
- global: true
- port: 8019
as: 8019
proto: udp
to:
- global: true
- port: 8020
as: 8020
proto: udp
to:
- global: true
env:
- SOLANA_RUN_SH_CLUSTER_TYPE=mainnet-beta
- |
SOLANA_RUN_SH_VALIDATOR_ARGS=
--trusted-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2
--trusted-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ
--trusted-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ
--trusted-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S
--no-untrusted-rpc
--private-rpc
--entrypoint entrypoint.mainnet-beta.solana.com:8001
--entrypoint entrypoint2.mainnet-beta.solana.com:8001
--entrypoint entrypoint3.mainnet-beta.solana.com:8001
--entrypoint entrypoint4.mainnet-beta.solana.com:8001
--entrypoint entrypoint5.mainnet-beta.solana.com:8001
--expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d
--wal-recovery-mode skip_any_corrupted_record
--limit-ledger-size
--dynamic-port-range 8010-8020
profiles:
compute:
solana:
resources:
cpu:
units: 0.1
memory:
size: 512Mi
storage:
size: 512Mi
placement:
akash:
attributes:
host: akash
signedBy:
anyOf:
- "akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63"
pricing:
solana:
denom: uakt
amount: 10
deployment:
solana:
akash:
profile: solana
count: 1
--dynamic-port-range 8010-8020
引数で指定されたポートなど、より多くのポートを公開する必要がある可能性があります。
唯一の注意点は、次のようなnodePortポートを、いわゆる、非HTTP / HTTPS(80/443)TCPポートをエクスポートすることはできないということです8899/tcp
、8010:8020/udp
そのまま直接。
Akashnetプロバイダーは、コンテナーを実際に実行するために内部でKubernetesを使用します。Kubernetesコントロールプレーンは、--service-node-port-range
フラグ(default: 30000-32767)
(nodePort)で指定された範囲からポートを割り当てます。
これは、オペレーターが最初にSolanaノードをデプロイしてから、プロバイダーのKubernetesがAkashデプロイメントに割り当てたポートを確認する必要があることを意味します。
次に、ロードバランサー/リバースプロキシ(つまり、nginx / haprorxy / traefik)を使用して、これらのポートに転送します。
また--public-rpc-address <HOST:PORT>
、Solanaバリデーターノードへの引数を介してロードバランサーのホスト名を指定することにより、Solanaバリデーターにロードバランサーのホスト名を使用するように指示する必要があります。
ただし、目標は、完全な本番Solanaノードではなく、Akashnetを表示することでした。
Solanaの公式ドキュメントでは、本番環境でのDockerの導入は推奨されていません。本番環境のSolanaノードは12コア、128Gi RAM、500Gi + SSDで実行する必要がありますが、Akashnetは非常に新しいネットワークであり、現在は提供されていません。その多くのプロバイダーはまだです。投資アドバイスではありません。
この記事が気に入った場合は、こちらから投票してくださいhttps://forum.akash.network/t/twitter-deploy-challenge-solana-on-akash/160
PS
私自身(またはここからピックアップしてさらにプッシュしたい人)へのメモはほとんどありません:
- ソラナドッキングウィンドウコンテナが実行さ
solana-run.sh
https://github.com/solana-labs/solana/blob/v1.6.10/sdk/docker-solana/build.sh#L26、https://github.com/solana-labs/solana/ blob / v1.6.10 / run.sh#L41 solana-sys-tuner
Solanaバリデーターを実際に実行する前に実行することがどれほど実行可能かを確認してくださいhttps://docs.solana.com/running-validator/validator-start#system-tuning- set ulimit
nofile=700000
(akash SDLは現在それをサポートしていないようです31 May 2021
)